Что такое код pg_affected_rows

Как получить количество удаленных строк в PostgreSQL?

Я ищу способ вернуть число строк, затронутых предложением DELETE в PostgreSQL. В документации указано, что:

При успешном завершении DELETE команда возвращает тэг команды форма

Число — это количество строк удален. Если count равен 0, строк нет соответствует условию (это не считается ошибкой).

Если команда DELETE содержит RETURNING, результат будет аналогично выражению SELECT содержащие столбцы и значения определенный в списке ВОЗВРАЩАЕМОСТИ, вычисляется по строке (-ам), удаленной команда.

Но мне трудно найти хороший пример. Может ли кто-нибудь помочь мне с этим, как я могу узнать, сколько строк было удалено?

EDIT: Я принял решение Милена, но я хотел представить альтернативу, которую я нашел позже. Его можно найти в здесь, как описано в разделе 38.5.5. Получение названия статуса результата.

Что такое код pg_affected_rows

(PHP 4 >= 4.2.0, PHP 5)

pg_affected_rows — Returns number of affected records (tuples)

Описание int pg_affected_rows ( resource result )

pg_affected_rows() returns the number of tuples (instances/records/rows) affected by INSERT , UPDATE , and DELETE queries.

Замечание: This function used to be called pg_cmdtuples() .

Список параметров


Возвращаемые значения

The number of rows affected by the query. If no tuple is affected, it will return 0.

Примеры

Пример 1. pg_affected_rows() example

= pg_query ( $conn , «INSERT INTO authors VALUES (‘Orwell’, 2002, ‘Animal Farm’)» );

$cmdtuples = pg_affected_rows ( $result );

echo $cmdtuples . » tuples are affected.\n» ;
?>

Результат выполнения данного примера:

1 tuples are affected.

Смотрите также


Пред. Начало След.
PostgreSQL Functions Уровень выше pg_cancel_query

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

pg_affected_rows

(PHP 4 >= 4.2.0, PHP 5)

pg_affected_rows — Возвращает количество затронутых запросом записей (кортежей)

Описание

pg_affected_rows() возвращает количество кортежей (сущностей/записей/рядов) затронутых запросом INSERT, UPDATE, и DELETE queries.

Ранее данная функция называлась pg_cmdtuples() .

Список параметров

Результат запроса к PostgreSQL , значение типа resource, возвращаемое функцией pg_query() , pg_query_params() или pg_execute() (среди прочих).

Возвращаемые значения

Количество записей, затронутых запросом. Если ни один кортеж не был затронут, функция вернет 0.

Примеры

Пример #1 Пример использования pg_affected_rows()

= pg_query ( $conn , «INSERT INTO authors VALUES (‘Orwell’, 2002, ‘Animal Farm’)» );

$cmdtuples = pg_affected_rows ( $result );

echo $cmdtuples . » кортежей затронуто.\n» ;
?>

Результат выполнения данного примера:

Смотрите также

  • pg_query() — Выполняет запрос
  • pg_query_params() — Посылает параметризованный запрос на сервер, параметры передаются отдельно от текста SQL запроса
  • pg_execute() — Запускает выполнение ранее подготовленного параметризованного запроса и ждет результат
  • pg_num_rows() — Возвращает количество строк в выборке

(1 row(s) affected)

26.11.2014, 17:11

ms sql server insert into + select (1 row(s) affected) (1 row(s) affected)
Предыстория: при выполнении запроса в management studio добавляет одну строку в бд но в messages.

Error 602 — Could not find row in sysindexes for database ID 25, object ID 1
Error 602: Could not find row in sysindexes for database ID 25, object ID 1, index ID 1. Run DBCC.

Тригер для удаления в варианте FOR EACH ROW для SQL 2000
Всем привет! Вот уперся, ни куда! Нужно удалить 5 строк и dbo1 и точно такие же 5 строк из dbo2.

DataGrid update ПРОБЛЕМА: Key column information is insufficient or incorect. Too many rows were affected by update
Привет всем ! В Вижуал Басик6 на форме имею ДатаГрид с информацией из Аксцессс 2000. Соединение.

pg_affected_rows

(PHP 4 >= 4.2.0, PHP 5)

pg_affected_rows — Returns number of affected records (tuples)

Описание

pg_affected_rows() returns the number of tuples (instances/records/rows) affected by INSERT, UPDATE, and DELETE queries.

This function used to be called pg_cmdtuples() .

Список параметров

PostgreSQL query result resource, returned by pg_query() , pg_query_params() or pg_execute() (among others).

Возвращаемые значения

The number of rows affected by the query. If no tuple is affected, it will return 0.

Примеры

Пример #1 pg_affected_rows() example

= pg_query ( $conn , «INSERT INTO authors VALUES (‘Orwell’, 2002, ‘Animal Farm’)» );

$cmdtuples = pg_affected_rows ( $result );

echo $cmdtuples . » tuples are affected.\n» ;
?>

Результат выполнения данного примера:

