Шифрование и секретность в Linux

         

ABORT



ABORT

Отмена изменений, внесенных в транзакционном блоке.

Синтаксис

ABORT [ WORK | TRANSACTION ]

Параметры

Необязательные ключевые слова, делающие команду SQL более наглядной.

Результаты

ROLLBACK. Сообщение выдается при успешном выполнении команды ABORT. NOTICE: ROLLBACK: no transaction in progress. Сообщение выдается при отсутствии незавершенных транзакций.

ALTER GROUP



ALTER GROUP

Модификация структуры группы пользователей.

Синтаксис

ALTER GROUP имя ADD USER

пользователь [. ...] ALTER GROUP имя DROP USER

пользователь [. ...]



Параметры

имя. Имя группы, в которую вносятся изменения. пользователь. Имена пользователей, включаемых в группу или удаляемых из нее. При перечислении имена пользователей разделяются запятыми.

Описание

Команда ALTER GROUP применяется суперпользователем базы данных для включения заданных пользователей в группу и удаления их из группы. Поскольку привилегии могут устанавливаться на уровне групп, включение пользователя в группу автоматически наделяет его соответствующими привилегиями. В группу включаются только уже созданные пользователи. Удаление пользователя из группы не приводит к его удалению из системы.

Группы создаются командой CREATE GROUP и удаляются командой DROP GROUP. Для предоставления и отзыва привилегий в группах используются команды GRANT и REVOKE.



ALTER TABLE



ALTER TABLE

Модификация таблиц и атрибутов нолей.

Синтаксис

ALTER TABLE таблица [ * ]

ADD [ COLUMN ] поле тип

ALTER TABLE таблица [ * ]

ALTER [ COLUMN ] поле { SET DEFAULT noj/нолчант \ DROP DEFAULT }

ALTER TABLE таблица [ * ]

RENAME [ COLUMN ] попе ТО новое_попе

ALTER TABLE таблица

RENAME TO новое_имя

ALTER TABLE таблица

ADD CONSTRAINT новое_ограничение определение

ALTER TABLE таблица

OWNER TO новый_владелец

Параметры

таблица. Имя существующей таблицы, в которую вносятся изменения. поле. Имя нового или существующего поля, в которое вносятся изменения. тип. Тип данных нового поля (используется только при создании новых полей). по _умолчанию. Новое значение но умолчанию для заданного поля. новое_поле. Новое имя поля. новая_таблица. Новое имя таблицы. новое_ограничение определение. Имя и определение нового ограничения, добавляемого в существующую таблицу. За дополнительной информацией о создании ограничений обращайтесь к главе 7. новый_владелец. Новый владелец таблицы.

Результаты

ALTER. Сообщение выдается при успешной модификации поля или таблицы. ERROR. Ошибка — модификация поля или таблицы невозможна (по возможности с разъяснением причин).

Описание

Команда ALTER TABLE предназначена для внесения разнообразных изменений в структуру существующих таблиц баз данных. Переименование полей или таблиц производится ключевым словом RENAME. Содержимое поля или таблицы при переименовании не изменяется. Новые ограничения включаются в таблицу секцией ADD CONSTRAINT, при этом ограничения определяются с таким же синтаксисом, как при создании таблицы командой CREATE TABLE (см. описание команды CREATE TABLE).

В последней на момент издания книги версии PostgreSQL (7.1.x) секция ADD CONSTRAINT поддерживает добавление только ограничений внешнего ключа (FOREIGN KEY) и проверки (CHECK). Ограничение уникальности (UNIQUE) можно установить косвенно — построением уникального индекса командой CREATE INDEX (см. описание команды CREATE INDEX). Чтобы создать любое другое ограничение, необходимо создать таблицу заново и заполнить ее данными.

Новые поля создаются секцией ADD COLUMN с таким же синтаксисом, как при создании таблицы командой CREATE TABLE (см. описание команды CREATE TABLE). Чтобы изменить или удалить значение по умолчанию для поля, воспользуйтесь секцией ALTER COLUMN с подсекциями SET DEFAULT или DROP DEFAULT (помните, что значения по умолчанию применяются только к вновь созданным полям и не распространяются на существующие поля).

PostgreSQL 7.1.x не позволяет задать значение по умолчанию или ограничение для поля одновременно с его созданием в секции ADD COLUMN. Тем не менее секция SET DEFAULT команды ALTER TABLE может использоваться для определения значений по умолчанию после создания поля. Если значение по умолчанию задается после того, как таблица использовалась в течение некоторого времени, не забудьте обновить содержимое поля командой UPDATE.

Примечание 1
Примечание 1

Чтобы модифицировать таблицу, необходимо быть ее владельцем или суперпользователем.



ALTER USER



ALTER USER

Модификация атрибутов и прав пользователя.

Синтаксис

ALTER USER пользователь

[ WITH PASSWORD 'пароль' ]

[ CREATEDB I NOCREATEDB ] [ CREATEUSER | NOCREATEUSER ]

[ VALID UNTIL 'время' ]

Параметры

пользователь. Имя пользователя PostgreSQL, данные которого изменяются командой ALTER USER. пароль. Новый пароль, назначаемый пользователю PostgreSQL. CREATEDB | NOCREATEDB. Привилегия создания новых баз данных. Значение CREATEDB разрешает, а значение NOCREATEDB запрещает создание новых баз (используется по умолчанию). CREATEUSER | NOCREATEUSER. Привилегия суперпользователя. Значение CREATEUSER разрешает выполнение команд CREATE USER и DROP USER, а также предоставляет привилегию суперпользователя (с правами выполнения любых операций с любыми базами данных). По умолчанию используется значение NOCREATEUSER.

ВНИМАНИЕ

Разрешая пользователю PostgreSQL создавать других пользователей, вы автоматически предоставляете ему привилегии суперпользователя, а это создает определенный риск для системы безопасности, поскольку на суперпользователя не распространяются никакие ограничения доступа.

время. Продолжительность действия пароля. При наступлении заданной даты и времени пароль автоматически становится недействительным. Если параметр не задан, срок действия пароля не ограничивается.

Результаты

ALTER USER. Сообщение выдается при успешной модификации атрибутов пользователя. ERROR: ALTER USER: user "пользователь" does not exist. Ошибка — пользователь с заданным именем не существует.

Описание

Команда ALTER USER предназначена для изменения атрибутов и прав пользователей PostgreSQL.

Примечание 1
Примечание 1

Использование команды ALTER USER для изменения привилегий и срока действия паролей разрешено только суперпользователю. Обычные пользователи могут только изменять свой пароль.

Учетные записи пользователей PostgreSQL создаются и удаляются командами CREATE USER и DROP USER соответственно.



BEGIN



BEGIN

Начало отложенного транзакционного блока.

Синтаксис

BEGIN [ WORK | TRANSACTION ]

Параметры

Необязательные ключевые слова, делающие команду SQL более наглядной.

Результаты

BEGIN. Сообщение выдается в начале транзакции. NOTICE: BEGIN: already transaction in progress. Сообщение выдается в том случае, если в сеансе PostgreSQL уже имеется незавершенная транзакция (вложение транзакций в PostgreSQL не допускается). Состояние текущей незавершенной транзакции при этом не изменяется.

Описание

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

Команда BEGIN сообщает серверу о создании транзакцнопного блока в отложенном режиме. В этом режиме команды, передаваемые серверу, сохраняются в очереди до получения сервером команды COMMIT. Также возможен откат транзакции по команде ROLLBACK или при неожиданном отключении пользователя от базы данных.

Отложенный режим часто используется при работе с несколькими взаимосвязанными таблицами, а также для повышения общей эффективности операций с базой данных. Выполнение команд в отложенном режиме снижает затраты ресурсов процессора и дискового пространства, поскольку на каждый блок команд используется только одна операция его фиксации.

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



CLOSE



CLOSE

Закрытие объекта курсора.

Синтаксис

CLOSE курсор

Параметры

Имя открытого курсора.

Результаты

CLOSE. Сообщение выдается при успешном закрытии курсора. NOTICE: PerformPortalClose: portal "курсор" not found. Сообщение выдается в том случае, если заданный курсор не был объявлен или открыт.

Описание

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

Примечание 1
Примечание 1

Команды COMMIT и ROLLBACK завершают текущие транзакции и закрывают все открытые курсоры.



CLUSTER



CLUSTER

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

Синтаксис

CLUSTER индекс ON таблица

Параметры

индекс. Имя индекса, используемого при кластеризации. таблица. Имя таблицы, для которой производится кластеризация.

Результаты

CLUSTER. Сообщение выдается при успешной кластеризации таблицы. ERROR: CLUSTER: "индекс" is not an index for table "таблица". Ошибка — попытка кластеризации индекса, не относящегося к заданной таблице. ERROR: Index "индекс" does not exist. Ошибка — индексе заданным именем не найден в текущей базе данных. ERROR: Relation "таблица" does not exist. Ошибка — таблица с заданным именем не найдена в текущей базе данных. ERROR: Relation "производная_таблица" Inherits from "таблица". Ошибка — у заданной таблицы имеется производная таблица.

Описание

Команда CLUSTER производит кластеризацию таблицы по заданному индексу. Таблица должна существовать, индекс также должен существовать и относиться к указанной таблице.

В процессе кластеризации содержимое таблицы упорядочивается так, чтобы повысить эффективность поиска по конкретному индексу. Кластеризация является «разовой» операцией; чтобы провести повторную кластеризацию, команду CLUSTER необходимо выполнить заново.

ВНИМАНИЕ

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



COMMENT



COMMENT

Определение комментария для объекта базы данных.

Синтаксис

COMMENT ON

[

[ DATABASE | INDEX | RULE | SEQUENCE | TABLE | TYPE | VIEW ] объект

COLUMN таблица.поле|

FUNCTION функция ( аргумент [. ...] ) |

AGGREGATE агрвгатная_функция агрегатный_тип |

OPERATOR оператор ( левый_тип , правый_тип ) |

TRIGGER триггер ON таблица

] IS 'текст'

Параметры

DATABASE INDEX | RULE | SEQUENCE | TABLE | TYPE VIEW. Тип объекта базы данных, для которого создается комментарий. объект. Имя объекта заданного типа, для которого создается комментарий. COLUMN таблица.поле. Уточненное имя поля, для которого создается комментарий. FUNCTION функция ( аргумент [, ...] ). Имя функции, для которой создается комментарий, с указанием типов данных аргументов. AGGREGATE агрегатная_функция агрегатный_тип. Имя агрегатной функции (и агрегатный тип данных), для которой создается комментарий. OPERATOR оператор ( левый_тип, правый_тип). Имя оператора, для которого создается комментарий, с указанием типов левого и правого операндов, разделенных запятыми и заключенных в круглые скобки. Если какой-либо из типов отсутствует, он заменяется ключевым словом NONE. TRIGGER триггер ON таблица. Имя триггера, для которого создается комментарий, и имя таблицы, к которой относится триггер. текст. Текст комментария.

Результаты

COMMENT. Это сообщение выдается при успешном создании комментария для объекта.

Описание

Команда COMMENT относится к числу специфических команд PostgreSQL. Она предназначена для комментирования различных объектов и самой базы данных. В клиенте psql комментарии выводятся следующими командами:

\д+ — вывод списка всех доступных баз данных с комментариями; \dd — вывод списка объектов всех баз данных с комментариями; \d+ — вывод списка объектов текущей базы данных с комментариями; \dt+ — вывод списка всех таблиц в текущей базе данных с комментариями; \ds+ — вывод списка всех последовательностей в текущей базе данных с комментариями; \dv+ — вывод списка всех представлений в текущей базе данных с комментариями; \df+ — вывод списка всех функций в текущей базе данных с комментариями; \da+ — вывод списка всех агрегатных функций в текущей базе данных с комментариями; \do+ — вывод списка всех операторов в текущей базе данных с комментариями; \dT+ — вывод списка всех типов в текущей базе данных с комментариями. Чтобы удалить комментарий, укажите вместо текста NULL.

Примечание 1
Примечание 1

При удалении объектов из системы удаляются и связанные с ними комментарии.



COMMIT



COMMIT

Завершение транзакционного блока и фиксация изменений в базе данных.

Синтаксис

COMMIT [ WORK | TRANSACTION ]

Параметры

Необязательные ключевые слова, делающие команду SQL более наглядной.

Результаты

COMMIT. Сообщение выдается при успешной фиксации изменений в базе данных. NOTICE: COMMIT: no transaction in progress. Сообщение выдается при отсутствии незавершенных транзакций.

Описание

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

Примечание 1
Примечание 1

Если в транзакционном блоке происходит нечто непредвиденное, текущую транзакцию можно откатить командой ABORT. При этом отменяются последствия всех команд SQL, выполненных после последней команды BEGIN.



COPY



COPY

Копирование данных между файлами и таблицами.

Синтаксис

COPY [ BINARY ] таблица [ WITH OIDS ]

FROM { 'файл' | stdin }

[ [ USING ] DELIMITERS 'разделитель' ]

[ WITH NULL AS ' строка _null' ] COPY [BINARY ] table [ WITH OIDS ]

TO { 'файл' | stdout }

[ [ USING ] DELIMITERS 'разделитель' ]

[ WITH NULL AS 'строка_null' ]

Параметры

