<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/pgsql.examples.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'pgsql.examples-queries.php',
    1 => 'Пользовательские функции взаимодействия с БД PostgreSQL',
    2 => 'Пользовательские функции взаимодействия с БД PostgreSQL',
  ),
  'up' => 
  array (
    0 => 'pgsql.examples.php',
    1 => 'Примеры',
  ),
  'prev' => 
  array (
    0 => 'pgsql.examples-basic.php',
    1 => 'Основы взаимодействия с БД PostgreSQL',
  ),
  'next' => 
  array (
    0 => 'ref.pgsql.php',
    1 => 'Функции PostgreSQL',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/pgsql/examples.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="pgsql.examples-queries" class="section">
  <h2 class="title">Пользовательские функции взаимодействия с БД PostgreSQL</h2>
  <p class="para">
   Пример содержит пользовательские функции, аналогичные
   устаревшим функциям БД MySQL.

   <div class="example" id="example-1">
    <p><strong>Пример #1 Пример пользовательских функций для работы с БД PostgreSQL</strong></p>
    <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php

</span><span style="color: #FF8000">// Функция потребуется, поскольку PostgreSQL-соединение связывает базу данных
</span><span style="color: #007700">function </span><span style="color: #0000BB">pg_list_dbs</span><span style="color: #007700">(</span><span style="color: #0000BB">$db</span><span style="color: #007700">)
{
    </span><span style="color: #0000BB">assert</span><span style="color: #007700">(</span><span style="color: #0000BB">is_resource</span><span style="color: #007700">(</span><span style="color: #0000BB">$db</span><span style="color: #007700">));

    </span><span style="color: #0000BB">$query </span><span style="color: #007700">= </span><span style="color: #DD0000">'
SELECT
   d.datname as "Name",
   u.usename as "Owner",
   pg_encoding_to_char(d.encoding) as "Encoding"
FROM
   pg_database d LEFT JOIN pg_user u ON d.datdba = u.usesysid
ORDER BY 1;
'</span><span style="color: #007700">;
    return </span><span style="color: #0000BB">pg_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$db</span><span style="color: #007700">, </span><span style="color: #0000BB">$query</span><span style="color: #007700">);
}

</span><span style="color: #FF8000">// Список таблиц
</span><span style="color: #007700">function </span><span style="color: #0000BB">pg_list_tables</span><span style="color: #007700">(</span><span style="color: #0000BB">$db</span><span style="color: #007700">)
{
    </span><span style="color: #0000BB">assert</span><span style="color: #007700">(</span><span style="color: #0000BB">is_resource</span><span style="color: #007700">(</span><span style="color: #0000BB">$db</span><span style="color: #007700">));

    </span><span style="color: #0000BB">$query </span><span style="color: #007700">= </span><span style="color: #DD0000">"
SELECT
   c.relname as \"Name\",
   CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' END as \"Type\",
   u.usename as \"Owner\"
FROM
   pg_class c LEFT JOIN pg_user u ON c.relowner = u.usesysid
WHERE
   c.relkind IN ('r','v','S','')
   AND c.relname !~ '^pg_'
ORDER BY 1;
"</span><span style="color: #007700">;
    return </span><span style="color: #0000BB">pg_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$db</span><span style="color: #007700">, </span><span style="color: #0000BB">$query</span><span style="color: #007700">);
}

</span><span style="color: #FF8000">// Смотрите также описание функции pg_meta_data(). Функция возвращает определение поля в виде массива
</span><span style="color: #007700">function </span><span style="color: #0000BB">pg_list_fields</span><span style="color: #007700">(</span><span style="color: #0000BB">$db</span><span style="color: #007700">, </span><span style="color: #0000BB">$table</span><span style="color: #007700">)
{
    </span><span style="color: #0000BB">assert</span><span style="color: #007700">(</span><span style="color: #0000BB">is_resource</span><span style="color: #007700">(</span><span style="color: #0000BB">$db</span><span style="color: #007700">));
    </span><span style="color: #0000BB">$query </span><span style="color: #007700">= </span><span style="color: #DD0000">"
SELECT
   a.attname,
   format_type(a.atttypid, a.atttypmod),
   a.attnotnull,
   a.atthasdef,
   a.attnum
FROM
   pg_class c,
   pg_attribute a
WHERE
   c.relname = '"</span><span style="color: #007700">.</span><span style="color: #0000BB">$table</span><span style="color: #007700">.</span><span style="color: #DD0000">"'
   AND a.attnum &gt; 0 AND a.attrelid = c.oid
ORDER BY a.attnum;
"</span><span style="color: #007700">;
    return </span><span style="color: #0000BB">pg_query</span><span style="color: #007700">(</span><span style="color: #0000BB">$db</span><span style="color: #007700">, </span><span style="color: #0000BB">$query</span><span style="color: #007700">);
}

</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
    </div>

   </div>
  </p>
 </div><?php manual_footer($setup); ?>