Смотрите также

  • pg_query() — Execute a query
  • pg_query_params() — Submits a command to the server and waits for the result, with the ability to pass parameters separately from the SQL command text.
  • pg_execute() — Sends a request to execute a prepared statement with given parameters, and waits for the result.
  • pg_num_rows() — Returns the number of rows in a result

pg_affected_rows

(PHP 4 >= 4.2.0, PHP 5)

pg_affected_rows — Возвращает количество затронутых запросом записей (кортежей)

Описание

pg_affected_rows() возвращает количество кортежей (сущностей/записей/рядов) затронутых запросом INSERT, UPDATE, и DELETE queries.

Ранее данная функция называлась pg_cmdtuples() .

Список параметров

Результат запроса к PostgreSQL , значение типа resource, возвращаемое функцией pg_query() , pg_query_params() или pg_execute() (среди прочих).

Возвращаемые значения

Количество записей, затронутых запросом. Если ни один кортеж не был затронут, функция вернет 0.

Примеры

Пример #1 Пример использования pg_affected_rows()

= pg_query ( $conn , «INSERT INTO authors VALUES (‘Orwell’, 2002, ‘Animal Farm’)» );

$cmdtuples = pg_affected_rows ( $result );

echo $cmdtuples . » кортежей затронуто.\n» ;
?>

Результат выполнения данного примера:

Смотрите также

  • pg_query() — Выполняет запрос
  • pg_query_params() — Посылает параметризованный запрос на сервер, параметры передаются отдельно от текста SQL запроса
  • pg_execute() — Запускает выполнение ранее подготовленного параметризованного запроса и ждет результат
  • pg_num_rows() — Возвращает количество строк в выборке

Коментарии

Note that when you submit several SQL queries, within one BEGIN;COMMIT; like this one :

$SQLQuery = ‘BEGIN;’;
$SQLQuery.= ‘INSERT INTO a (a,b) VALUES (1,2);’;
$SQLQuery.= ‘INSERT INTO b (ref_b,c) VALUES (2,5);’;
$SQLQuery.= ‘COMMIT;’;

$HandleResults = pg_query($SQLQuery);
echo(pg_affected_rows($HandleResults));

pg_affected_rows() will return 0

Concering Bruno Baguette’s note:

The pg_query function only allows one query per function call. When you do your
$sql=»BEGIN;
INSERT .
COMMIT;»;
$result=pg_query($conn,$sql);
echo pg_affected_rows($result);

you get a zero, because only the BEGIN; is executed.

The single query per call is, I beleive, a PHP builtin protection against SQL injection attacks. (Ie someone submitting a string paramter that ends the current query and appends another one)

pg-affected-rows () only runs on the LAST SQL STATEMENT executed. If you compound several statements together then pg_affected_rows might not return what you expect.