BINARY. Ключевое слово BINARY означает, что при сохранении и чтении данных командой COPY должен использоваться внутренний двоичный формат PostgreSQL (вместо текстового). При использовании двоичного формата ключевые слова WITH NULL и DELIMITERS неприменимы. таблица. Имя существующей таблицы, в которую (или из которой) копируются данные. FROM. Ключевое слово FROM означает, что команда COPY копирует данные из файла или стандартного ввода в таблицу. ТO. Ключевое слово ТO означает, что команда COPY копирует данные из таблицы в файл или стандартный вывод. WITH OIDS. Необязательный признак копирования идентификатора объекта (OID). Означает, что при выборке или вставке (в зависимости от разновидности команды, COPY FROM или COPY TO) записи сохраняют исходное значение OID. файл. Абсолютный путь к файлу, используемому для ввода пли вывода (например, /usr/local/pgsql/data/employeetable). stdin. Если вместо имени файла указано ключевое слово stdin, данные не загружаются из файла, а передаются клиентским приложением. Если ввод данных осуществляется в клиенте psql, то при вызове команды COPY FROM с ключевым словом stdin вам будет предложено ввести нужный текст. stdout. Направление данных в стандартный вывод. Если вместо имени файла указано ключевое слово stdout, данные не направляются в файл, а передаются непосредственно клиентской программе (например, psql). разделитель. Символ, разделяющий значения полей. При выполнении команды COPY FROM PostgreSQL предполагает, что этот символ разделяет значения полей во входных данных. При выполнении команды COPY TO символ разделяет значения полей в выходных данных. Если разделитель не задан, по умолчанию используется символ табуляции (\t). Разделитель должен состоять из одного символа. Если заданное значение состоит из нескольких символов, PostgreSQL использует только первый символ. строка_null. Последовательность символов, идентифицирующая псевдозначение NULL. По умолчанию используется \N, но вы можете выбрать другое представление, в большей степени соответствующее вашим целям. При копировании данных в таблицу все строки, совпадающие с этой строкой, интерпретируются как NULL, поэтому очень важно, чтобы строковое представление NULL при импортировании и экспортировании данных совпадало и никогда не использовалось в других целях.

Результаты

COPY. Сообщение выдается при успешном выполнении команды COPY. NOTICE: ERROR. Ошибка — процедура копирования завершилась неудачей (с объяснением причины).

Описание

Команда COPY используется для обмена данных между таблицами баз PostgreSQL и файлами в файловой системе. Существует два варианта команды: COPY TO и COPY FROM.

Команда COPY TO направляет все содержимое таблицы в файл или в стандартный вывод (то есть клиенту, подключенному к базе данных). Команда COPY FROM импортирует данные из стандартного файла или из стандартного ввода (то есть от клиента).

Примечание 1
Примечание 1

He путайте команду SQL COPY с командой psql \copy. Команда \copy выполняет операцию COPY FROM stdin или COPY TO stdout, при этом данные хранятся в файле, доступном для psql. Следовательно, права доступа к файлу определяются клиентом, а не серверным процессом postmaster.

За дополнительной информацией об этой команде обращайтесь к разделу «Добавление данных командами INSERT и COPY» в главе 4.

Обмен данными может производиться как в виде простого текста, так и в двоичном формате (ключевое слово BINARY). Двоичный формат значительно ускоряет копирование данных, но вследствие низкоуровневых различий в порядке следования байтов ухудшается адаптируемость приложения.



CREATE AGGREGATE



CREATE AGGREGATE

Определение новой агрегатной функции в базе данных.

Синтаксис

CREATE AGGREGATE имя ( BASETYPE = входной_тип

[ , SFUNC = функция. STYPE = переходный_тип ]

[ , FINALFUNC = завершающая_функция ]

[ , INITCOND = начальное_состояние ] )

Параметры

имя. Имя создаваемой агрегатной функции. входной_тип. Тип входных данных, с которыми работает создаваемая функция. Если агрегатная функция игнорирует входные данные (как, например, функция count()), вместо типа данных указывается строковая константа ANY. функция. Имя функции, вызываемой для обработки всех входных данных, отличных от NULL. Обычно такая функция получает два аргумента: первый аргумент относится к типу данных переходный_тип, а второй — к типу данных входной_тип. Если агрегатная функция не анализирует входные данные, она получает только один аргумент типа переходный_тип. Так или иначе, функция должна возвращать значение типа переходный_тип. переходный_тип. Промежуточный тип данных агрегатной функции. завершающая_функция. Имя итоговой функции, вызываемой для вычисления результата агрегатной функции после обработки всех входных данных. Функция должна получать один аргумент типа переходный_тип. Выходной тип данных агрегатной функции определяется типом возвращаемого значения этой функции. Если параметр FINALFUNC не указан, то последнее переходное значение передается в качестве результата агрегатной функции, а выходной тип данных определяется типом переходный_тип. начальное_состояние. Начальное состояние промежуточного значения агрегатной функции. Задается литералом типа переходный_тип. Если параметр начальное_состояние не задан, промежуточное значение инициализируется псевдозначением NULL.

Результаты

CREATE. Сообщение выдается при успешном создании агрегатной функции. ERROR: AggregateCreate: function "функция(переходпый_тип. входной_тип)" does not exist. Ошибка — заданная функция с двумя параметрами типов переходный_тип и входной_тип не существует. ERROR: AggregateCreate: function "функция(переходпый_тип)" does not exist. Ошибка — заданная функция с одним параметром типа переходный_тип не существует. Сообщение выдается только в том случае, если параметр входной_ тип равен ANY.

Описание

Команда CREATE AGGREGATE предназначена для определения новых агрегатных функций в PostgreSQL Самые распространенные агрегатные функции (min(), avg(), max() и т. д.) принадлежат к числу стандартных функций PostgreSQL. За дополнительной информацией о стандартных функциях PostgreSQL обращайтесь к главе 5.

Агрегатные функции характеризуются в первую очередь типом входных данных. Допускается существование двух и более агрегатных функций с одинаковыми именами, вызываемых с разными типами данных (это называется перегрузкой функций).

ВНИМАНИЕ

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

Агрегатная функция состоит из одной или двух обычных функций: обязательной переходной функции (функция) и необязательной завершающей функции (завершающая _функция).

PostgreSQL использует временную переменную типа переходный_тип, которая обновляется переходной функцией для каждой входной записи. Если в команде CREATE AGGREGATE определена завершающая функция, то после обработки всех данных она будет вызвана для вычисления окончательного результата. В противном случае возвращается итоговое значение переходной переменной без дополнительной обработки.

Команда CREATE AGGREGATE также может задать исходное состояние внутренней переходной переменной; для этой цели используется ключевое слово INITCOND. PostgreSQL хранит это значение в базе данных в виде типа text, однако оно должно представлять константу переходного типа, заданного с ключевым словом STYPE. Если параметр не задан, он инициализируется псевдозначением NULL.

Если переходная функция была создана с атрибутом isstrict (см. описание команды CREATE FUNCTION), она не может вызываться с параметром NULL. Если переходная функция объявлена подобным образом, выполнение агрегатной функции отличается от обычного — все входные параметры NULL игнорируются, и функция для них не вызывается. При этом сохраняется предыдущее переходное значение, а агрегатная функция продолжает обработку входных данных.

Кроме того, если промежуточная переменная была инициализирована псевдозначением NULL, она заменяется первым входным значением, отличным от NULL, а переходная функция вызывается для второго входного значения, отличного от NULL. Эта особенность может пригодиться для создания агрегатных функций, аналогичных функции max(). Обратите внимание: это происходит только в том случае, если входпой_тип и переходный_гпип совпадают. Если типы различаются, вы должны либо передать начальное значение, отличное от NULL, либо использовать переходную функцию без атрибута isstrict.

Если переходная функция не объявлена с атрибутом isstrict, она вызывается для каждого входного значения без исключений. При этом у программиста появляется возможность самостоятельно организовать обработку псевдозначеннй NULL во входных данных.

Если завершающая функция объявлена с атрибутом isstrict, она не будет вызываться в том случае, если итоговое переходное состояние равно NULL; вместо этого автоматически выводится результат NULL.



CREATE DATABASE



CREATE DATABASE

Создание новой базы данных в PostgreSQL.

Синтаксис

CREATE DATABASE база_данных

[ WITH [ LOCATION = { 'каталог' | DEFAULT } ]

[ TEMPLATE = шаблон DEFAULT ]

[ ENCODING = имя_нодировки | номер_кодировки | DEFAULT ] ]

Параметры

база_данных. Имя создаваемой базы данных. каталог. Каталог, в котором хранится база данных. С ключевым словом DEFAULT база сохраняется в каталоге по умолчанию, задаваемом переменной среды PGDATA (или ключом -D, переданным postmaster).

ВНИМАНИЕ

В параметре каталог обычно передается имя системной переменной среды, значение которой описывает инициализированный каталог базы данных. Тем не менее, если при компиляции PostgreSQL использовалась команда gmake с ключом CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS, можно ввести полный, абсолютный путь.

шаблон. Имя шаблона, на основании которого создается новая база данных. Ключевое слово DEFAULT означает шаблон по умолчанию (обычно templatel). имя_кодировки | номер_кодировки. Расширенная кодировка, используемая базой данных. Задается в виде строкового литерала или в виде целочисленного номера, определяющего тип кодировки. Список типов расширенных кодировок в PostgreSQL приведен в приложении А. DEFAULT. Ключевое слово DEFAULT явно задает кодировку по умолчанию (используемую при отсутствии параметра ENCODING).

Результаты

CREATE DATABASE. Сообщение выдается при успешном создании новой базы данных. ERROR: user "пользователь" is not allowed to create/drop database. Ошибка — пользователь PostgreSQL не обладает привилегией createdb, необходимой для создания базы данных. Администратор PostgreSQL предоставляет право создания баз данных пользователям при помощи команды ALTER USER. ERROR: Absolute paths are not allowed as database locations. Ошибка —в параметре LOCATION был указан абсолютный путь, а при компиляции PostgreSQL команда gmake вызывалась без ключа CPPFLAGS=-DALLOW_ABSOLUTE_DBPATHS. ERROR: Relative paths are not allowed as database locations. Ошибка — в параметре LOCATION указан относительный путь, а в PostgreSQL 7.1.x данная возможность не поддерживается. В этом параметре необходимо передать имя переменной среды, содержащей информацию о требуемом местонахождении базы данных. ERROR: createdb: database "база_данных" already exists. Ошибка — база данных с указанным именем уже существует в системном каталоге. ERROR: database path may not contain single quotes. Ошибка —в параметре каталог (местонахождение базы данных в файловой системе) используются апострофы ('), несовместимые с системной программой создания каталогов. ERROR: CREATE DATABASE: unable to create database directory '/каталог'. Ошибка — сохранение базы данных в заданном каталоге невозможно. Причины могут быть разными: переполнение диска, отсутствие прав доступа к заданному каталогу, отсутствие предварительной инициализации командами initdb или initlocation. Заданный каталог должен быть доступен для пользователя, под именем которого работает процесс postmaster. ERROR: CREATE DATABASE: May not be called in a transaction block. Ошибка-попытка вызова CREATE DATABASE в транзакционном блоке. Команда CREATE DATABASE не может использоваться в открытых блоках транзакций.

Описание

Команда CREATE DATABASE создает в системе новую базу данных. Пользователь PostgreSQL, под именем которого вы зарегистрированы, автоматически становится владельцем новой базы данных, поэтому перед вызовом команды следует убедиться в том, что вы работаете под правильным именем.

Примечание 1
Примечание 1

При крайней необходимости владельца базы данных можно изменить, для чего с полем datdba системной таблицы pg_database выполняется команда UPDATE с системным идентификатором другого пользователя PostgreSQL.

Параметр LOCATION обычно описывает переменную среды, содержащую путь к каталогу, в котором создается новая база данных. Переменная должна существовать в рабочей среде пользователя, запустившего процесс postmaster. Таким образом администраторы могут лучше управлять тем, в каких каталогах создаются новые базы данных. За дополнительной информацией по этой теме обращайтесь к главе 9.

Каталог, выбранный для хранения базы данных, должен быть предварительно инициализирован командой initlocation (или initdb). Команды описаны в главе 9.

Примечание 2
Примечание 2

Если при компиляции PostgreSQL был установлен ключ ALLOW_ABSOLUTE_PATH (посредством передачи ключа CPPFLAGS=-DALLOW_ABSOLL)TE_PATH утилите groake после конфигурации), при создании базы данных можно указывать абсолютные пути. По умолчанию этот режим запрещен, что связано с проблемами безопасности и целостности данных, возникающими при создании баз данных в произвольных каталогах.

При создании новой базы данных PostgreSQL создает дубликат указанного шаблона (по умолчанию— tempiatel). Чтобы использовать а качестве шаблона другую базу данных, укажите ее имя в секции TEMPLATE. Чтобы создать пустую базу данных, не содержащую копию объектов шаблона, выберите шаблон template0.



CREATE FUNCTION



CREATE FUNCTION

Определение новой функции в базе данных.

Синтаксис

CREATE FUNCTION имя ( [ тип_аргумента [. ...] ] )

RETURNS тип_возвращаемого_значения

AS 'определение'

LANGUAGE 'язык'

[ WITH ( атрибут [. ...] ) ]

CREATE FUNCTION имя ( [ тип_аргумента [. ...] ] )

RETURNS тип_возвращаемого_значения

AS 'объектный_файл' [ , 'иия_в_обьектном_файпе' ]

LANGUAGE 'язык'

[ WITH ( атрибут [. ..;] ) ]

Параметры

имя. Имя создаваемой функции. тип_аргумента. Тип данных аргумента (или аргументов), получаемого функцией. Существуют три категории типов данных: базовые типы, сложные типы и специальный тип opaque. Тип opaque разрешает передачу аргументов, не относящихся к допустимым типам SQL. Обычно он используется внутренними функциями, а также функциями, написанными на языках С, PL/pgSQL и т. д., в которых возвращаемое значение не относится к стандартным типам данных SQL. тип_возвращаемого_значения. Тип данных возвращаемого значения (или значений) функции. Может относиться к базовому типу, сложному типу, типу setof (обычный тип данных с префиксом setof) или типу opaque. Модификатор setof указывает на то, что функция возвращает несколько записей данных (по умолчанию возвращается только одна запись). Например, тип возвращаемого значения setof i nteger создает функцию, которая может возвращать несколько записей типа integer. атрибут. Необязательный атрибут функции. В PostgreSQL 7.1.x поддерживаются два атрибута, isstrict и iscacheable. определение. Определение создаваемой функции. Задается в виде строки, заключенной в апострофы, хотя ее содержимое в значительной мере зависит от языка программирования. В строке может передаваться внутреннее имя функции, команда SQL или процедурный код (в таких языках, как PL/pgSQL). объектный_файл [ , имя_в_объектном_файле ]. Файл, содержащий динамически загружаемый объектный код, и имя функции в исходном коде на языке С. Второй параметр обязателен лишь в том случае, если имя исходной функции на языке С отличается от имени функции SQL. язык. Название языка, на котором написана функция. Допустимыми значениями являются С, SQL, Internal или имя любого процедурного языка, поддержка которого была установлена командой CREATE LANGUAGE (например, plpgsql). За дополнительной информацией обращайтесь к описанию команды CREATE LANGUAGE.