= pg_query ( ‘BEGIN; INSERT INTO foo (bar) VALUES (\’baz\’; COMMIT’ );

echo ( pg_affected_rows ( $result ));

?>

will cause 0 to be printed, because the last statement executed by Postgres was COMMIT, which doesn’t affect any rows.

I haven’t tried this so am not certain it works, but you SHOULD be able to get the row counts you want if you split your queries up.

= pg_query ( ‘BEGIN; INSERT INTO foo (bar) VALUES (\’baz\’;’ );

echo ( pg_affected_rows ( $result ));

pg_query ( ‘COMMIT;’ );
?>

should allow you to get the number of rows affected by the previous query. I haven’t tried this yet though, so don’t count on it.

В PHP, как определить, был ли pg_query () запрос, возвращающий данные?

Таким образом, успешный mysqli_query() возвращает true, если нет данных, и он возвращает объект mysqli_result , если есть данные (т. Е. Запрос был SELECT , SHOW , DESCRIBE или EXPLAIN ).

Но с успешным pg_query() он всегда возвращает свойство (ресурс результата запроса) независимо от того, вернутся ли какие-либо данные.

Могу ли я использовать возвращаемое значение pg_query() , чтобы определить, был ли запрос либо SELECT , SHOW , DESCRIBE , либо EXPLAIN , как я могу сделать с mysqli_query() ?

Что такое код pg_affected_rows

(PHP 4 >= 4.2.0, PHP 5)

pg_affected_rows — Returns number of affected records (tuples)

Description int pg_affected_rows ( resource result )

pg_affected_rows() returns the number of tuples (instances/records/rows) affected by INSERT , UPDATE , and DELETE queries.

Note: This function used to be called pg_cmdtuples() .

Parameters


Return Values

The number of rows affected by the query. If no tuple is affected, it will return 0.

Что такое код pg_affected_rows

В Таблице 9.57 перечислен ряд функций, предназначенных для получения информации о текущем сеансе и системе.

В дополнение к перечисленным здесь функциям существуют также функции, связанные с подсистемой статистики, которые тоже предоставляют системную информацию. Подробнее они рассматриваются в Подразделе 27.2.2.

Таблица 9.57. Функции получения информации о сеансе

Имя Тип результата Описание
current_catalog name имя текущей базы данных (в стандарте SQL она называется « каталогом » )
current_database() name имя текущей базы данных
current_query() text текст запроса, выполняемого в данный момент, в том виде, в каком его передал клиент (может состоять из нескольких операторов)
current_role name синоним current_user
current_schema [()] name имя текущей схемы
current_schemas( boolean ) name[] имена схем в пути поиска, возможно включая схемы, добавляемые в него неявно
current_user name имя пользователя в текущем контексте выполнения
inet_client_addr() inet адрес удалённой стороны соединения
inet_client_port() int порт удалённой стороны соединения
inet_server_addr() inet адрес локальной стороны соединения
inet_server_port() int порт локальной стороны соединения
pg_backend_pid() int код серверного процесса, обслуживающего текущий сеанс
pg_conf_load_time() timestamp with time zone время загрузки конфигурации
pg_is_other_temp_schema( oid ) boolean является ли заданная схема временной в другом сеансе?
pg_listening_channels() setof text имена каналов, по которым текущий сеанс принимает сигналы
pg_my_temp_schema() oid OID временной схемы этого сеанса или 0, если её нет
pg_postmaster_start_time() timestamp with time zone время запуска сервера
pg_trigger_depth() int текущий уровень вложенности в триггерах Postgres Pro (0, если эта функция вызывается (прямо или косвенно) не из тела триггера)
session_user name имя пользователя сеанса
user name синоним current_user
version() text информация о версии PostgreSQL . Также можно прочитать версию в машинно-ориентированном виде, обратившись к переменной server_version_num.
pgpro_version() text информация о версии Postgres Pro

Примечание

Функции current_catalog , current_role , current_schema , current_user , session_user и user имеют особый синтаксический статус в SQL : они должны вызываться без скобок после имени. (Postgres Pro позволяет добавить скобки в вызове current_schema , но не других функций.)

Функция session_user обычно возвращает имя пользователя, установившего текущее соединение с базой данных, но суперпользователи могут изменить это имя, выполнив команду SET SESSION AUTHORIZATION . Функция current_user возвращает идентификатор пользователя, по которому будут проверяться его права. Обычно это тот же пользователь, что и пользователь сеанса, но его можно сменить с помощью SET ROLE . Этот идентификатор также меняется при выполнении функций с атрибутом SECURITY DEFINER . На языке Unix пользователь сеанса называется « реальным » , а текущий — « эффективным » . Имена current_role и user являются синонимами current_user . (В стандарте SQL current_role и current_user имеют разное значение, но в PostgreSQL они не различаются, так как пользователи и роли объединены в единую сущность.)

Функция current_schema возвращает имя схемы, которая стоит первой в пути поиска (или NULL, если путь поиска пуст). Эта схема будет задействована при создании таблиц или других именованных объектов, если целевая схема не указана явно. Функция current_schemas(boolean) возвращает массив имён всех схем, находящихся в пути поиска. Её логический параметр определяет, будут ли включаться в результат неявно добавляемые в путь поиска системные схемы, такие как pg_catalog .

Примечание

Путь поиска можно изменить во время выполнения следующей командой:

pg_listening_channels возвращает имена каналов, по которым текущий сеанс принимает сигналы. Подробнее это освещается в описании команды LISTEN .

Функция inet_client_addr возвращает IP-адрес текущего клиента, inet_client_port — номер его порта, inet_server_addr — IP-адрес сервера, по которому он принял подключение клиента, а inet_server_port — соответствующий номер порта. Все эти функции возвращают NULL, если текущее соединение устанавливается через Unix-сокет.

pg_my_temp_schema возвращает O >pg_is_other_temp_schema возвращает true, если заданный OID относится к временной схеме другого сеанса. (Это может быть полезно, например для исключения временных таблиц других сеансов из общего списка при просмотре таблиц базы данных.)

pg_postmaster_start_time возвращает время ( timestamp with time zone ), когда был запущен сервер.

Функция pg_conf_load_time возвращает время ( timestamp with time zone ), когда в последний раз сервер загружал файлы конфигурации. (Если текущий сеанс начался раньше, она возвращает время, когда эти файлы были перезагружены для данного сеанса, так что в разных сеансах это значение может немного различаться. В противном случае это будет время, когда файлы конфигурации считал главный процесс.)

Функция version возвращает строку, описывающую версию сервера Postgres Pro . Эту информацию также можно получить из переменной server_version или, в более машинно-ориентированном формате, из переменной server_version_num. При разработке программ следует использовать server_version_num (она появилась в версии 8.2) либо PQserverVersion , а не разбирать текстовую версию.

В Таблице 9.58 перечислены функции, позволяющую пользователю программно проверить свои права доступа к объектам. Подробнее о правах можно узнать в Разделе 5.6.

Таблица 9.58. Функции для проверки прав доступа

Имя Тип результата Описание
has_any_column_privilege ( user , table , privilege ) boolean имеет ли пользователь указанное право для какого-либо столбца таблицы
has_any_column_privilege ( table , privilege ) boolean имеет ли текущий пользователь указанное право для какого-либо столбца таблицы
has_column_privilege ( user , table , column , privilege ) boolean имеет ли пользователь указанное право для столбца
has_column_privilege ( table , column , privilege ) boolean имеет ли текущий пользователь указанное право для столбца
has_database_privilege ( user , database , privilege ) boolean имеет ли пользователь указанное право для базы данных
has_database_privilege ( database , privilege ) boolean имеет ли текущий пользователь указанное право для базы данных
has_foreign_data_wrapper_privilege ( user , fdw , privilege ) boolean имеет ли пользователь указанное право для обёртки сторонних данных
has_foreign_data_wrapper_privilege ( fdw , privilege ) boolean имеет ли текущий пользователь указанное право для обёртки сторонних данных
has_function_privilege ( user , function , privilege ) boolean имеет ли пользователь указанное право для функции
has_function_privilege ( function , privilege ) boolean имеет ли текущий пользователь указанное право для функции
has_language_privilege ( user , language , privilege ) boolean имеет ли пользователь указанное право для языка
has_language_privilege ( language , privilege ) boolean имеет ли текущий пользователь указанное право для языка
has_schema_privilege ( user , schema , privilege ) boolean имеет ли пользователь указанное право для схемы
has_schema_privilege ( schema , privilege ) boolean имеет ли текущий пользователь указанное право для схемы
has_sequence_privilege ( user , sequence , privilege ) boolean имеет ли пользователь указанное право для последовательности
has_sequence_privilege ( sequence , privilege ) boolean имеет ли текущий пользователь указанное право для последовательности
has_server_privilege ( user , server , privilege ) boolean имеет ли пользователь указанное право для стороннего сервера
has_server_privilege ( server , privilege ) boolean имеет ли текущий пользователь указанное право для стороннего сервера
has_table_privilege ( user , table , privilege ) boolean имеет ли пользователь указанное право для таблицы
has_table_privilege ( table , privilege ) boolean имеет ли текущий пользователь указанное право для таблицы
has_tablespace_privilege ( user , tablespace , privilege ) boolean имеет ли пользователь указанное право для табличного пространства
has_tablespace_privilege ( tablespace , privilege ) boolean имеет ли текущий пользователь указанное право для табличного пространства
has_type_privilege ( user , type , privilege ) boolean имеет ли пользователь указанное право для типа
has_type_privilege ( type , privilege ) boolean имеет ли текущий пользователь указанное право для типа
pg_has_role ( user , role , privilege ) boolean имеет ли пользователь указанное право для роли
pg_has_role ( role , privilege ) boolean имеет ли текущий пользователь указанное право для роли
row_security_active ( table ) boolean включена ли для текущего пользователя защита на уровне строк для таблицы

has_table_privilege проверяет, может ли пользователь выполнять с таблицей заданные действия. В качестве идентификатора пользователя можно задать его имя, O >pg_authid.oid ) или public (это будет указывать на псевдороль PUBLIC). Если этот аргумент опущен, подразумевается текущий пользователь ( current_user ). Таблицу можно указать по имени или по O >has_table_privilege , различающихся по числу и типу аргументов.) Когда указывается имя объекта, его можно дополнить именем схемы, если это необходимо. Интересующее право доступа записывается в виде текста и может быть одним из следующих: SELECT , INSERT , UPDATE , DELETE , TRUNCATE , REFERENCES и TRIGGER . Дополнительно к названию права можно добавить WITH GRANT OPTION и проверить, разрешено ли пользователю передавать это право другим. Кроме того, в одном параметре можно перечислить несколько названий прав через запятую, и тогда функция возвратит true , если пользователь имеет одно из этих прав. (Регистр в названии прав не имеет значения, а между ними (но не внутри) разрешены пробельные символы.) Пара примеров:

has_sequence_privilege проверяет, может ли пользователь выполнять заданные действия с последовательностью. В определении аргументов эта функция аналогична has_table_privilege . Допустимые для неё права складываются из USAGE , SELECT и UPDATE .

has_any_column_privilege проверяет, может ли пользователь выполнять заданные действия с каким-либо столбцом таблицы. В определении аргументов эта функция аналогична has_table_privilege , а допустимые права складываются из SELECT , INSERT , UPDATE и REFERENCES . Заметьте, что любое из этих прав, назначенное на уровне таблицы, автоматически распространяется на все её столбцы, так что has_any_column_privilege всегда возвращает true , если has_table_privilege даёт положительный ответ для тех же аргументов. Но has_any_column_privilege возвращает true ещё и тогда, когда право назначено только для некоторых столбцов.

has_column_privilege проверяет, может ли пользователь выполнять заданные действия со столбцом таблицы. В определении аргументов эта функция аналогична has_table_privilege , с небольшим дополнением: столбец можно задать по имени или номеру атрибута. Для неё допустимые права складываются из SELECT , INSERT , UPDATE и REFERENCES . Заметьте, что любое из этих прав, назначенное на уровне таблицы, автоматически распространяется на все столбцы таблицы.

has_database_privilege проверяет, может ли пользователь выполнять заданные действия с базой данных. В определении аргументов эта функция аналогична has_table_privilege . Для неё допустимые права складываются из CREATE , CONNECT и TEMPORARY (или TEMP , что равносильно TEMPORARY ).