Результаты

CREATE. Это сообщение возвращается при успешном создании функции.

Описание

Команда CREATE FUNCTION создает новую функцию в текущей базе данных. Владельцем функции становится создавший ее пользователь PostgreSQL.

Атрибуты функции

iscachable. Атрибут означает, что функция всегда возвращает постоянный результат при одинаковых значениях аргументов (то есть вычисленные результаты могут кэшироваться). Такие функции не берут информацию из базы данных и не используют информацию, не включенную в список параметров. По значению атрибута оптимизатор узнает о том, что вместо повторного выполнения функции можно воспользоваться результатом предыдущего вызова с теми же аргументами. isstrict. Атрибут Isstrict означает, что в функции реализована жесткая проверка псевдозначений NULL. В этом случае при вызове с аргументом NULL функция не выполняет никаких действий и сразу возвращает результат NULL.

CREATE GROUP



CREATE GROUP

Создание новой группы PostgreSQL в базе данных.

Синтаксис

CREATE GROUP группа

[ WITH [ SYSID идентификатор_группы ]

[ USER пользователь [. ...]]]

Параметры

группа. Имя создаваемой группы. идентификатор_группы. Системный идентификатор, присваиваемый новой группе. Если идентификатор не задан, он вычисляется автоматически, для чего наибольший из существующих идентификаторов групп увеличивается на 1. пользователь. Пользователь (или разделенный запятыми список пользователей), автоматически включаемый в группу при создании. Пользователи должны быть заранее созданы в базе данных.

Результаты

CREATE GROUP. Сообщение возвращается при успешном создании группы PostgreSQL. ERROR: CREATE GROUP: group name "группа" already exists. Ошибка—группа PostgreSQL с указанным именем уже существует в системе. ERROR: CREATE GROUP: permission denied. Ошибка — пользователь, пытающийся создать группу, не обладает правами суперпользователя. ERROR: CREATE GROUP: user "пользователь" does not exist. Ошибка — пользователь с именем, указанным в секции WITH USER, не существует.

Описание

Суперпользователь базы данных создает новые группы PostgreSQL при помощи команды CREATE GROUP. Группа представляет собой объект базы данных системного уровня, которому можно назначать привилегии (команда GRANT) и включать в него пользователей. Привилегии, назначенные группе, автоматически распространяются на ее членов.

Модификация группы (а также списка пользователей, входящих в нее) осуществляется командой ALTER GROUP. Группы удаляются командой DROP GROUP.



CREATE INDEX



CREATE INDEX

Создает индекс для таблицы.

Синтаксис

CREATE [ UNIQUE ] INDEX индекс ON таблица

[ USING тип ] ( поле [ класс ] [, ...] )

CREATE [ UNIQUE ] INDEX индекс ON таблица

            [ USING тип ] ( функция ( поле [....])[ класс ] )

Параметры

UNIQUE. Необязательное ключевое слово UNIQUE. При его присутствии база данных автоматически проверяет наличие повторяющихся значений в поле (или группе полей), для которых создается индекс. Проверка происходит как при создании индекса, так и при каждом включении данных в таблицу. В дальнейшем PostgreSQL выдает ошибку при выполнении команд INSERT или UPDATE, в результате которых в индексе появляются повторяющиеся значения и команда завершается неудачей. индекс. Имя создаваемого индекса. таблица. Имя таблицы, в которой создается индекс. тип. Алгоритм, используемый при построении индекса. Допустимы три значения: btree — реализация на базе В-деревьев Лемана-Яо с высокой степенью параллельности; rtree — реализация па базе стандартных R-деревьев с использованием квадратичного разбиения по алгоритму Гуттмана; hash — реализация на базе алгоритмов линейного хэширования. поле. Поле (или разделенный запятыми список полей), по которому строится индекс. класс. Необязательный операторный класс. Для большинства пользователей этот параметр не важен. функция. Имя функции, вызываемой для заданных полей (вместо прямого индексирования данных). Указанная функция должна возвращать отдельное значение (не группу значений!), по которому и строится индекс.

Результаты

CREATE. Сообщение возвращается при успешном создании индекса. ERROR: Cannot create Index: 'индекс' already exists. Ошибка— индекс с указанным именем уже существует. ERROR: DefineIndex: attribute "поле" not found. Ошибка — заданное иоле не существует в индексируемой таблице. ERROR: DefineIndex: relation "таблица" not found. Ошибка — заданная таблица не существует в подключенной базе данных.

Описание

Команда CREATE INDEX строит оптимизирующий индекс по значениям одного или нескольких полей заданной таблицы. Следует помнить, что индексы предназначены для повышения эффективности и быстродействия операций с базами данных, однако в некоторых таблицах затраты на сопровождение индекса перевешивают выгоду от его использования. В этом случае индекс снижает общее быстродействие.



CREATE LANGUAGE



CREATE LANGUAGE

Определение нового языка, используемого при создании функций.

Синтаксис

CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE 'язык'

HANDLER обработчик

LANCOMPILER 'комментарий'

Параметры

TRUSTED. Ключевое слово TRUSTED означает, что PostgreSQL разрешает непривилегированным пользователям обходить ограничения, связанные с наличием прав доступа к языку'. Если в процессе определения языка этот параметр не указывался, то использование языка для создания новых функций будет разрешено лишь суперпользователям. PROCEDURAL. Необязательное ключевое слово PROCEDURAL. Делает команду CREATE LANGUAGE более наглядной, но не влияет на ее работу. язык. Имя нового процедурного языка (без учета регистра символов). Переопределение имен существующих, встроенных языков PostgreSQL не допускается. HANDLER обработчик. Имя заранее определенной функции, вызываемой при выполнении процедур PL. комментарий. Строка, сохраняемая в поле lancompiler системной таблицы pg_language. Секция LANCOMPILER оставлена для обеспечения совместимости, не имеет практического смысла и может быть удалена в следующих версиях PostgreSQL. Тем не менее в версии 7.1.x ее присутствие остается обязательным.

Результаты

CREATE. Сообщение выдается при успешном определении нового языка. ERROR: PL handler function обработчик() doesn't exist. Ошибка—функция, указанная в параметре HANDLER, не существует.

Описание

Команда CREATE LANGUAGE загружает новый процедурный язык в подключенную базу данных. Она используется с процедурными языками, указанными с ключом - -with-язык при первоначальной установке PostgreSQL. Например, для включения поддержки pltcl следует передать ключ - -with-tcl в процессе конфигурирования PostgreSQL.

После выполнения этой команды вы сможете создавать новые функции на добавленном языке. Команда CREATE LANGUAGE может выполняться только суперпользователем.

В PostgreSQL 7.1.x (последней версии на момент написания книги) модификация созданных языков не поддерживается. Чтобы изменить определение процедурного языка, необходимо удалить его из базы данных командой DROP LANGUAGE и создать заново.

Примечание 1
Примечание 1

Если команда CREATE LANGUAGE создает язык в базе данных templatel, поддержка этого языка будет автоматически включаться во все базы данных, созданные на основе этого шаблона (используемого по умолчанию).

Чтобы процедурный язык мог использоваться в PostgreSQL, для него должен быть написан специальный обработчик вызовов, откомпилированный в двоичный формат. Следовательно, для написания обработчиков требуются только компилируемые языки (такие, как С и C++).

Обработчик вызовов также должен быть отдельно определен в PostgreSQL как функция, вызываемая без аргументов и возвращающая тип opaque. Подобное определение обработчика предотвращает непосредственный вызов функции в командах SQL.



CREATE OPERATOR



CREATE OPERATOR

Определение нового оператора в базе данных.

Синтаксис

CREATE OPERATOR оператор ( PROCEDURE = функция

[, LEFTARG = тип1 ]

[, RIGHTARG = тип2 ]

[, COMMUTATOR = коммутатор ]

[, NEGATOR = инвертор ]

[, RESTRICT = функция_ограничения ]

[, JOIN = функция_объединения ]

[, HASHES ]

[, SORT1 = левая_сортировка ]

[. SORT2 = правая_сортировка ] )

Параметры

оператор. Последовательность символов — идентификатор нового оператора. Список допустимых символов приведен ниже. функция. Функция, реализующая новый оператор. тип1. Тип левого аргумента. Не используется с унарными операторами, которые всегда располагаются слева от своего операнда. тип2. Тип правого аргумента. Не используется с унарными операторами, которые всегда располагаются справа от своего операнда. коммутатор. Оператор коммутации, связываемый с новым оператором. Коммутатором называется другой существующий оператор, который выполняет коммутацию в процедуре, определяемой для нового оператора (например, интерпретацию левого аргумента как правого или наоборот). инвертор. Оператор отрицания, связываемый с новым оператором. Инвертором называется другой существующий оператор, который выполняет логическую инверсию нового оператора. Инвертор определяется только в том случае, если результат применения ключевого слова NOT к новому оператору остается постоянным при одинаковых исходных данных. фупкция_ограничения. Имя оценочной функции размера. Функция должна существовать и возвращать вещественное значение, а тип данных ее аргументов должен соответствовать определению оператора. функция_одьединепия. Имя оценочной функции объединения. Функция должна существовать и возвращать вещественное значение, а тип данных ее аргументов должен соответствовать определению оператора. HASHES. Ключевое слово HASHES означает, что новый оператор поддерживает хэ-ширующие объединения. левая_сортировка. Оператор левосторонней сортировки (если новый оператор поддерживает слияние). правая_сортировка. Оператор правосторонней сортировки (если новый оператор поддерживает слияние).

Результаты

CREATE. Это сообщение выдается при успешном создании нового оператора.

Описание

Команда CREATE OPERATOR предназначена для определения новых операторов. Пользователь PostgreSQL, создавший оператор, становится владельцем этого оператора в случае успешного создания.

Оператор может содержать до 31 символа из следующего списка:

+ - * / < > = ~ ! (а # % - & | - ? $

Кроме того, для символов оператора устанавливается ряд дополнительных ограничений:

знак доллара ($) может использоваться только в том случае, если оператор состоит из нескольких символов (оператор $ не разрешен); комбинации - - и /* не могут присутствовать в операторе, поскольку они интерпретируются как начало комментария; операторы, состоящие из нескольких символов, могут оканчиваться знаком + (плюс) или - (дефис) только в том случае, если содержат по крайней мере один из следующих символов:

- ! @ # % Л & | ? ? $

Благодаря наличию этих ограничений PostgreSQL может обрабатывать синтаксически правильные запросы, в которых лексемы не нужно разделять дополнительными пробелами.

При создании оператора обязательно должен быть задан по крайней мере один из параметров LEFTARG и RIGHTARG (поскольку при вызове оператора передается хотя бы один аргумент). Если определяется бинарный оператор (с левым и правым операндами), должны быть заданы оба параметра, LEFTARG и RIGHTARG. При определении правого унарного оператора задается только параметр LEFTARG, а при определении левого унарного оператора — только параметр RIGHTARG.

Примечание 1
Примечание 1

Количество аргументов функции, указываемой в параметре PROCEDURE, должно соответствовать количеству операндов у создаваемого оператора.

Чтобы оптимизатор запросов правильно изменял порядок следования операндов, он должен знать, какой оператор следует использовать для коммутации. Для некоторых операторов коммутатор должен существовать (или по крайней мере, это было бы вполне логично). Например, коммутатором оператора > является оператор <, и взаимосвязь этих операторов логически оправдана. При наличии таких данных порядок следования операндов легко изменить и превратить конструкцию х<у в у>х, если оптимизатор запросов сочтет новый вариант более эффективным.

В процессе оптимизации запросов может использоваться не только коммутатор, но и инвертор. Так, для оператора = инвертором является оператор !=. Наличие инвертора позволяет оптимизатору запросов упрощать команды вида

booktown=# SELECT * FROM employees WHERE NOT name = 'John';

В упрощенном виде эта команда выглядит так:

booktown=# SELECT * FROM employees WHERE name != 'John';

Строго говоря, коммутаторы и инверторы могут задаваться еще до их фактического определения. Таким образом, появляется возможность определения взаимных ссылок в операторах. Будьте внимательны и не забудьте своевременно создать оператор, соответствующий определению коммутатора или инвертора.

Параметр HASHES сообщает оптимизатору запросов, что оператор поддерживает алгоритм хэширующего объединения (используемый только в том случае, если оператор представляет проверку равенства, при которой равенство подразумевает совпадение двоичных представлений). Еще два параметра, SORT1 и SORT2, сообщают оптимизатору о том, что соответственно левые и правые операторы поддерживают сортировку слиянием. Операторы сортировки задаются только для оператора равенства и представляются знаками < и > для левого и правого типа данных соответственно.

Параметры RESTRICT и JOIN определяют функции, при помощи которых оптимизатор запросов предварительно оценивает размер итоговых наборов. При определенных условиях PostgreSQL требуется определить количество результатов, получаемых в результате выполнения запроса; в таких случаях оптимизатор запросов вызывает функцию функция_ограничения с аргументами, переданными оператору; возвращаемое значение и является предварительной оценкой. Функция ограничения должна быть заранее определена командой CREATE FUNCTION с правильной сигнатурой.

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



CREATE SEQUENCE



CREATE SEQUENCE

Создание нового генератора числовой последовательности.

Синтаксис

CREATE SEQUENCE последовательность [ INCREMENT приращение ]

[ MINVALUE минимум ] [ MAXVALUE максимум ]

[ START начало ] [ CACHE кэш ][ CYCLE ]

Параметры

последовательность. Имя создаваемой последовательности. приращение. Числовое изменение текущего значения последовательности. При положительном приращении генерируется возрастающая, а при отрицательном — убывающая последовательности. минимум. Минимальное допустимое значение, генерируемое новой последовательностью. По умолчанию равно 1 для возрастающих последовательностей или -2 147 483 647 для убывающих последовательностей. максимум. Максимальное допустимое значение, генерируемое новой последовательностью. По умолчанию равно 2 147 483 647 для возрастающих последовательностей или -1 для убывающих последовательностей. начало. Начальное значение последовательности. По умолчанию последовательность начинается с минимума для возрастающих последовательностей или с максимума для убывающих последовательностей. кэш. Количество элементов последовательности, кэшируемых в памяти. Увеличение размера кэша до величины, большей 1, повышает быстродействие, поскольку некоторые запросы новых элементов последовательности могут предоставляться из кэша. По умолчанию размер кэша равен 1, при этом последовательность генерируется по одному элементу (то есть кэширование не используется). Чтобы включить кэширование, передайте в параметре CACHE команды CREATE SEQUENCE значение, большее 1. CYCLE. При наличии ключевого слова CACHE по достижении максимума или минимума последовательность автоматически переходит к противоположной границе интервала, от которой и генерируются следующие элементы. Направление перехода зависит от того, является последовательность возрастающей или убывающей.

Результаты

CREATE. Сообщение выдается при успешном создании новой последовательности. ERROR: Relation 'последовательность' already exists. Ошибка — последовательность с заданным именем уже существует. ERROR: DefineSequence: START (начало) can't be >= MAXVALUE (максимум). Ошибка — начальное значение последовательности больше допустимого максимума. ERROR: DefineSequence: START (начало) can't be < MINVALUE (минимум). Ошибка — начальное значение последовательности меньше допустимого минимума. ERROR: DefineSequence: MINVALUE (минимум) can't be >= MAXVALUE (максимум). Ошибка — нижняя граница интервала больше верхней.

Описание

Команда CREATE SEQUENCE создает новый генератор числовой последовательности в базе данных.



CREATE TABLE



CREATE TABLE

Создание новой таблицы.

Синтаксис

CREATE [ TEMPORARY | TEMP ] TABLE таблица (

{ поле тип [ограничение_поля [... ] ] | ограничение_таблицы }

[. ... ]

)

[ INHERITS (базовая_таблица [,...])]

ограничение_поля ::=

[ CONSTRAINT имя_ограничения_поля ]

{ NOT NULL | UNIQUE | PRIMARY KEY |

DEFAULT значение |

CHECK ( условие ) |

REFERENCES внешняя_таблица [ ( внешнее_поле ) ]

[ MATCH FULL | MATCH PARTIAL ]

[ ON DELETE операция ]

[ ON UPDATE операция ]

[ DEFERRABLE | NOT DEFERRABLE ]

[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

}

ограничение_та6лицы ::=

[ CONSTRAINT имя_ограничения_таблицы ]

{ UNIQUE ( поле [. ...] ) |

PRIMARY KEY ( поле [. ...] ) |

CHECK ( условие ) |

FOREIGN KEY ( поле [. ... ] ) |

REFERENCES внешняя_таблица [ ( внешнее_поле [,...])]

[ MATCH FULL | MATCH PARTIAL ]

[ ON DELETE операция ]

[ ON UPDATE операция ]

[ DEFERRABLE | NOT DEFERRABLE ]

[ INITIALLY DEFERRED | INITIALLY IMMEDIATE ]

}

операция ::= { NO ACTION | RESTRICT | CASCADE | SET NULL | SET DEFAULT }

Параметры

TEMPORARY TEMP. Признак временной таблицы. Таблица, созданная с ключевым словом TEMPORARY или TEMP, автоматически уничтожается в конце текущего сеанса. Все конструкции уровня таблицы (например, индексы и ограничения) уничтожаются в конце сеанса вместе с таблицей. Если имя временной таблицы совпадает с именем существующей таблицы, все ссылки на таблицу с этим именем на протяжении сеанса будут относиться к временной таблице. Иногда это вызывает проблемы, поскольку временная таблица косвенно замещает существующую таблицу в контексте текущего сеанса до момента ее уничтожения. таблица. Имя создаваемой таблицы. поле. Имя поля в новой таблице. Перечисляемые имена полей указываются в круглых скобках и разделяются запятыми. тип. Сразу же после имени пользователя указывается его тип — стандартный тип или массив одного из стандартных типов. ограничение_поля. Полное определение ограничения для данного поля. Ниже перечислены параметры ограничений полей. имя_ограничения_поля. Необязательное имя, присвоенное ограничению. NULL. Ключевое слово NULL разрешает, чтобы в поле хранилось псевдозначение NULL. Действует по умолчанию. NOT NULL. Поле не может содержать псевдозначение NULL. Ограничение NOT NULL эквивалентно ограничению CHECK (поле NOT NULL). UNIQUE. Ограничение гарантирует, что поле содержит только уникальные значения (без дубликатов). Автоматически устанавливается при создании уникального индекса для поля. PRIMARY KEY. Поле назначается первичным ключом таблицы и используется другими таблицами для однозначной идентификации записей. Ограничение первичного ключа эквивалентно установке ограничений UNIQUE и NOT NULL. DEFAULT. Значение по умолчанию, используемое в том случае, если значение поля не было указано в команде INSERT. Если значение по умолчанию не задано, поле заполняется псевдозначением NULL. CHECK. Значения поля проверяются на соответствие заданному условию. Если при выполнении команды INSERT или UPDATE условие не выполняется, операция вставки/модификации завершается неудачей. условие. Произвольное выражение, результатом которого является логическая величина. Указывается после секции CHECK. REFERENCES. Входные значения ограничиваемого поля сравниваются со значениями другого поля в заданной таблице (за дополнительной информацией о создании и использовании этого ограничения обращайтесь к главе 7). внешняя_таблица. Имя таблицы, используемой для проверки в ограничении внешнего ключа. внешнее_поле. Имя поля внешней таблицы, используемого для проверки в ограничении внешнего ключа. Поле должно принадлежать существующей таблице. Если имя поля не задано, используется первичный ключ заданной таблицы. MATCH FULL | MATCH PARTIAL. Секция MATCH указывает, разрешается ли смешивание псевдозначений NULL и «обычных» значений (отличных от NULL) при вставке в таблицу, у которой внешний ключ ссылается на несколько полей. Таким образом, на практике секция MATCH приносит пользу лишь в ограничениях таблиц, хотя формально она может использоваться и при ограничении полей. Конструкция MATCH FULL запрещает вставку данных, у которых часть полей внешнего ключа содержит NULL (кроме случая, когда NULL равны все поля). В PostgreSQL 7.1.x конструкция MATCH PARTIAL не поддерживается. Если секция MATCH отсутствует, считается, что поля NULL удовлетворяют ограничению. ON DELETE. При выполнении команды DELETE для заданной таблицы с ограничиваемым полем выполняется одна из следующих операций: NO ACTION -если удаление приводит к нарушению целостности ссылок, происходит ошибка (используется по умолчанию, когда операция не указана); RESTRICT — аналогично NO ACTION; CASCADE — удаление всех записей, содержащих ссылки на удаляемую запись, поэтому при каскадном удалении необходимо действовать очень осторожно; SET NULL — поля, содержащие ссылки на удаляемую запись, заменяются псевдозначениями NULL; SET DEFAULT — полям, содержащим ссылки на удаляемую запись, присваивается значение по умолчанию. ON UPDATE. При выполнении команды UPDATE для заданной таблицы выполняется одна из операций, описанных выше. По умолчанию также используется значение NO ACTION. При выборе операции CASCADE все записи, содержащие ссылки па обновляемую запись, обновляются новым значением (вместо удаления, как в случае с ON DELETE CASCADE). DEFERRABLE | NOT DEFERRABLE. Значение DEFERRABLE позволяет отложить выполнение ограничения до конца транзакции (вместо немедленного выполнения после выполнения команды). Значение NOT DEFERRABLE означает, что ограничение всегда проверяется сразу же после выполнения очередной команды. В этом случае пользователь не может отложить проверку ограничения до конца транзакции. По умолчанию выбирается именно этот вариант. INITIALLY DEFERRED | INITIALLY IMMEDIATE. Значение INITIALLY DEFERRED откладывает проверку ограничения до конца транзакции, а при установке значения INITIALLY IMMEDIATE проверка производится после каждой команды. По умолчанию используется значение INITIALLY IMMEDIATE. ограничение_та6лицы. Полное определение ограничения для создаваемой таблицы. Ограничения таблиц могут распространяться на несколько полей, тогда как ограничение поля всегда создает ограничение только для одного поля. Ниже перечислены параметры ограничений таблиц. имя_ограничения_таблицы. Необязательное имя, присвоенное ограничению. поле [. ...]. Имя поля (или разделенный запятыми список полей), для которых устанавливается ограничение таблицы. PRIMARY KEY | UNIQUE. Ключевые слова, при наличии которых для заданных полей автоматически строится индекс. UNIQUE означает, что комбинация значений полей, перечисленных за ключевым словом UNIQUE, принимает только уникальные значения. Попытки вставки новых записей, у которых значение поля (или комбинация значений полей) не является уникальной величиной, завершаются неудачей. Ключевое слово PRIMARY KEY обеспечивает проверку уникальности и запрещает присутствие псевдозначений NULL среди значений заданного поля (или полей). CHECK ( условие ). Команда INSERT или UPDATE завершается успешно лишь при выполнении заданного условия (выражения, возвращающего логический результат). Если условие не выполняется (то есть выражение оказывается ложным), записи не добавляются и не модифицируются. FOREIGN KEY. Ограничение внешнего ключа. Входные значения ограничиваемого поля сравниваются со значениями другого поля в заданной таблице (за дополнительной информацией о создании и использовании этого ограничения обращайтесь к главе 7). Синтаксис части, следующей за секцией FOREIGN KEY, идентичен синтаксису секции REFERENCES для ограничений полей. базовая_та6лица. Имя таблицы, от которой новая таблица наследует поля. Если имена унаследованных полей совпадают с именами полей, ранее включенных в структуру таблицы, PostgreSQL выдает сообщение об ошибке и прерывает выполнение команды.

Результаты

CREATE. Сообщение выдается при успешном создании новой таблицы. ERROR: Relation 'таблица' already exists. Ошибка — таблица с заданным именем уже существует. ERROR: CREATE TABLE: attribute "поле" duplicated. Ошибка — поле включено в список дважды. ERROR: Unable to locate type name 'тип' in catalog. Ошибка — заданный тип поля не существует. ERROR: Illegal class name 'таблица'. Ошибка — имя таблицы начинается с префикса pg_.

Описание

Команда CREATE TABLE создает новую таблицу в текущей базе данных. Только что созданная таблица не содержит данных, а ее владельцем является пользователь, выполнивший команду CREATE TABLE.

В определении новой таблицы перечисляются все имена и типы полей (кроме полей, унаследованных от базовой таблицы). Имя таблицы может иметь длину до 31 символа и автоматически преобразуется к нижнему регистру, если оно не заключено в кавычки. Поле может относиться к стандартному типу данных (например, int4, char) или содержать массив (описывается стандартным типом данных с квадратными скобками — например, float4[]).

Для полей создаваемой таблицы могут устанавливаться разнообразные ограничения. Например, при установке ограничения NOT NULL поле не может содержать псевдозначений NULL.

ВНИМАНИЕ

Имена таблиц не могут совпадать с именами существующих типов данных и таблиц системного каталога. Более того, они даже не могут начинаться с префикса pg_, зарезервированного для системных таблиц.

Максимальное количество полей в таблице равно примерно 1600. С учетом проблем, связанных с размером записей, на практике это число оказывается несколько меньшим.

Дополнительная информация о создании таблиц приведена в главе 4. За информацией об ограничениях полей и таблиц обращайтесь к главе 7.



CREATE TABLE AS



CREATE TABLE AS

Создание новой таблицы по результатам выборки.

Синтаксис

CREATE TABLE таблица [ (поле [. ...] ) ]

AS выборка

Параметры

таблица. Имя создаваемой таблицы. поле. Имя поля в создаваемой таблице; при перечислении нескольких полей их имена разделяются запятыми. Количество полей в таблице должно совпадать с количеством полей, возвращаемых в результате выборки. выборка. Синтаксически правильная команда SELECT. Количество полей должно соответствовать количеству полей в необязательном списке, предшествующем секции AS.

Результаты

SELECT. Сообщение возвращается при успешном создании и вставке данных в таблицу. ERROR. CREATE TABLE/AS SELECT has mismatched column count. Ошибка — количество полей в списке, заключенном в круглые скобки, отличается от количества полей, возвращаемых командой SELECT.

Описание

Команда CREATE TABLE AS создает таблицу по записям, входящим в итоговый набор, например по результатам запроса к таблице, существующей в базе данных. Типы и содержимое полей новой таблицы определяются параметрами команды SELECT.

В PostgreSQL 7.1.x при явном перечислении полей в круглых скобках не допускается использование символа * в команде SELECT.



CRЕАТЕ TRIGGER



CRЕАТЕ TRIGGER

Создание нового триггера.

Синтаксис

CREATE TRIGGER триггер { BEFORE | AFTER } { событие [ OR событие ... ] }

ON таблица

FOR EACH { ROW STATEMENT }

EXECUTE PROCEDURE функция ( аргументы )

Параметры

триггер. Имя создаваемого триггера. таблица. Имя таблицы, с которой ассоциируется триггер. событие. Событие, по которому срабатывает триггер. Допустимые значения — INSERT, DELETE и UPDATE. Триггер может быть связан с несколькими событиями. функция. Имя функции, связываемой с новым триггером. Функция вызывается при срабатывании триггера; в определении должен быть указан тип возвращаемого значения opaque — этот тип используется только внутренними функциями, которые не могут напрямую вызываться в командах SQL. аргументы. Строка аргументов, передаваемая функции при срабатывании триггера.

Результаты

CREATE. Это сообщение выдается при успешном создании нового триггера.

Описание

Команда CREATE TRIGGER создает триггер в базе данных. Триггер ассоциируется с таблицей, указанной в секции ON. При срабатывании триггера автоматически выполняется заданная функция.

Примечание 1
Примечание 1

Триггеры могут создаваться только владельцами таблиц или суперпользователями.

При создании триггера необходимо выбрать время срабатывания (до или после попытки выполнения некоторой операции). Если триггер срабатывает до заданного события (BEFORE), он может отменить выполнение операции для текущей записи или изменить данные, заносимые в таблицу. Если триггер срабатывает после заданного события (AFTER), он будет знать обо всех изменениях, внесенных в результате события.



CREATE TYPE



CREATE TYPE

Определение нового типа данных в базе.

Синтаксис

CREATE TYPE тип ( INPUT = входная_функция, OUTPUT = входная_функция

, INTERNALLENGTH = { внутренний_размер | VARIABLE }

[ , EXTERNALLENGTH - { внешний_размер | VARIABLE } ]

[ , DEFAULT = "значение_по^умолчанию" ]

[ , ELEMENT = элемент ] [ . DELIMITER = разделитель ]

[ , SEND = функция_отправки ] [ , RECEIVE = функция_получения ]

[ , PASSEDBYVALUE ]

[ , ALIGNMENT = выравнивание ]

[ , STORAGE = хранение ] )

Параметры

тип. Имя нового типа. Максимальная длина имени равна 30 символам. Имена типов должны быть уникальными в рамках базы данных и не могут начинаться с символа подчеркивания (зарезервирован для типов косвенно определяемых массивов). внутренний_размер. Внутренний размер определяемого типа (в байтах). внешний_размер. Внешний размер определяемого тина (в байтах). входная_фунщия. Имя входной функции определяемого типа. Функция должна быть заранее определена командой CREATE FUNCTION и должна преобразовывать внешнее представление типа во внутреннее представление. выходная_фуикция. Имя выходной функции определяемого типа. Функция должна преобразовывать внутреннее представление типа во внешнее представление (форму, предназначенную для вывода). элемент. Тип данных отдельного элемента массива, адресуемого данным типом (при самостоятельной реализации типов для хранения массивов). Параметр элемент должен быть типом данных фиксированного размера. разделитель. Разделитель значений для косвенно определяемых массивов, связанных с типом (тип[]). значение_по_умолчанию. Значение по умолчанию для нового типа данных. Если значение не указано, по умолчанию поля заполняются либо величиной, указанной в ограничении DEFAULT уровня таблицы, либо псевдозначениямп NULL. функция_отправки. Имя функции отправки для определяемого типа. Функция преобразует данные в форму, подходящую для передачи на другой компьютер, однако в PostgrcSQL 7.1.x такая возможность не поддерживается, поэтому параметр не используется. функция_получения. Имя функции получения для определяемого типа. Функция получает данные в форме, сгенерированной функцией отправки, и восстанавливает но ней внутреннее представление типа. В PostgreSQL 7.1 .х такая возможность не поддерживается, поэтому параметр не используется. PASSEDBYVALUE. Необязательное ключевое слово PASSEDBYVALUE означает, что операторы п функции, использующие определяемый тип данных, должны передавать соответствующие аргументы по значению, а не по ссылке (как происходит по умолчанию). Параметр не может использоваться с типами, внутреннее представление которых занимает более 4 байт. выравнивание. Способ выравнивания определяемого типа в памяти. Допустимые значения — char, int2, int4 и doubl e. Если параметр не задан, по умолчанию выбирается значение int4. хранение. Принцип храпения значений определяемого типа. Допустимые значения — plain, external, extended и main. Если параметр не задан, по умолчанию выбирается значение plain.

Результаты

CREATE. Это сообщение выдается при успешном создании типа.

Описание

Команда CREATE TYPE предназначена для регистрации новых пользовательских типов в текущей базе данных. Пользователь PostgreSQL, выполнивший команду, становится владельцем нового типа.

При создании нового типа указываются две пользовательские функции, написанные на С, — входная и выходная функции определяемого типа данных. Входная функция преобразует внешнее представление типа во внутреннее представление, которое используется системными объектами, связанными с этим типом. Выходная функция преобразует внутреннее представление во внешнее.

Обе функции, входная и выходная, вызываются с одним аргументом типа opaque. Выходная функция должна возвращать тип opaque, тогда как входная функция возвращает значение определяемого типа. Обратите внимание: функции должны быть определены до создания типа.

Тип определяется с фиксированным или с переменным размером. Если вы хотите создать тип фиксированного размера, присвоите параметру INTERNALLENGTH нужное числовое значение (в байтах). Если тип определяется с переменным размером, используйте ключевое слово VARIABLE вместо параметра INTERNALLENGTH; в этом случае размер будет определяться по тем же правилам, что и для типа text. Внешний размер (EXTERNALLENGTH) задается по тому же принципу — в виде числового значения или с ключевым словом VARIABLE.

После создания нового типа PostgreSQL автоматически определяет тип массива для нового типа данных. Во внутреннем представлении этому типу присваивается имя_тип (с начальным символом подчеркивания). Все ссылки вида тип[] автоматически преобразуются к внутреннему типу массива (_тип).

Параметр DELIMITER позволяет задать символ-разделитель для массивов. Этот символ используется для разделения элементов массивов в константах, передаваемых PostgreSQL (например, {1, 2, 3}), а также при разделении элементов во внешнем отображении массивов этого типа. По умолчанию в качестве разделителя используется запятая.

Если вы предпочитаете смоделировать массив вручную, передайте функции PostgreSQL значения array_in и array_out в качестве входной и выходной функций соответственно, затем при помощи ключевого слова ELEMENT задайте типы данных элементов массива.

Ключевое слово DEFAULT задает значение по умолчанию, действующее при вставке в новое поле, на уровне системы. Обычно при отсутствии значения и ограничений DEFAULT поля инициализируются псевдозначением NULL. Учтите, что в PostgreSQL 7.1.x задается внутреннее представление значения по умолчанию.

Параметр выравнивание определяет принцип выравнивания нового типа данных в памяти. Для типов данных с переменным внутренним размером должно быть выбрано значение int4 или double.

Параметр храпение определяет метод хранения данных. Для типов данных с фиксированным внутренним размером может задаваться только тип plain, а для типов с переменной внутренней длиной допустимы значения plain, extended, external или main.

При выборе метода plain данные хранятся в несжатом, «буквальном» представлении, максимальный размер со ставляет 8 Кбайт. Метод extended позволяет превысить порог и работать со значениями большего размера, а также хранить данные вне физической таблицы с использованием расширения PostgreSQL TOAST (The Oversized Attribute Storage Technique), разработанного Томом Лейном (Tom Lane).

Метод external обладает определенным сходством с методом extended, но не пытается сжимать данные перед тем, как использовать расширение TOAST для хранения данных вне физических таблиц. Метод mai n тоже похож на extended — он также поддерживает сжатие и расширение TOAST, но ориентирован на физическое хранение данных в главной таблице и выбирает другой способ только в том случае, если не остается иного выбора.



CREATE USER



CREATE USER

Создание нового пользователя базы данных PostgreSQL

Синтаксис

CREATE USER пользователь

[ WITH [ SYSID uid ]

[ PASSWORD 'пароль' ] ]

[ CREATEDB | NOCREATEDB ]

[ CREATEUSER | NOCREATEUSER ]

[ IN GROUP группа [. ...] ]

[ VALID UNTIL 'срок' ]

Параметры

пользователь. Имя создаваемого пользователя. uid. Системный идентификатор создаваемого пользователя. Если команда CREATE USER выполняется без параметра SYSID, идентификатор пользователя назначается автоматически. пароль. Пароль нового пользователя PostgreSQL. Если в конфигурации базы данных установлена парольная аутентификация, подключение к пей возможно лишь при наличии пароля у пользователя. CREATEDB | NOCREATEDB. Право создания новых баз данных. Ключевое слово CREATEDB разрешает пользователю создавать новые базы данных, а ключевое слово NOCREATEDB явно указывает на отсутствие этого права (по умолчанию право создания баз данных не предоставляется). CREATEUSER NOCREATEUSER. Привилегия суперпользователя. Ключевое слово CREATEUSER разрешает пользователю выполнять команды CREATE USER и DROP USER, а также наделяет его привилегиями суперпользователя с неограниченными правами во всех базах данных. По умолчанию используется ключевое слово NOCREATEUSER. группа. Необязательное имя группы, в которую автоматически включается пользователь. срок. Срок истечения действия пароля. При достижении заданного момента пароль автоматически становится недействительным. Если параметр не задай, срок действия пароля не ограничивается.

Результаты

CREATE USER. Это сообщение выдается при успешном создании пользователя.

Описание

Команда CREATE USER включает новых пользователей в базу данных PostgreSQL и может использоваться только суперпользователями базы данных. За дополнительной информацией об аутентификации и управлении пользователями обращайтесь к главе 10.

Примечание 1
Примечание 1

Сценарий createuser предназначен для создания новых пользователей базы данных в командной строке операционной системы. Он работает практически по тем же правилам, что и команда CREATE USER.



CREATE VIEW



CREATE VIEW

Создание представления для таблицы.

Синтаксис

CREATE VIEW представление AS запрос

Параметры

представление. Имя создаваемого представления. запрос. Запрос SQL, определяющий структуру и содержимое представления.

Результаты

CREATE. Сообщение, возвращаемое при успешном создании представления. ERROR: Relation 'представление' already exists. Ошибка — представление с заданным именем уже существует. NOTICE create: attribute "поле" has an unknown type. Сообщение выдается в том случае, если тип данных поля, указанного в определении запроса, неизвестен.

Описание

Команда CREATE VIEW создает новое представление для таблицы из существующей базы данных.

Примечание 1
Примечание 1

В PostgreSQL версии 7.1.x (последней на момент написания книги) представления доступны только для чтения.



CURRENT DATE



CURRENT DATE

Получение текущей даты.

Синтаксис

CURRENT_DATE

Параметры

Функция вызывается без параметров.

Результаты

Текущая дата в виде значения типа aate.

Описание

Рункция CURRENT_DATE возвращает текущую системную дату в виде типа date. Порченную информацию можно отформатировать по своему усмотрению командой SET DATESTYLE. За дополнительной информацией об этой переменной и режимах ее настройки обращайтесь к главе 3.



CURRENT_TIME



CURRENT_TIME

Получение текущего времени.

Синтаксис

CURRENT_TIME

Параметры

Функция вызывается без параметров.

Результаты

Текущее время в виде значения типа time.

Описание

Функция CURRENT_TIME возвращает текущее системное время в виде типа time.



CURRENT_TIMESTAMP



CURRENT_TIMESTAMP

Получение текущих даты и времени.

Синтаксис

CURRENT_TIMESTAMP

Параметры

Функция вызывается без параметров.

Результаты

Текущая дата и текущее время.

Описание

Функция CURRENT_TIME возвращает текущие дату и время в виде значения типа timestamp.



CURRENT_USER



CURRENT_USER

Имя текущего пользователя базы данных.

Синтаксис

CURRENT_USER

Параметры

Функция вызывается без параметров.

Результаты

Имя текущего пользователя базы данных.

Описание

Функция CURRENTJJSER возвращает имя текущего пользователя в виде строки типа name (нестандартный строковый тип с длиной 31 символ, предназначенный для хранения системных идентификаторов).



DECLARE



DECLARE

Определение нового курсора.

Синтаксис

DECLARE курсор

[ BINARY ] [ INSENSITIVE ] [ SCROLL ]

CURSOR FOR запрос

[ FOR { READ ONLY | UPDATE [ OF поле [....]]}]

Параметры

курсор. Имя нового курсора. BINARY. Выборка данных производится в двоичном формате вместо принятого по умолчанию текстового формата. INSENSITIVE. Ключевое слово INSENSITIVE означает, что данные, полученные с использованием курсора, не подвержены изменениям со стороны других процессов (и других курсоров). В PostgreSQL это требование выполняется автоматически, поскольку все операции с курсорами заведомо инкапсулируются в транзакциях. Параметр существует для совместимости с другими системами. SCROLL. Ключевое слово SCROLL разрешает выборку нескольких записей при каждой операции FETCH. Режим поддерживается по умолчанию, поэтому наличие ключевого слова SCROLL ни па что не влияет. запрос. Запрос SQL, по которому курсор производит выборку записей. Структура запроса приведена в описании команды SELECT. READ ONLY. Курсор используется только для чтения данных. Наличие параметра READ ONLY ни на что не влияет, поскольку в PostgreSQL курсорам представляется доступ только для чтения. UPDATE. Курсор используется для обновления таблиц. В PostgreSQL версии 7.1.x (последней на момент написания книги) обновление через курсоры не поддерживается. поле. Список полей, обновляемых курсором. В PostgreSQL версии 7.1.x (последней на момент написания книги) обновление через курсоры не поддерживается.

Результаты

SELECT. Сообщение выдается при успешном выполнении команды SELECT. NOTICE: Closing pre-existing portal "курсор". Сообщение означает, что в текущем траизакционном блоке уже был объявлен курсор с заданным именем. В этом случае ранее объявленный курсор автоматически уничтожается. ERROR: DECLARE CURSOR may only be used in begin/end transaction blocks. Ошибка — попытка объявления курсора вне трапзакционного блока. Курсоры используются только в транзакционных блоках.

Описание

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

ВНИМАНИЕ

При использовании двоичных (BINARY) курсоров необходима осторожность, поскольку они не поддерживаются некоторыми клиентами.

PostgreSQL не требует отдельного открытия курсоров — курсоры открываются автоматически при объявлении. Тем не менее препроцессор ecpg поддерживает команду OPEN для встроенных и интерактивных приложений SQL.



DELETE



DELETE

Удаление записей из таблицы.

Синтаксис

DELETE FROM [ ONLY ] таблица [ WHERE условие ]

Параметры

таблица. Имя таблицы, из которой удаляются записи. условие. Критерий отбора удаляемых записей. Структура условия аналогична условию секции WHERE команды SELECT — за дополнительной информацией об условиях обращайтесь к описанию команды SELECT. Учтите, что без секции WHERE из таблицы удаляются все записи.

Результаты

DELETE число. Это сообщение выдается при выполнении команды. Параметр число определяет количество удаленных записей. Если число равно 0, это означает, что ни одна запись не соответствовала критерию удаления пли же таблица не содержала ни одной записи.

Описание

Команда DELETE удаляет записи из таблицы. Удаляются только те записи, которые соответствуют заданному условию. Чтобы полностью удалить из таблицы все записи, достаточно вызвать команду DELETE без условия. После выполнения команды таблица остается пустой.

Примечание 1
Примечание 1

Команда TRUNCATE очищает таблицу более эффективно (и более наглядно), чем команда DELETE без условия.

Ключевое слово ONLY предотвращает удаление записей из таблиц, производных от заданной таблицы. В этом случае операция удаления выполняется только с непосредственно указанной таблицей. Если ключевое слово ONLY отсутствует, операция удаления распространяется не только на заданную таблицу, но и на все производные таблицы.



DROP AGGREGATE



DROP AGGREGATE

Удаление агрегатной функции из базы данных.

Синтаксис

DROP AGGREGATE функция тип

Параметры

функция. Имя удаляемой агрегатной функции. тип. Тип данных, передаваемый агрегатной функции.

Результаты

DROP. Сообщение выдается при успешном удалении агрегатной функции. ERROR: RemoveAggregate: aggregate 'функция' for 'тип' does not exist. Ошибка — агрегатная функция с заданным именем и типом не существует.

Описание

Команда DROP AGGREGATE удаляет определение агрегатной функции из базы данных. Выполнение этой команды, как и остальных команд DROP, разрешено только владельцу удаляемых объектов.



DROP DATABASE



DROP DATABASE

Удаление базы данных из системы.

Синтаксис

DROP DATABASE база_двнных

Параметры

Имя удаляемой базы данных.

Результаты

DROP DATABASE. Сообщение выдается при успешном удалении базы данных. ERROR: user 'пользователь' is not allowed to create/drop databases. Ошибка — команда удаления базы данных введена пользователем, не обладающим привилегиями суперпользователя. Удаление баз данных разрешено только пользователям с привилегией CREATEDB. За дополнительной информацией обращайтесь к описанию команды CREATE USER. ERROR: dropdb: cannot be executed on the template database. Ошибка —попытка удаления базы данных tempi atel. Эта база данных является системной и не может удаляться пользователями. ERROR: dropdb: cannot be executed on an open database. Ошибка — попытка удаления базы данных, к которой пользователь подключен в настоящий момент. При получении этой ошибке попробуйте подключиться к базе данных tempi atel и повторно введите команду удаления базы данных, с которой вы раньше работали. ERROR: dropdb: database ' база_данных' does not exist. Ошибка — попытка удаления несуществующей базы данных. ERROR: dropdb: database 'база_данных' Is not owned by you. Ошибка — попытка удаления базы данных, принадлежащей другому пользователю. ERROR: dropdb: May not be called in a transaction block. Ошибка — попытка вызова команды DROP DATABASE в транзакциониом блоке. Перед удалением базы данных необходимо завершить все текущие транзакции. NOTICE: The database directory 'каталог' could not be removed. Попытка удаления каталога данных завершилась неудачей. Для завершения операции каталог данных необходимо удалить вручную.

Описание

Команда DROP DATABASE удаляет базу данных из системы. При удалении базы уничтожаются все данные и информация в системном каталоге, относящиеся к базе. Попытка удаления текущей базы данных, к которой вы подключены в настоящий момент, приводит к ошибке; по этой причине бывает удобнее использовать сценарий dropdb.

Примечание 1
Примечание 1

Удаление базы данных может производиться только владельцем или суперпользователем.



DROP FUNCTION



DROP FUNCTION

Удаление пользовательской функции.

Синтаксис

DROP FUNCTION функция ( [ тип [....]])

Параметры

функция. Имя существующей функции, удаляемой из базы данных. тип. Ноль пли более типов аргументов функции. Комбинация имени и типов однозначно определяет функцию.

Результаты

DROP. Сообщение выдается при успешном удалении функции. ERROR: RemoveFunction: Function 'имя(тиггы)' does not exist»Ошибка— функция с заданным именем и типами аргументов не существует в текущей базе данных.

Описание

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

ВНИМАНИЕ

Команда DROP FUNCTION не проверяет наличие других объектов базы данных, зависящих от данной функции. Поэтому вы должны проверить самостоятельно, не отразится ли удаление функции на работе таких объектов.



DROP GROUP



DROP GROUP

Удаление группы пользователей из базы данных.

Синтаксис

DROP GROUP группа

Параметры

Имя удаляемой группы.

Результаты

DROP GROUP. Это сообщение выдается при успешном удалении группы.

Описание

Команда DROP GROUP удаляет группу из текущей базы данных. Команда работает независимо от команды DROP USER, поэтому учетные записи пользователей, входивших в удаляемую группу, остаются в базе данных.



DROP INDEX



DROP INDEX

Удаление индекса из базы данных.

Синтаксис

DROP INDEX индекс [, ...]

Параметры

Имя индекса, удаляемого из базы данных.

Результаты

DROP. Сообщение выдается при успешном удалении индекса. ERROR: index "индекс" does not exist. Ошибка — индекс с указанным именем отсутствует в базе данных.

Описание

При помощи этой команды владелец индекса может удалить его из базы данных.



DROP LANGUAGE



DROP LANGUAGE

Удаление процедурного языка из базы данных.

Синтаксис

DROP [ PROCEDURAL ] LANGUAGE 'язык'

Параметры

Имя существующего языка, удаляемого из базы данных.

Результаты

DROP. Сообщение выдается в том случае, если удаление языка прошло без ошибок. ERROR: Language "язык" does not exist. Ошибка — язык с указанным именем не существует в базе данных.

Описание

Команда DROP PROCEDURAL LANGUAGE удаляет определение процедурного языка из базы данных.

ВНИМАНИЕ

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



DROP OPERATOR



DROP OPERATOR

Удаление оператора из базы данных.

Синтаксис

DROP OPERATOR оператор

( { левый__тип NONE } .

{ правый_тип | NONE } )

Параметры

оператор. Удаляемый оператор. левыйjnun \ NONE. Тип левого операнда (или NONE при его отсутствии). правый_тип \ NONE. Тип правого операнда (или NONE при его отсутствии).

Результаты

DROP. Сообщение возвращается при успешном удалении пользователя. ERROR: RemoveOperator: binary operator 'оператор' taking 'левый_тип' and 1 правый_тип' does not exi st. Ошибка — оператор с указанным именем и типами операндов не существует. ERROR: RemoveOperator: left unary operator 'оператор' taking 'левый_mun' does not exist. Ошибка — левый унарный оператор с указанным именем не существует. ERROR: RemoveOperator: right unary operator 'оператор' taking 'правыйjnun' does not exist. Ошибка — правый унарный оператор с указанным именем не существует.

Описание

Команда DROP OPERATOR удаляет существующий оператор из базы данных. Удаление операторов разрешено только их владельцам и суперпользователям.

ВНИМАНИЕ

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



DROP RULE



DROP RULE

Удаление правила из базы данных.

Синтаксис

DROP RULE правило [, ...]

Параметры

Имя удаляемого правила. Одной командой можно удалить сразу несколько правил, имена которых перечисляются через запятую.

Результаты

DROP. Сообщение возвращается при успешном удалении правила. ERROR: Rule or view "правило" not found. Ошибка — правило с указанным именем не существует.

Описание

Команда DROP RULE предназначена для удаления правил из баз данных PostgreSQL. Удаление правила вступает в силу немедленно; правило сразу же становится недоступным, а его определение полностью исключается из базы данных.



DROP SEQUENCE



DROP SEQUENCE

Удаление последовательности из базы данных.

Синтаксис

DROP SEQUENCE последовательность [. ...]

Параметры

Имя удаляемой последовательности. В одной команде можно удалить сразу несколько последовательностей, имена которых перечисляются через запятую.

Результаты

DROP. Сообщение возвращается при успешном удалении последовательности. ERROR: sequence "последовательности" does not exist. Ошибка — последовательность с указанным именем не существует.

Описание

Команда DROP SEQUENCE удаляет из базы данных генератор числовых последовательностей.



DROP TABLE



DROP TABLE

Удаление таблицы из базы данных.

Синтаксис

DROP TABLE таблица [. ...]

Параметры

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

Результаты

DROP. Сообщение возвращается при успешном удалении таблицы. ERROR: table "таблица" does not exist. Ошибка — таблица или представление с указанным именем не существует в базе данных.

Описание

Команда DROP TABLE удаляет таблицы из базы данных. Удаление таблиц разрешено только их владельцам и суперпользователям.

Примечание 1
Примечание 1

Стирание данных в таблице (вместо ее полного уничтожения) выполняется при помощи команд TRUNCATE и DELETE.

При удалении таблицы также уничтожаются все индексы, построенные для этой таблицы.



DROP TRIGGER



DROP TRIGGER

Удаление определения триггера из базы данных.

Синтаксис

DROP TRIGGER триггер ON таблица

Параметры

триггер. Имя удаляемого триггера. таблица. Имя таблицы, для которой устанавливался триггер.

Результаты

DROP. Сообщение возвращается при успешном удалении триггера. ERROR: DropTrigger: there is no trigger "триггер" on relation таблица. Ошибка — в таблице не существует триггер с указанным именем.

Описание

Команда DROP TRIGGER удаляет триггер из базы данных. При выполнении этой команды уничтожаются все ссылки на удаляемый триггер. Удаление триггеров разрешено только их владельцам.



DROP TYPE



DROP TYPE

Удаление типа данных из системных каталогов.

Синтаксис

DROP TYPE тип [,. . .]

Параметры

Имя удаляемого типа. В одной команде можно удалить сразу несколько типов, имена которых перечисляются через запятую.

Результаты

DROP. Сообщение возвращается при успешном удалении типа. ERROR: RemoveType: type 'тип' does not exist. Ошибка — указанный тип не найден в текущей базе данных.

Описание

Команда DROP TYPE предназначена для удаления типов данных из базы данных. Удаление типов разрешено только их владельцам и суперпользователям.

Примечание 1
Примечание 1

Суперпользователю также разрешено удалять системные типы данных, но это нарушает стабильную работу системы. Будьте внимательны!

Выполнение команды DROP TYPE не приводит к автоматическому удалению объектов, использующих удаляемый тип (или типы). После удаления типа данных все объекты, в которых он используется, обычно перестают работать. Не забудьте удалить объекты, зависящие от удаляемого типа данных, и не удаляйте типы, используемые сохраняемыми объектами!



DROP USER



DROP USER

Удаление пользователя PostgreSQL

Синтаксис

DROP USER пользователь

Параметры

Имя удаляемого пользователя PostgreSQL.

Результаты

DROP USER. Сообщение возвращается при успешном удалении пользователя PostgreSQL. ERROR: DROP USER: user "пользователь" does not exist. Ошибка — пользователь PostgreSQL не найден на подключенном хосте. ERROR: DROP USER: user "пользователь" owns database "база_данных". cannot be removed. Ошибка— удаляемый пользователь остается владельцем базы данных. Перед удалением пользователя необходимо удалить принадлежащие ему базы данных.

Описание

Команда DROP USER удаляет пользователей PostgreSQL. Удаляемый пользователь не может быть владельцем существующей базы данных. Все объекты, ранее принадлежавшие пользователю, остаются в базе данных.

Примечание 1
Примечание 1

Удаление пользователей из командной строки производится сценарием dropuser — «оболочкой» для вызова команды SQL (сценарий dropuser описан в главе 10).



DROP VIEW



DROP VIEW

Удаление существующего представления из базы данных.

Синтаксис

DROP VIEW представление. [. ...]

Параметры

Имя удаляемого представления.

Результаты

DROP. Сообщение возвращается при успешном удалении представления. ERROR: view "представление" does not exlst. Ошибка — указанное представление не существует в текущей базе данных.

Описание

Команда DROP VIEW удаляет представление из базы данных. Представления, как и большинство других объектов, удаляются только владельцами.



END



END

Завершение текущей транзакции блока и фиксация изменений в базе.

Синтаксис

END [ WORK | TRANSACTION ]

Параметры

Необязательные ключевые слова, делающие команду SQL более наглядной.

Результаты

COMMIT. Сообщение возвращается при успешной фиксации транзакции. NOTICE: COMMIT: no transaction In progress. He существует незавершенной транзакции, к которой бы могла относиться команда END.

Описание

Команда END является синонимом команды COMMIT и используется для фиксации транзакций по тем же правилам.



EXPLAIN



EXPLAIN

Вывод плана выполнения запроса.

Синтаксис

EXPLAIN [ VERBOSE ] запрос

Параметры

VERBOSE. При наличии необязательного ключевого слова VERBOSE в плане запроса выводится дополнительная информация. запрос. Запрос, план выполнения которого вы хотите получить.

Результаты

NOTICE: QUERY PLAN: plan. За сообщением следует план выполнения запроса, полученный от сервера. EXPLAIN. Сообщение выводится после плана запроса и является признаком завершения выходных данных.

Описание

Команда EXPLAIN отображает план выполнения запроса, сгенерированный планировщиком PostgreSQL. Планировщиком (planner) называется компонент PostgreSQL, пытающийся выработать наиболее эффективный способ выполнения запроса SQL. В плане выполнения содержится информация о том, как будет организован просмотр таблиц, задействованных в запросе, сервером базы данных. В зависимости от ситуации возможен последовательный перебор или выборка по индексу. В план включена информация обо всех таблицах, участвующих в запросе. По выходным данным команды EXPLAIN можно оценить относительную стоимость планов выполнения запроса, измеряемую в количестве операций выборки страниц с диска.

PostgreSQL не пытается преобразовать это число в более привычные промежутки времени, поскольку результат в значительной мере зависит от требований к оборудованию и загрузки операционной системы. Таким образом, стоимость плана выполнения запроса может использоваться только как относительный критерий для сравнения с другими, альтернативными запросами.

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

При наличии ключевого слова VERBOSE команда EXPLAIN выводит внутреннее представление плана в виде дерева. Для среднего пользователя эта информация не представляет интереса; она предназначена для программистов, знакомых с внутренним устройством PostgreSQL.



FETCH



FETCH

Выборка записей с использованием курсора.

Синтаксис

FETCH направление

[ количество_записей ] { IN | FROM } курсор

направление ::- { FORWARD | BACKWARD | RELATIVE }

количество_записей ::={ число \ ALL NEXT PRIOR }

Параметры

направление. Необязательный параметр, определяющий направление выборки. Допустимыми значениями являются перечисленные ниже ключевые слова. FORWARD. Признак выборки записей, следующих за текущей позицией курсора. Используется по умолчанию, если направление не указано. BACKWARD. Признак выборки записей, предшествующих текущей позиции курсора. RELATIVE. Необязательное ключевое слово, поддерживаемое для совместимости со стандартом SQL92. В PostgreSQL 7.1.x курсоры производят выборку только от текущей позиции курсора, поэтому наличие ключевого слова RELATIVE ни на что не влияет. Учтите, что при использовании ключевого слова RELATIVE с параметром количество_записей, равным 0, происходит ошибка (см. ниже пункт «Результаты»). количество_записей. Количество записей в выборке. Значение параметра представляет собой число или одно из следующих ключевых слов: ALL — выборка всех записей; NEXT — запись, следующая за текущей позицией курсора; PRIOR — запись, предшествующая текущей позиции курсора. курсор. Имя открытого курсора, используемого для выборки записей.

Результаты

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

NOTICE: PerformPortalFetch: portal "курсор" not found. Сообщение означает, что курсор с указанным именем не был объявлен. Не забывайте о том, что перед использованием курсор необходимо объявить в транзакционном блоке. NOTICE: FETCH/ABSOLUTE not supported, using RELATIVE. Попытка выборки с абсолютным позиционированием (ключевое слово ABSOLUTE вместо RELATIVE). PostgreSQL не поддерживает абсолютное позиционирование курсора, то есть перемещение к заданной записи итогового набора (вместо перемещения относительно текущей позиции курсора). ERROR: FETCH/RELATIVE at current position is not supported. Ошибка — попытка выборки нуля записей с ключевым словом RELATIVE. Это связано с тем, что в соответствии со стандартом SQL92 синтаксис FETCH RELATIVE О FROM Курсор должен обеспечивать повторную выборку записи в текущей позиции курсора. В PostgreSQL этот синтаксис не поддерживается. Без ключевого слова RELATIVE число 0 интерпретируется как запрос на выборку всех записей. Но с ключевым словом RELATIVE PostgreSQL предполагает, что вы пытаетесь использовать синтаксис SQL92, и вместо того, чтобы вернуть все записи, выводит сообщение об ошибке.

Описание

Команда FETCH возвращает заданное количество записей от текущей позиции курсора. Курсоры используются только в транзакцнонных блоках, поскольку возвращаемая ими информация теоретически зависит от действий других пользователей в системе. Количество записей может быть как положительным, так и отрицательным. При положительном значении отсчет ведется в направлении, заданном соответствующим параметром (если параметр не указан, по умолчанию используется параметр FORWARD).

При отрицательном количестве записей отсчет ведется в направлении, противоположном заданному. Например, конструкция FORWARD -5 эквивалентна конструкции BACKWARD 5. Если количество записей превышает количество записей в базе, команда FETCH выбирает все существующие записи в указанном направлении.

Примечание 1
Примечание 1

В PostgreSQL 7.1.x не поддерживается обновление данных с использованием курсоров.



Формат файлов



Формат файлов

Техническое описание формата двоичных выходных файлов PostgreSQL приведено в приложении В. Если вместо двоичного формата используется обычный текстовый формат, файл, созданный командой COPY, форматируется следующим образом: каждая запись выводится в отдельной строке, а поля ограничиваются заданным символом-разделителем. Все внутренние вхождения этого символа экранируются символом \, а значения полей выводятся в виде простых текстовых строк.

Если в команду COPY была включена секция WITH 01DS, в начале каждой записи выводится идентификатор объекта. Если выходной файл создавался с секцией WITH OIDS, то команда импортирования данных обратно в PostgreSQL также должна содержать секцию WITH OIDS. В противном случае идентификатор будет интерпретирован как обычное поле.

Передача результатов в стандартный вывод завершается специальной комбинацией: обратная косая черта (\), точка (.) и символ новой строки. При преждевременном достижении признака конца файла (EOF) вывод автоматически завершается.

Поскольку символ \ имеет несколько значений, для представления его в качестве литерала необходимо экранирование, поэтому в текстовых представлениях полей этот символ удваивается (\\). Перед импортированием внешних текстовых данных в PostgreSQL необходимо выполнить предварительное форматирование и заменить одиночные символы \ двойными.



Функциональный индекс



Функциональный индекс

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

Например, если в секции WHERE некоторого запроса часто вызывается функция upper(last_name), этот запрос можно оптимизировать построением функционального индекса по результату функции upper(last_name).



Шифрование и секретность в Linux



GRANT

Предоставление прав доступа пользователю, группе или всем пользователям базы данных.

Синтаксис

GRANT привилегия [, ...] ON объект [. ...]

ТО { PUBLIC | GROUP группа \ пользователь }

Параметры

привилегия. Предоставляемая привилегия. Допустимые значения: SELECT — пользователю или группе разрешается выборка из всех полей заданной таблицы или представления; INSERT — пользователю или группе разрешается вставка данных во все поля полей заданной таблицы; UPDATE — пользователю или группе разрешается обновление всех полей заданной таблицы; DELETE — пользователю или группе разрешается удаление данных из всех полей заданной таблицы; RULE — пользователю или группе разрешается удаление правил из заданной таблицы; ALL — сокращенная запись для предоставления всех перечисленных привилегий пользователю или группе. объект. Имя объекта, для которого предоставляются привилегии. Допустимыми типами объектов являются таблицы, представления и последовательности. PUBLIC. Необязательное ключевое слово PUBLIC означает, что привилегия предоставляется всем пользователям базы данных. группа. Имя группы, которой предоставляются привилегии. пользователь. Имя пользователя PostgreSQL, которому предоставляются привилегии. Ключевое слово PUBLIC обозначает всех пользователей.

Результаты

CHANGE. Сообщение возвращается в том случае, если предоставление привилегий пользователю или группе прошло успешно. ERROR: ChangeAcl: class "объект" not found. Ошибка — указанный объект не найден в текущей базе данных. ERROR: aclparse: non-existent user "пользователь". Ошибка — пользователь с указанным именем не существует. ERROR: non-existent group "группа". Ошибка — группа не существует.

Описание

Команда GRANT предоставляет пользователям и группам права доступа к объектам. Права могут предоставляться конкретному пользователю или группе, а ключевое слово PUBLIC предоставляет их всем пользователям базы данных. По умолчанию доступ к объекту разрешен только его владельцу. После того как объект создан, владелец предоставляет права доступа к нему другим пользователям.

Чтобы предоставить частичный доступ к данным, содержащимся в таблице, создайте представление для нужного подмножества полей и/или записей и предоставьте пользователям доступ к этому представлению.

В клиенте psql информация о правах доступа к существующим объектам выводится командой \z.



INSERT



INSERT

Вставка новых записей в таблицу.

Синтаксис

INSERT INTO таблице [ ( поле [. ...] ) ]

{ DEFAULT VALUES

VALUES ( значение [. ...] ) |

запрос }

Параметры

таблица. Таблица, в которую вставляются новые данные. поле. Имя поля, для которого задается значение. Должно совпадать с именем одного из полей таблицы, хотя порядок перечисления полей в команде не обязан совпадать с естественным порядком их следования в таблице. значение. Константа или выражение, заносимое в таблицу. Если в команде задан список полей, значение ассоциируется с соответствующим полем в списке (перечисленные поля должны однозначно соответствовать выражениям в списке). Если для какого-либо поля выражение относится к другому типу данных, PostgreSQL пытается выполнить преобразование типа. Если попытка завершается неудачей, вся команда INSERT отменяется. запрос. Синтаксически правильная команда SQL SELECT. Количество полей, возвращаемых запросом, должно соответствовать количеству полей в списке, а их типы данных должны быть совместимы.

Результаты

INSERT old 1. Сообщение возвращается в случае успешной вставки одной записи. Значение aid представляет собой идентификатор объекта вставленной записи. INSERT 0 число. Сообщение возвращается в случае успешной вставки нескольких записей. Параметр число определяет общее количество вставленных записей.

Описание

Команда INSERT вставляет в таблицу новые записи. Записи могут вставляться как по одной, так и группами. В сочетании с ключевым словом VALUES команда INSERT всегда вставляет ровно одну запись. Чтобы вставить несколько записей, можно воспользоваться данными, полученными в результате запроса. Данные из итогового набора запроса заносятся в таблицу, указанную в команде INSERT.

Если при вставке для какого-либо поля указано значение неправильного типа, PostgreSQL автоматически преобразует его к нужному типу. Если преобразование невозможно, команда INSERT завершается неудачей. При вставке отдельных полей (вместо целых записей) допускается перечисление полей в произвольном порядке; однако порядок следования значений должен соответствовать порядку следования полей.

Примечание 1
Примечание 1

Если значения каких-либо полей не указаны, PostgreSQL выбирает один из двух вариантов. Если для поля не задано значение по умолчанию, ему присваивается псевдозначение NULL. Поля, для которых задано значение по умолчанию, инициализируются этим значением.



Команды PostgreSQL



Команды PostgreSQL

В данной главе приведена сводная информация по всем основным командам SQL, поддерживаемым в PostgreSQL. В этот справочник включены как стандартные команды SQL (например, INSERT и SELECT), так и специфические команды PostgreSQL (такие, как CREATE OPERATOR и CREATE TYPE).

Описание каждой команды за редким исключением делится па три части: синтаксис, описание и примергл. В первой части приводится общий синтаксис команды, объясняется смысл параметров и возможные результаты выполнения команды. Во второй части приводится краткий обзор основных применений команды. В последней части дается хотя бы один практический пример ее использования.




LISTEN



LISTEN

Ожидание уведомлений о событиях.

Синтаксис

LISTEN событие

Параметры

Имя события, ожидаемого сервером.

Результаты

LISTEN. Сообщение возвращается при успешном выполнении команды, когда серверный процесс ожидает уведомления. NOTICE: Async_Listen: We are already listening on событие. Сообщение возвращается в том случае, если сервер уже ожидает уведомления об указанном событии.

Описание

Пара команд NOTIFY и LISTEN обеспечивает взаимодействие между компонентами PostgreSQL. Получив команду LISTEN, серверный процесс ожидает событие с указанным именем. Уведомления передаются командой NOTIFY, которая обычно включается в правила, отслеживающие изменения в различных компонентах базы данных. Таким образом, все «слушатели» автоматически оповещаются об изменении ситуации.

Команда NOTIFY, выполненная любым процессом, рассылает оповещения всем работающим серверным процессам, ожидающим данного события. Когда серверный процесс получает уведомление, он передает его клиентскому приложению (например, psql), а клиентское приложение распоряжается им по своему усмотрению. За дополнительной информацией об этом механизме межпроцессных взаимодействий обращайтесь к описанию команды NOTIFY.

Имя события представляет собой произвольную строку длиной не более 31 символа (то же относится и к команде NOTIFY). Чтобы вывести серверный процесс из состояния ожидания, воспользуйтесь командой UNLISTEN.



LOAD



LOAD

Динамическая загрузка объектных файлов в базу данных.

Синтаксис

LOAD 'файл'

Параметры

Имя загружаемого объектного файла.

Результаты

LOAD. Сообщение возвращается при успешной загрузке объектного файла. ERROR: LOAD: could not open file 'файл'. Ошибка —указанный файл не найден. Убедитесь в том, что серверный процесс PostgreSQL обладает правами доступа к файлу.

Описание

Команда LOAD загружает объектный файл в контексте серверного процесса PostgreSQL. После загрузки объектный файл обеспечивает выполнение тех функций, для которых он создавался. Механизм загрузки объектных файлов позволяет динамически подгружать компоненты базы данных (например, типы и функции). Если объектный файл не был загружен специальной командой, загрузка происходит автоматически при вызове функции, реализованной в файле. В настоящее время поддерживаются только объектные файлы С.

Примечание 1
Примечание 1

Команда LOAD также используется для повторной загрузки перекомпилированных объектных файлов.



LОСК



LОСК

Блокировка записей в транзакциях.

Синтаксис

LOCK [ TABLE ] таблица

LOCK [ TABLE ] таблица IN режим

режим ::= { [ ROW | ACCESS ] { SHARE | EXCLUSIVE } |

SHARE ROW EXCLUSIVE } MODE

Параметры

таблица. Имя таблицы, для которой устанавливается блокировка. режим. Существуют семь режимов блокировки, обозначаемые разными комбинациями ключевых слов. Ниже приведен их список в порядке возрастания ограничений, с указанием блокируемых команд. ACCESS SHARE MODE. Устанавливается автоматически командой SELECT для таблиц, из которых производится выборка данных. В заблокированных таблицах запрещается выполнение команд ALTER TABLE, DROP TABLE n VACUUM. В этом режиме для заблокированных таблиц также запрещаются параллельные блокировки уровня ACCESS EXCLUSIVE MODE. ROW SHARE MODE. Устанавливается автоматически командами SELECT, содержащими секцию FOR UPDATE. В заблокированных таблицах запрещается выполнение команд ALTER TABLE, DROP TABLE и VACUUM. В этом режиме для заблокированных таблиц также запрещаются параллельные блокировки уровней EXCLUSIVE MODE и ACCESS EXCLUSIVE MODE. ROW EXCLUSIVE MODE. Устанавливается автоматически командами UPDATE, INSERT и DELETE. В заблокированных таблицах запрещается выполнение команд ALTER TABLE, DROP TABLE и CREATE INDEX. В этом режиме для заблокированных таблиц также запрещаются параллельные блокировки уровней SHARE MODE, SHARE ROW EXCLUSIVE MODE,EXCLUSIVE MODE и ACCESS EXCLUSIVE MODE. SHARE MODE. Устанавливается автоматически командами CREATE INDEX. В заблокированных таблицах запрещается выполнение команд INSERT, UPDATE, DELETE, ALTER TABLE, DROP TABLE и VACUUM. В этом режиме для заблокированных таблиц также запрещаются параллельные блокировки уровней ROW EXCLUSIVE MODE, SHARE ROW EXCLUSIVE MODE, EXCLUSIVE MODE и ACCESS EXCLUSIVE MODE. SHARE ROW EXCLUSIVE MODE. Специальный режим блокировки, практически идентичный режиму EXCLUSIVE MODE, но допускающий установку параллельных блокировок уровня ROW SHARE MODE. EXCLUSIVE MODE. Запрещает выполнение команд INSERT, UPDATE, DELETE, CREATE INDEX, ALTER TABLE, DROP TABLE и VACUUM, а также команд SELECT с секцией FOR UPDATE. В этом режиме для заблокированных таблиц также запрещаются параллельные блокировки уровней ROW SHARE MODE, ROW EXCLUSIVE MODE, SHARE MODE, SHARE ROW EXCLUSIVE MODE и ACCESS EXCLUSIVE MODE. ACCESS EXCLUSIVE MODE. Устанавливается автоматически командами ALTER TABLE, DROP TABLE и VACUUM. В этом режиме для заблокированных таблиц запрещаются любые команды или параллельные блокировки любого уровня.

Результаты

LOCK TABLE. Сообщение выдается при успешном установлении блокировки для таблицы. ERROR: Relation 'таблица' does not exist. Ошибка— таблицас указанным именем не существует в базе данных. ERROR: Deadlock detected. Ошибка — взаимная блокировка, возникшая из-за выполнения команд LOCK TABLE в двух параллельных транзакциях.

Описание

Команда LOCK TABLE предназначена для блокировки таблиц на время транзакции. Блокировкой называется временное ограничение доступа к таблице (в зависимости от выбранного режима). Сеанс, заблокировавший таблицу, пользуется нормальным доступом; последствия блокировки распространяются только на других пользователей, пытающихся получить доступ к заблокированной таблице.

Обратите внимание: блокировка не означает отказа в доступе. С точки зрения пользователя, подключенного к базе данных и пытающегося обратиться к заблокированному ресурсу, блокировка приводит к задержке, но не к отказу в предоставлении доступа. Пользователю приходится ожидать либо завершения заблокированной команды пользователем, либо снятия блокировки с таблицы.

Некоторые команды SQL автоматически устанавливают блокировку для выполнения своих функций; в таких случаях PostgreSQL всегда выбирает минимально необходимый уровень блокировки. После завершения транзакции блокировка немедленно снимается.

Команда LOCK TABLE без параметра устанавливает максимально жесткий режим блокировки (ACCESS EXCLUSIVE). Чтобы ограничения были менее жесткими, следует явно задать нужный режим.

ВНИМАНИЕ

Блокировка таблиц возможна только в транзакциях. Выполнение команды LOCK TABLE вне транзакционного блока не приводит к ошибке, но установленная блокировка немедленно снимается. Транзакция создается командой BEGIN; команда COMMIT фиксирует изменения в базе данных и снимает блокировку.

Ситуация взаимной блокировки (deadlock) возникает в там случае, когда каждая из двух транзакций ожидает снятия блокировки другой транзакцией. Хотя PostgreSQL распознает взаимные блокировки и завершает их командой ROLLBACK, это все равно причиняет определенные неудобства. Приложения не должны сталкиваться с проблемой взаимных блокировок, поэтому проектируйте их так, чтобы объекты всегда блокировались в одинаковом порядке.



MOVE



MOVE

Перемещение курсора к другой записи.

Синтаксис

MOVE [ направление ] [ количество ]

{ IN | FROM } курсор

Параметры

направление. Направление, в котором перемещается указанный курсор. За дополнительной информацией о направлениях обращайтесь к описанию команды FETCH. количество. Расстояние, на которое перемещается курсор. курсор. Перемещаемый курсор.

Результаты

Команда MOVE выдает те же ошибки и сообщения, что и команда FETCH, но при этом она не возвращает записей. Сообщения перечислены в описании команды FETCH.

Описание

Команда MOVE перемещает курсор в новую позицию. Она очень похожа на команду FETCH, но в отличие от этой команды не возвращает пройденные записи.



NOTIFY



NOTIFY

Уведомление всех серверных процессов, ожидающих некоторого события.

Синтаксис

NOTIFY событие

Параметры

Событие, о наступлении которого оповещаются процессы.

Результаты

NOTIFY. Это сообщение выдается в том случае, если рассылка прошла успешно.

Описание

Команда NOTIFY работает в сочетании с командой LISTEN, описанной выше. Эти две команды обеспечивают простой механизм межпроцессных взаимодействий, который при правильном применении способен принести существенную пользу.

Команда NOTIFY рассылает уведомление о событии с заданным именем; если какая-либо клиентская программа ранее выполнила команду LISTEN с тем же именем события, она получает уведомление.

Примечание 1
Примечание 1

Поведение клиентского процесса после получения уведомления, отправленного командой NOTIFY, полностью зависит от реализации, поэтому процесс может немедленно отреагировать на происходящее, а может ничего не делать.

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

Команды NOTIFY и LISTEN чаще всего применяются для оповещения клиентских процессов о модификации таблиц, поэтому имена событий часто совпадают с именами таблиц. Впрочем, это всего лишь распространенный вариант использования этих команд; совпадение имен событий с именами таблиц не обязательно.

Примечание 2
Примечание 2

Автоматическое уведомление об изменениях в таблицах достигается включением команды NOTIFY в правило, срабатывающее при обновлении таблицы.



Ограничения



Ограничения

Использование команды COPY подчиняется нескольким ограничениям. Чтобы команда COPY могла читать данные из указанных таблиц, пользователю PostgreSQL должно быть предоставлено право выборки. Если команда COPY применяется для заполнения таблицы, пользователь PostgreSQL также должен обладать правами вставки или обновления.

С другой стороны, при записи или чтении данных из системного файла пользователь, запустивший сервер PostgreSQL (postmaster), должен обладать необходимыми правами доступа к заданному файлу. Чтобы обойти это ограничение, в psql можно воспользоваться командой \copy (см. главу 6).

При выполнении команды COPY TO проверяются ограничения и приводятся в действие триггеры, но не вызываются правила и не применяются значения полей по умолчанию.

При первой ошибке выполнение команды COPY прекращается. В случае команды COPY FROM это не должно вызывать проблем, но при использовании команды COPY ТО таблица может оказаться частично измененной. Последствия сбоя команды COPY ликвидируются командой VACUUM.



Операторы и операторные классы



Операторы и операторные классы

Оптимизатор запросов PostgreSQL при сравнении использует разные индексы для разных операторов. Тип индекса выбирается по списку, приведенному в табл. 14.1.



Перегрузка функций



Перегрузка функций

В PostgreSQL поддерживается перегрузка функций. Вероятно, этот термин хорошо знаком всем программистам, работающим с объектно-ориентированными языками — под ним понимается определение нескольких функций с одинаковыми именами при условии, что каждая из них получает уникальный набор аргументов.

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

В отличие от функций PostgreSQL, перегружаемых по типам аргументов, откомпилированные функции С, находящиеся в одном объектном файле, не могут обладать одинаковыми именами. Чтобы справиться с этой проблемой, присвойте второй функции С, которую вы собираетесь перегрузить в PostgreSQL, любое уникальное имя в исходном файле С, откомпилируйте и затем передайте это имя в параметре имя_в_объектном_файле при создании перегруженной функции.



Построение индексов по полям



Построение индексов по полям

При создании «традиционного» индекса указывается список из одного или нескольких полей таблицы. Эта разновидность индексов используется запросами, напрямую работающими с индексируемыми полями в секции WHERE. Учтите, что индексы типов rtree и hash индексируют только одно поле, а индекс типа btree позволяет индексировать до 16 полей.



Повторные сигналы



Повторные сигналы

Поведение пары команд NOTIFY и LISTEN напоминает систему сигналов в Unix. Даже если уведомление рассылается многократно несколькими командами NOTIFY, ожидающие процессы получают его только один раз.

По этой причине количество принятых уведомлений не может использоваться для накопления значений счетчиков или отслеживания важных событий, происходящих в базе данных. В правильной реализации эти действия выполняются с применением команды NOTIFY с объектом последовательности (или его аналогом).



в таблице новую запись, после


Следующий код начинает транзакцию и создает в таблице новую запись, после чего транзакция фиксируется в базе данных:
booktown=# BEGIN WORK;
BEGIN
booktown=# INSERT INTO employees VALUES (106. 'HalV. 'Timothy');
INSERT 3574402 1
booktown=# COMMIT WORK;
COMMIT

В следующем примере определяется агрегатная


В следующем примере определяется агрегатная функция sum О, работающая с текстовыми данными. Она вызывает встроенную функцию PostgreSQL textcat (text, text) для конкатенации всего текста во входных данных.
booktown=# CREATE AGGREGATE sum ( BASETYPE = text,
booktown(# SFUNC = textcat,
booktown(# STYPE = text,
booktown(# INITCOND = " );
CREATE
booktown=# SELECT sum(title || ' ') FROM books WHERE title - '^L';
sum
-----------------------------------
Little Women Learning Python
(1 row)

В следующем фрагменте определяется логический


В следующем фрагменте определяется логический оператор, который выясняет, равен ли нулю хотя бы один из двух операндов типа Integer. Проверка осуществляется функцией 1 s_zero (определение этой функции и дополнительная информация приведены в главе 7).
booktown=# CREATE OPERATOR !# (PROCEDURE = is_zero,
booktown(# LEFTARG = integer,
booktown(# RIGHTARG = integer);
CREATE

В следующем фрагменте приведено определение


В следующем фрагменте приведено определение правила sync_stock_with_editions, автоматически обновляющего поле isbn таблицы stock при модификации таблицы editions.
booktown=f CREATE RULE sync_stock_with_editions AS
booktown-# ON UPDATE TO editions
booktown-# DO UPDATE stock SET isbn = new.isbn
booktown-# WHERE isbn = old.isbn;
CREATE

Пример использования команды ABORT для


Пример использования команды ABORT для отмены случайно введенной команды
DELETE:
booktown=# BEGIN WORK;
BEGIN
booktown=# DELETE FROM publishers WHERE id < 100;
DELETE 6
booktown=# ABORT WORK;
ROLLBACK

и устанавливает для поля id


Следующая команда создает таблицу с именем shipments и устанавливает для поля id ограничения NOT NULL и DEFAULT.
booktown=# CREATE TABLE shipments (
booktown(# id integer NOT NULL DEFAULT nextval ('shipments_ship_id_seq').
booktown(# customer_id integer,
booktown(# isbn text,
booktown(# ship_date timestanp);
CREATE

Следующая команда создает резервную копию


Следующая команда создает резервную копию всего содержимого таблицы books и сохраняет ее в таблице book_backup.
booktown=# CREATE TABLE book_backup
booktown-# AS SELECT * FROM books;
SELECT

В следующем примере создается новый


В следующем примере создается новый числовой тип данных с именем zero, всегда представляющий нулевое значение. Сначала мы создаем входную и выходную функции, а затем определяем тип данных путем ссылок на эти функции.
booktown=# CREATE FUNCTION zero_out(opaque) RETURNS opaque
booktown-# AS '/usr/local/pgsql/lib/zero.so' LANGUAGE 'C';
CREATE
booktown=# CREATE FUNCTION zero_in(opaque) RETURNS zero
booktown-# AS '/usr/local/pgsql/lib/zero.so' LANGUAGE 'C';
NOTICE: ProcedureCreate: type 'zero' is not yet defined
CREATE
booktown=# CREATE TYPE zero (internallength = 16,
booktown(# input = zero_in, output = zero_out);
CREATE

В следующем примере создается пользователь


В следующем примере создается пользователь PostgreSQL с именем david, входящий в группу accounting. Учетная запись пользователя определяется с паролем jw8s0F4, который остается действительным до 1 января 2005 года.
booktown=# CREATE USER david
booktown-* WITH PASSWORD 'jw8s0F4' CREATEDB
booktown-# IN GROUP accounting VALID UNTIL 'Jan 1 2005';
CREATE USER

В следующем примере создается представление


В следующем примере создается представление с записями издателей, имена которых начинаются с буквы Н:
booktown=# CREATE VIEW h_publishers AS
booktown-# SELECT * FROM publishers WHERE name LIKE 'Н%';
CREATE

Следующая команда выводит текущую дату:


Следующая команда выводит текущую дату:
testdb=# SELECT CURRENT_DATE AS today;
today
------------- 2001-10-29
(1 row)

Следующая команда выводит текущее время:


Следующая команда выводит текущее время:
testdb=# SELECT CURRENTJIME AS thejtime;
the_time
19:44:35
(1 row)

Следующая команда выводит результат вызова


Следующая команда выводит результат вызова CURRENT_TIMESTAMP:
testdb=# SELECT CURRENT_TIMESTAMP AS date_and_time;
date_and_time
-------------------
2001-09-04 19:48:21-08
(1 row)