has_function_privilege проверяет, может ли пользователь обратиться к заданной функции. В определении аргументов эта функция аналогична has_table_privilege . Когда функция определяется не своим O >regprocedure (см. Раздел 8.18). Для этой функции допустимо только право EXECUTE . Например:

has_foreign_data_wrapper_privilege проверяет, может ли пользователь обращаться к обёртке сторонних данных. В определении аргументов она аналогична has_table_privilege . Для неё допустимо только право USAGE .

has_language_privilege проверяет, может ли пользователь обращаться к процедурному языку. В определении аргументов эта функция аналогична has_table_privilege . Для неё допустимо только право USAGE .

has_schema_privilege проверяет, может ли пользователь выполнять заданные действия со схемой. В определении аргументов эта функция аналогична has_table_privilege . Для неё допустимые права складываются из CREATE и USAGE .

has_server_privilege проверяет, может ли пользователь обращаться к стороннему серверу. В определении аргументов она аналогична has_table_privilege . Для неё допустимо только право USAGE .

has_tablespace_privilege проверяет, может ли пользователь выполнять заданное действие в табличном пространстве. В определении аргументов эта функция аналогична has_table_privilege . Для неё допустимо только право CREATE .

has_type_privilege проверяет, может ли пользователь обратиться к типу определённым образом. Возможные аргументы аналогичны has_table_privilege . При указании типа текстовой строкой, а не по O >regtype (см. Раздел 8.18). Для неё допустимо только право USAGE .

pg_has_role проверяет, может ли пользователь выполнять заданные действия с ролью. В определении аргументов эта функция аналогична has_table_privilege , за исключением того, что именем пользователя не может быть public . Для неё допустимые права складываются из MEMBER и USAGE . MEMBER обозначает прямое или косвенное членство в данной роли (то есть наличие права выполнить команду SET ROLE ), тогда как USAGE показывает, что пользователь получает все права роли сразу, без SET ROLE .

row_security_active проверяет, включена ли защита на уровне строк для указанной таблицы в контексте и окружении текущего пользователя ( current_user ). Таблицу можно задать по имени или OID.

В Таблице 9.59 перечислены функции, определяющие видимость объекта с текущим путём поиска схем. К примеру, таблица считается видимой, если содержащая её схема включена в путь поиска и нет другой таблицы с тем же именем, которая была бы найдена по пути поиска раньше. Другими словами, к этой таблице можно будет обратиться просто по её имени, без явного указания схемы. Просмотреть список всех видимых таблиц можно так:

Таблица 9.59. Функции для определения видимости

Имя Тип результата Описание
pg_collation_is_visible( collation_oid ) boolean видимо ли правило сортировки
pg_conversion_is_visible( conversion_oid ) boolean видимо ли преобразование
pg_function_is_visible( function_oid ) boolean видима ли функция
pg_op > opclass_oid ) boolean видим ли класс операторов
pg_operator_is_visible( operator_oid ) boolean видим ли оператор
pg_opfamily_is_visible( opclass_oid ) boolean видимо ли семейство операторов
pg_table_is_visible( table_oid ) boolean видима ли таблица
pg_ts_config_is_visible( config_oid ) boolean видима ли конфигурация текстового поиска
pg_ts_dict_is_visible( dict_oid ) boolean видим ли словарь текстового поиска
pg_ts_parser_is_visible( parser_oid ) boolean видим ли анализатор текстового поиска
pg_ts_template_is_visible( template_oid ) boolean видим ли шаблон текстового поиска
pg_type_is_visible( type_oid ) boolean видим ли тип (или домен)

Каждая из этих функций проверяет видимость объектов определённого типа. Заметьте, что pg_table_is_visible можно также использовать для представлений, материализованных представлений, индексов, последовательностей и сторонних таблиц; pg_type_is_visible можно также использовать и для доменов. Для функций и операторов объект считается видимым в пути поиска, если при просмотре пути не находится предшествующий ему другой объект с тем же именем и типами аргументов . Для классов операторов во внимание принимается и имя оператора, и связанный с ним метод доступа к индексу.

Всем этим функциям должен передаваться O >regclass , regtype , regprocedure , regoperator , regconfig или regdictionary ), например:

Заметьте, что проверять таким способом имена без указания схемы не имеет большого смысла — если имя удастся распознать, значит и объект будет видимым.

В Таблице 9.60 перечислены функции, извлекающие информацию из системных каталогов.

Таблица 9.60. Функции для обращения к системным каталогам

Имя Тип результата Описание
format_type( type_oid , typemod ) text получает имя типа данных в формате SQL
pg_get_constraintdef( constraint_oid ) text получает определение ограничения
pg_get_constraintdef( constraint_oid , pretty_bool ) text получает определение ограничения
pg_get_expr( pg_node_tree , relation_oid ) text декомпилирует внутреннюю форму выражения, в предположении, что все переменные в нём ссылаются на таблицу или отношение, указанное вторым параметром
pg_get_expr( pg_node_tree , relation_oid , pretty_bool ) text декомпилирует внутреннюю форму выражения, в предположении, что все переменные в нём ссылаются на таблицу или отношение, указанное вторым параметром
pg_get_functiondef( func_oid ) text получает определение функции
pg_get_function_arguments( func_oid ) text получает список аргументов из определения функции (со значениями по умолчанию)
pg_get_function_ > func_oid ) text получает список аргументов, идентифицирующий функцию (без значений по умолчанию)
pg_get_function_result( func_oid ) text получает предложение RETURNS для функции
pg_get_indexdef( index_oid ) text получает команду CREATE INDEX для индекса
pg_get_indexdef( index_oid , column_no , pretty_bool ) text получает команду CREATE INDEX для индекса или определение одного индексированного столбца, когда column_no не равен 0
pg_get_keywords() setof record получает список ключевых слов SQL по категориям
pg_get_ruledef( rule_oid ) text получает команду CREATE RULE для правила
pg_get_ruledef( rule_oid , pretty_bool ) text получает команду CREATE RULE для правила
pg_get_serial_sequence( table_name , column_name ) text получает имя последовательности, связанной со столбцом типа serial , smallserial или bigserial
pg_get_triggerdef ( trigger_oid ) text получает команду CREATE [ CONSTRAINT ] TRIGGER для триггера
pg_get_triggerdef ( trigger_oid , pretty_bool ) text получает команду CREATE [ CONSTRAINT ] TRIGGER для триггера
pg_get_userby > role_oid ) name получает имя роли по заданному OID
pg_get_viewdef( view_name ) text получает команду SELECT , определяющую представление или материализованное представление ( устаревшая функция)
pg_get_viewdef( view_name , pretty_bool ) text получает команду SELECT , определяющую представление или материализованное представление ( устаревшая функция)
pg_get_viewdef( view_oid ) text получает команду SELECT , определяющую представление или материализованное представление
pg_get_viewdef( view_oid , pretty_bool ) text получает команду SELECT , определяющую представление или материализованное представление
pg_get_viewdef( view_oid , wrap_column_int ) text получает команду SELECT , определяющую представление или материализованное представление; при необходимости разбивает строки с полями, выходящие за wrap_int символов, подразумевая форматированный вывод
pg_options_to_table( reloptions ) setof record получает набор параметров хранилища в виде имя/значение
pg_tablespace_databases( tablespace_oid ) setof oid получает или устанавливает OID баз данных, объекты которых содержатся в заданном табличном пространстве
pg_tablespace_location( tablespace_oid ) text получает путь в файловой системе к местоположению заданного табличного пространства
pg_typeof( any ) regtype получает тип данных любого значения
collation for ( any ) text получает правило сортировки для аргумента
to_reg > rel_name ) regclass получает OID указанного отношения
to_regproc( func_name ) regproc получает OID указанной функции
to_regprocedure( func_name ) regprocedure получает OID указанной функции
to_regoper( имя_оператора ) regoper получает OID указанного оператора
to_regoperator( имя_оператора ) regoperator получает OID указанного оператора
to_regtype( type_name ) regtype получает OID указанного типа
to_regnamespace( schema_name ) regnamespace получает OID указанной схемы
to_regrole( role_name ) regrole получает OID указанной роли

format_type возвращает в формате SQL имя типа данных, определяемого по OID и, возможно, модификатору типа. Если модификатор неизвестен, вместо него можно передать NULL.

pg_get_keywords возвращает таблицу с ключевыми словами SQL, которые воспринимает сервер. Столбец word содержит ключевое слово, а catcode — код категории: U — не зарезервировано, C — имя столбца, T — имя типа или функции, R — зарезервировано. Столбец catdesc содержит возможно локализованное описание категории.

pg_get_constraintdef , pg_get_indexdef , pg_get_ruledef и pg_get_triggerdef восстанавливают команду, создававшую заданное ограничение, индекс, правило или триггер, соответственно. (Учтите, что они возвращают не изначальный текст команды, а результат декомпиляции.) pg_get_expr декомпилирует внутреннюю форму отдельного выражения, например значения по умолчанию для столбца. Это может быть полезно для изучения содержимого системных каталогов. Если выражение может содержать переменные, укажите во втором параметре O >pg_get_viewdef восстанавливает запрос SELECT , определяющий представление. Многие из этих функций имеют две версии, одна из которых позволяет получить форматированный вывод (параметр pretty_bool). Форматированный текст легче читается, но нет гарантии, что он будет всегда восприниматься одинаково будущими версиями Postgres Pro , поэтому не следует применять форматирование при выгрузке метаданных. Если параметр pretty_bool равен false , эта версия функции выдаёт тот же результат, что и версия без параметров.

pg_get_functiondef возвращает полный оператор CREATE OR REPLACE FUNCTION для заданной функции. pg_get_function_arguments возвращает список аргументов функции, в виде достаточном для включения в команду CREATE FUNCTION . pg_get_function_result в дополнение возвращает готовое предложение RETURNS для функции. pg_get_function_identity_arguments возвращает список аргументов, достаточный для однозначной идентификации функции, в форме, допустимой, например для команды ALTER FUNCTION . Значения по умолчанию в этой форме опускаются.

pg_get_serial_sequence возвращает имя последовательности, связанной со столбцом, и NULL, если такой последовательности нет. В первом параметре функции указывается имя таблицы (возможно, дополненное схемой), а во втором имя столбца. Так как первый параметр может содержать имя схемы и таблицы, он воспринимается не как идентификатор в кавычках и поэтому по умолчанию приводится к нижнему регистру, тогда как имя столбца воспринимается как заключённое в кавычки и в нём регистр символов сохраняется. Эта функция возвращает имя в виде, пригодном для передачи функциям, работающим с последовательностями (см. Раздел 9.16). Связь последовательности со столбцом можно изменить или удалить с помощью команды ALTER SEQUENCE OWNED BY . (Данную функцию можно было бы назвать pg_get_owned_sequence ; настоящее её имя отражает то, что она обычно используется со столбцами serial и bigserial .)

pg_get_userbyid получает имя роли по её OID.

pg_options_to_table возвращает набор параметров хранилища в виде пар ( имя_параметра / значение_параметра ), когда ей передаётся pg_class . reloptions или pg_attribute . attoptions .

pg_tablespace_databases позволяет изучить содержимое табличного пространства. Она возвращает набор O >pg_tablespace_databases , и анализируя их каталоги pg_class .

pg_typeof возвращает O >regtype , который является псевдонимом типа OID (см. Раздел 8.18); это означает, что значение этого типа можно сравнивать как OID, но выводится оно как название типа. Например:

Выражение collation for возвращает правило сортировки для переданного значения. Например:

Это значение может быть заключено в кавычки и дополнено схемой. Если для выражения аргумента нет правила сортировки, возвращается значение NULL. Если же правила сортировки не применимы для типа аргумента, происходит ошибка.

Функции to_regclass , to_regproc , to_regprocedure , to_regoper , to_regoperator , to_regtype , to_regnamespace и to_regrole преобразуют имена отношений, функций, операторов, типов, схем и ролей в объекты типа regclass , regproc , regprocedure , regoper , regoperator , regtype , regnamespace и regrole , соответственно. Перечисленные функции отличаются от явных приведений к этим типам тем, что они не принимают числовые O >to_regproc и to_regoper , если данному имени соответствуют несколько объектов).

В Таблице 9.61 перечислены функции, связанные с идентификацией и адресацией объектов баз данных.

Таблица 9.61. Функции получения информации и адресации объектов

Имя Тип результата Описание
pg_describe_object( classid oid , objid oid , objsubid integer ) text получает описание объекта базы данных
pg_ > classid oid , objid oid , objsubid integer ) type text , schema text , name text , identity text получает идентификатор объекта базы данных
pg_ > classid oid , objid oid , objsubid integer ) type text , object_names text[] , object_args text[] получает внешнее представление адреса объекта базы данных
pg_get_object_address( type text , name text[] , аргументы text[] ) classid oid , objid oid , objsubid integer получает адрес объекта базы данных из его внешнего представления

pg_describe_object возвращает текстовое описание объекта БД, идентифицируемого по O >pg_depend .

pg_identify_object возвращает запись, содержащую достаточно информации для однозначной идентификации объекта БД по O > type содержит тип объекта БД; schema — имя схемы, к которой относится объект (либо NULL для объектов, не относящихся к схемам); name — имя объекта, при необходимости в кавычках, которое присутствует, только если оно (возможно, вместе со схемой) однозначно идентифицирует объект (в противном случае NULL ); identity — полный идентификатор объекта, точный формат которого зависит от типа объекта, а каждая его часть дополняется схемой и заключается в кавычки, если требуется.

pg_identify_object_as_address возвращает запись, содержащую достаточно информации для однозначной идентификации объекта БД по O > type содержит тип объекта БД, а object_names и object_args — текстовые массивы, в совокупности формирующие ссылку на объект. Эти три значения можно передать функции pg_get_object_address , чтобы получить внутренний адрес объекта. Данная функция является обратной к pg_get_object_address .

pg_get_object_address возвращает запись, содержащую достаточно информации для уникальной идентификации объекта БД по его типу и массивам имён и аргументов. В ней возвращаются значения, которые используются в системных каталогах, например pg_depend , и могут передаваться в другие системные функции, например pg_identify_object или pg_describe_object . Поле classid содержит O > objid — O > objsubid — идентификатор подобъекта или 0 в случае его отсутствия. Эта функция является обратной к pg_identify_object_as_address .

Функции, перечисленные в Таблице 9.62, извлекают комментарии, заданные для объектов с помощью команды COMMENT . Если найти комментарий для заданных параметров не удаётся, они возвращают NULL.

Таблица 9.62. Функции получения комментариев

Имя Тип результата Описание
col_description( table_oid , column_number ) text получает комментарий для столбца таблицы
obj_description( object_oid , catalog_name ) text получает комментарий для объекта базы данных
obj_description( object_oid ) text получает комментарий для объекта базы данных ( устаревшая форма)
shobj_description( object_oid , catalog_name ) text получает комментарий для разделяемого объекта баз данных

col_description возвращает комментарий для столбца с заданным номером в таблице с указанным O >obj_description нельзя использовать для столбцов таблицы, так столбцы не имеют собственных OID.)

Функция obj_description с двумя параметрами возвращает комментарий для объекта, имеющего заданный O >obj_description(123456,’pg_class’) вернёт комментарий для таблицы с O >obj_description с одним параметром принимает только OID. Она является устаревшей, так как значения OID могут повторяться в разных системных каталогах, и поэтому она может возвращать комментарий для другого объекта.

shobj_description работает подобно obj_description , но она получает комментарии для разделяемых объектов. Некоторые системные каталоги являются глобальными для всех баз данных в кластере и описания объектов в них также хранятся глобально.

Функции, перечисленные в Таблице 9.63, выдают информацию о транзакциях сервера в форме во внешнем представлении. В основном эти функции используются, чтобы определить, какие транзакции были зафиксированы между двумя снимками состояния.

Таблица 9.63. Идентификаторы транзакций и снимков состояния

Имя Тип результата Описание
txid_current() bigint получает идентификатор текущей транзакции и присваивает новый, если текущая транзакция его не имеет
txid_current_snapshot() txid_snapshot получает код текущего снимка
tx > txid_snapshot ) setof bigint возвращает идентификаторы выполняющихся транзакций в снимке
tx > txid_snapshot ) bigint возвращает значение xmax для заданного снимка
tx > txid_snapshot ) bigint возвращает значение xmin для заданного снимка
tx > bigint , txid_snapshot ) boolean видима ли транзакция с указанным идентификатором в данном снимке? (коды подтранзакций не поддерживаются)

Внутренний тип идентификаторов транзакций ( xid ) имеет размер 32 бита, поэтому они повторяются через 4 миллиарда транзакций. Однако эти функции выдают 64-битные значения, дополненные счётчиком « эпохи » , так что эти значения останутся уникальными на протяжении всей жизни сервера. Используемый этими функциями тип данных txid_snapshot сохраняет информацию о видимости транзакций в определённый момент времени. Его состав описан в Таблице 9.64.

Таблица 9.64. Состав информации о снимке

Имя Описание
xmin Идентификатор самой ранней транзакции (txid) из активных. Все предыдущие транзакции либо зафиксированы и видимы, либо отменены и мертвы.
xmax Первый txid из ещё не назначенных. На момент снимка не было запущенных (а значит и видимых) транзакций с идентификатором, большим или равным данному.
xip_list Список идентификаторов транзакций, активных в момент снимка. Он включает только идентификаторы с номерами от xmin до xmax ; хотя уже могут быть транзакции с идентификаторами больше xmax . Если в этом списке не оказывается идентификатора транзакции xmin , это означает, что она уже не выполнялась к моменту снимка и, таким образом, видима или мертва, в зависимости от типа завершения. Идентификаторы подтранзакций в этот список не включаются.

В текстовом виде txid_snapshot представляется как xmin : xmax : xip_list . Например, 10:20:10,14,15 означает xmin=10, xmax=20, xip_list=10, 14, 15 .

Функции, показанные в Таблице 9.65, выдают информацию об уже зафиксированных транзакциях. Они возвращают полезные данные, только когда включён параметр конфигурации track_commit_timestamp и только для транзакций, зафиксированных после его включения.

Таблица 9.65. Информация о фиксации транзакций

Обновление поле Column ТОЛЬКО Если Empty (PostgreSQL)

Я использую PostgreSQL в сочетании с PHP для проекта.

Я target.table содержащий пользователей , которые могут активировать свою учетную запись, введя свой адрес электронной почты (запрос POST через форму).

В таблице, каждый пользователь (с уникальным идентификатором адреса электронной почты) имеет два поля , связанное с ним: activated и activated_timestamp .

Код выше работ , и только обновляет таблицу , если пользователь не был активирован ранее.

Но $result всетаки возвращается true . Таким образом, после отправки формы, страница перекликается updated! вместо already activated … и я не понимаюпочему.

По http://php.net/manual/en/function.pg-query.php pg_query возвращает FALSE только в том случае , если произошла ошибка, в противном случае ресурс возвращается , который отливают на булева всегда TRUE. Вы должны использовать , pg_affected_rows($result) чтобы узнать , есть ли какая — либо запись была изменена из — за ваш запрос.

Это происходит потому, что функция возвращает ресурс, представляющий результат запроса. Это только возвращает FALSE в случае возникновения ошибки.

Попробуйте использовать if (pg_affected_rows($result) == 0) вместо этого.

Илон Маск рекомендует:  Что такое код asp @lcid
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL