Sql

Postgresql синтаксис – Курс молодого бойца PostgreSQL / Habr

Содержание

Postgres Pro Standard : Документация: 10: 4.1. Лексическая структура : Компания Postgres Professional

4.1. Лексическая структура

SQL-программа состоит из последовательности команд. Команда, в свою очередь, представляет собой последовательность компонентов, оканчивающуюся точкой с запятой («;»). Конец входного потока также считается концом команды. Какие именно компоненты допустимы для конкретной команды, зависит от её синтаксиса.

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

Например, следующий текст является правильной (синтаксически) SQL-программой:

Это последовательность трёх команд, по одной в строке (хотя их можно было разместить и в одну строку или наоборот, разделить команды на несколько строк).

Кроме этого, SQL-программы могут содержать комментарии. Они не являются компонентами команд, а по сути равносильны пробельным символам.

Синтаксис SQL не очень строго определяет, какие компоненты идентифицируют команды, а какие — их операнды или параметры. Первые несколько компонентов обычно содержат имя команды, так что в данном примере мы можем говорить о командах «SELECT», «UPDATE» и «INSERT». Но например, команда UPDATE требует, чтобы также в определённом положении всегда стоял компонент SET, а INSERT в приведённом виде требует наличия компонента VALUES. Точные синтаксические правила для каждой команды описаны в Части VI.

4.1.1. Идентификаторы и ключевые слова

Показанные выше команды содержали компоненты SELECT, UPDATE и VALUES, которые являются примерами ключевых слов, то есть слов, имеющих фиксированное значение в языке SQL. Компоненты MY_TABLE и A являются примерами идентификаторов. Они идентифицируют имена таблиц, столбцов или других объектов баз данных, в зависимости от того, где они используются. Поэтому иногда их называют просто «именами». Ключевые слова и идентификаторы имеют одинаковую лексическую структуру, то есть, не зная языка, нельзя определить, является ли некоторый компонент ключевым словом или идентификатором. Полный список ключевых слов приведён в Приложении C.

Идентификаторы и ключевые слова SQL должны начинаться с буквы (az, хотя допускаются также не латинские буквы и буквы с диакритическими знаками) или подчёркивания (_). Последующими символами в идентификаторе или ключевом слове могут быть буквы, цифры (09), знаки доллара ($) или подчёркивания. Заметьте, что строго следуя букве стандарта SQL, знаки доллара нельзя использовать в идентификаторах, так что их использование вредит переносимости приложений. В стандарте SQL гарантированно не будет ключевых слов с цифрами и начинающихся или заканчивающихся подчёркиванием, так что идентификаторы такого вида защищены от возможных конфликтов с будущими расширениями стандарта.

Система выделяет для идентификатора не более NAMEDATALEN-1 байт, а более длинные имена усекаются. По умолчанию NAMEDATALEN равно 64, так что максимальная длина идентификатора равна 63 байтам. Если этого недостаточно, этот предел можно увеличить, изменив константу NAMEDATALEN в файле src/include/pg_config_manual.h.

Ключевые слова и идентификаторы без кавычек воспринимаются системой без учёта регистра. Таким образом:

UPDATE MY_TABLE SET A = 5;

равносильно записи:

uPDaTE my_TabLE SeT a = 5;

Часто используется неформальное соглашение записывать ключевые слова заглавными буквами, а имена строчными, например:

UPDATE my_table SET a = 5;

Есть и другой тип идентификаторов: отделённые идентификаторы или идентификаторы в кавычках. Они образуются при заключении обычного набора символов в двойные кавычки ("). Такие идентификаторы всегда будут считаться идентификаторами, но не ключевыми словами. Так "select" можно использовать для обозначения столбца или таблицы «select», тогда как select без кавычек будет воспринят как ключевое слово и приведёт к ошибке разбора команды в месте, где ожидается имя таблицы или столбца. Тот же пример можно переписать с идентификаторами в кавычках следующим образом:

UPDATE "my_table" SET "a" = 5;

Идентификаторы в кавычках могут содержать любые символы, за исключением символа с кодом 0. (Чтобы включить в такой идентификатор кавычки, продублируйте их.) Это позволяет создавать таблицы и столбцы с именами, которые иначе были бы невозможны, например, с пробелами или амперсандами. Ограничение длины при этом сохраняется.

Ещё один вариант идентификаторов в кавычках позволяет использовать символы Unicode по их кодам. Такой идентификатор начинается с U& (строчная или заглавная U и амперсанд), а затем сразу без пробелов идёт двойная кавычка, например U&"foo". (Заметьте, что при этом возникает неоднозначность с оператором &. Чтобы её избежать, окружайте этот оператор пробелами.) Затем в кавычках можно записывать символы Unicode двумя способами: обратная косая черта, а за ней код символа из четырёх шестнадцатеричных цифр, либо обратная косая черта, знак плюс, а затем код из шести шестнадцатеричных цифр. Например, идентификатор "data" можно записать так:

U&"d\0061t\+000061"

В следующем менее тривиальном примере закодировано русское слово «слон», записанное кириллицей:

U&"\0441\043B\043E\043D"

Если вы хотите использовать не обратную косую черту, а другой спецсимвол, его можно указать, добавив UESCAPE после строки, например:

U&"d!0061t!+000061" UESCAPE '!'

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

Чтобы сделать спецсимволом знак апострофа, напишите его дважды.

Unicode-формат полностью поддерживается только при использовании на сервере кодировки UTF8. Когда используются другие кодировки, допускается указание только ASCII-символов (с кодами до \007F). И в четырёх, и в шестизначной форме можно записывать суррогатные пары UTF-16 и таким образом составлять символы с кодами больше чем U+FFFF, хотя наличие шестизначной формы технически делает это ненужным. (Суррогатные пары не сохраняются непосредственно, а объединяются в один символ, который затем кодируется в UTF-8.)

Идентификатор, заключённый в кавычки, становится зависимым от регистра, тогда как идентификаторы без кавычек всегда переводятся в нижний регистр. Например, идентификаторы FOO, foo и "foo" считаются одинаковыми в Postgres Pro, но "Foo" и "FOO" отличны друг от друга и от предыдущих трёх. (Приведение имён без кавычек к нижнему регистру, как это делает Postgres Pro, несовместимо со стандартом SQL, который говорит о том, что имена должны приводиться к верхнему регистру. То есть, согласно стандарту foo должно быть эквивалентно "FOO", а не "foo". Поэтому при создании переносимых приложений рекомендуется либо всегда заключать определённое имя в кавычки, либо не заключать никогда.)

4.1.2. Константы

В Postgres Pro есть три типа констант подразумеваемых типов: строки, битовые строки и числа. Константы можно также записывать, указывая типы явно, что позволяет представить их более точно и обработать более эффективно. Эти варианты рассматриваются в следующих подразделах.

4.1.2.1. Строковые константы

Строковая константа в SQL — это обычная последовательность символов, заключённая в апострофы ('), например: 'Это строка'. Чтобы включить апостроф в строку, напишите в ней два апострофа рядом, например: 'Жанна д''Арк'. Заметьте, это не то же самое, что двойная кавычка (").

Две строковые константы, разделённые пробельными символами и минимум одним переводом строки, объединяются в одну и обрабатываются, как если бы строка была записана в одной константе. Например:

SELECT 'foo'
'bar';

эквивалентно:

SELECT 'foobar';

но эта запись:

SELECT 'foo'      'bar';

считается синтаксической ошибкой. (Это несколько странное поведение определено в стандарте SQL, Postgres Pro просто следует ему.)

4.1.2.2. Строковые константы со спецпоследовательностями в стиле C

Postgres Pro также принимает «спецпоследовательности», что является расширением стандарта SQL. Строка со спецпоследовательностями начинается с буквы E (заглавной или строчной), стоящей непосредственно перед апострофом, например: E'foo'. (Когда константа со спецпоследовательностью разбивается на несколько строк, букву E нужно поставить только перед первым открывающим апострофом.) Внутри таких строк символ обратной косой черты (\) начинает C-подобные спецпоследовательности, в которых сочетание обратной косой черты со следующим символом(ами) даёт определённое байтовое значение, как показано в Таблице 4.1.

Таблица 4.1. Спецпоследовательности

СпецпоследовательностьИнтерпретация
\bсимвол «забой»
\fподача формы
\nновая строка
\rвозврат каретки
\tтабуляция
\o, \oo, \ooo (o = 0 — 7)восьмеричное значение байта
\xh, \xhh (h = 0 — 9, A — F)шестнадцатеричное значение байта
\uxxxx, \Uxxxxxxxx (x = 0 — 9, A — F)16- или 32-битный шестнадцатеричный код символа Unicode

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

Вы должны позаботиться, чтобы байтовые последовательности, которые вы создаёте таким образом, особенно в восьмеричной и шестнадцатеричной записи, образовывали допустимые символы в серверной кодировке. Когда сервер работает с кодировкой UTF-8, вместо такой записи байт следует использовать спецпоследовательности Unicode или альтернативный синтаксис Unicode, описанный в Подразделе 4.1.2.3. (В противном случае придётся кодировать символы UTF-8 вручную и выписывать их по байтам, что очень неудобно.)

Спецпоследовательности с Unicode полностью поддерживаются только при использовании на сервере кодировки UTF8. Когда используются другие кодировки, допускается указание только ASCII-символов (с кодами до \u007F). И в четырёх, и в восьмизначной форме можно записывать суррогатные пары UTF-16 и таким образом составлять символы с кодами больше чем U+FFFF, хотя наличие восьмизначной формы технически делает это ненужным. (Когда суррогатные пары используются с серверной кодировкой UTF8, они сначала объединяются в один символ, который затем кодируется в UTF-8.)

Внимание

Если параметр конфигурации standard_conforming_strings имеет значение off, Postgres Pro распознаёт обратную косую черту как спецсимвол и в обычных строках, и в строках со спецпоследовательностями. Однако в версии PostgreSQL 9.1 по умолчанию принято значение on, и в этом случае обратная косая черта распознаётся только в спецстроках. Это поведение больше соответствует стандарту, хотя может нарушить работу приложений, рассчитанных на предыдущий режим, когда обратная косая черта распознавалась везде. В качестве временного решения вы можете изменить этот параметр на off, но лучше уйти от такой практики. Если вам нужно, чтобы обратная косая черта представляла специальный символ, задайте строковую константу с E.

В дополнение к standard_conforming_strings поведением обратной косой черты в строковых константах управляют параметры escape_string_warning и backslash_quote.

Строковая константа не может включать символ с кодом 0.

4.1.2.3. Строковые константы со спецпоследовательностями Unicode

Postgres Pro также поддерживает ещё один вариант спецпоследовательностей, позволяющий включать в строки символы Unicode по их кодам. Строковая константа со спецпоследовательностями Unicode начинается с U& (строчная или заглавная U и амперсанд), а затем сразу без пробелов идёт апостроф, например U&'foo'. (Заметьте, что при этом возникает неоднозначность с оператором &. Чтобы её избежать, окружайте этот оператор пробелами.) Затем в апострофах можно записывать символы Unicode двумя способами: обратная косая черта, а за ней код символа из четырёх шестнадцатеричных цифр, либо обратная косая черта, знак плюс, а затем код из шести шестнадцатеричных цифр. Например, строку 'data' можно записать так:

U&'d\0061t\+000061'

В следующем менее тривиальном примере закодировано русское слово «слон», записанное кириллицей:

U&'\0441\043B\043E\043D'

Если вы хотите использовать не обратную косую черту, а другой спецсимвол, его можно указать, добавив UESCAPE после строки, например:

U&'d!0061t!+000061' UESCAPE '!'

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

Спецпоследовательности с Unicode поддерживаются только при использовании на сервере кодировки UTF8. Когда используются другие кодировки, допускается указание только ASCII-символов (с кодами до \007F). И в четырёх, и в шестизначной форме можно записывать суррогатные пары UTF-16 и таким образом составлять символы с кодами больше чем U+FFFF, хотя наличие шестизначной формы технически делает это ненужным. (Когда суррогатные пары используются с серверной кодировкой UTF8, они сначала объединяются в один символ, который затем кодируется в UTF-8.)

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

postgrespro.ru

PostgreSQL : Документация: 9.6: 4.1. Лексическая структура : Компания Postgres Professional

4.1. Лексическая структура

SQL-программа состоит из последовательности команд. Команда, в свою очередь, представляет собой последовательность компонентов, оканчивающуюся точкой с запятой («;»). Конец входного потока также считается концом команды. Какие именно компоненты допустимы для конкретной команды, зависит от её синтаксиса.

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

Например, следующий текст является правильной (синтаксически) SQL-программой:

Это последовательность трёх команд, по одной в строке (хотя их можно было разместить и в одну строку или наоборот, разделить команды на несколько строк).

Кроме этого, SQL-программы могут содержать комментарии. Они не являются компонентами команд, а по сути равносильны пробельным символам.

Синтаксис SQL не очень строго определяет, какие компоненты идентифицируют команды, а какие — их операнды или параметры. Первые несколько компонентов обычно содержат имя команды, так что в данном примере мы можем говорить о командах «SELECT», «UPDATE» и «INSERT». Но например, команда UPDATE требует, чтобы также в определённом положении всегда стоял компонент SET, а INSERT в приведённом виде требует наличия компонента VALUES. Точные синтаксические правила для каждой команды описаны в Части VI.

4.1.1. Идентификаторы и ключевые слова

Показанные выше команды содержали компоненты SELECT, UPDATE и VALUES, которые являются примерами ключевых слов, то есть слов, имеющих фиксированное значение в языке SQL. Компоненты MY_TABLE и A являются примерами идентификаторов. Они идентифицируют имена таблиц, столбцов или других объектов баз данных, в зависимости от того, где они используются. Поэтому иногда их называют просто «именами». Ключевые слова и идентификаторы имеют одинаковую лексическую структуру, то есть, не зная языка, нельзя определить, является ли некоторый компонент ключевым словом или идентификатором. Полный список ключевых слов приведён в Приложении C.

Идентификаторы и ключевые слова SQL должны начинаться с буквы (az, хотя допускаются также не латинские буквы и буквы с диакритическими знаками) или подчёркивания (_). Последующими символами в идентификаторе или ключевом слове могут быть буквы, цифры (09), знаки доллара ($) или подчёркивания. Заметьте, что строго следуя букве стандарта SQL, знаки доллара нельзя использовать в идентификаторах, так что их использование вредит переносимости приложений. В стандарте SQL гарантированно не будет ключевых слов с цифрами и начинающихся или заканчивающихся подчёркиванием, так что идентификаторы такого вида защищены от возможных конфликтов с будущими расширениями стандарта.

Система выделяет для идентификатора не более NAMEDATALEN-1 байт, а более длинные имена усекаются. По умолчанию NAMEDATALEN равно 64, так что максимальная длина идентификатора равна 63 байтам. Если этого недостаточно, этот предел можно увеличить, изменив константу NAMEDATALEN в файле src/include/pg_config_manual.h.

Ключевые слова и идентификаторы без кавычек воспринимаются системой без учёта регистра. Таким образом:

UPDATE MY_TABLE SET A = 5;

равносильно записи:

uPDaTE my_TabLE SeT a = 5;

Часто используется неформальное соглашение записывать ключевые слова заглавными буквами, а имена строчными, например:

UPDATE my_table SET a = 5;

Есть и другой тип идентификаторов: отделённые идентификаторы или идентификаторы в кавычках. Они образуются при заключении обычного набора символов в двойные кавычки ("). Такие идентификаторы всегда будут считаться идентификаторами, но не ключевыми словами. Так "select" можно использовать для обозначения столбца или таблицы «select», тогда как select без кавычек будет воспринят как ключевое слово и приведёт к ошибке разбора команды в месте, где ожидается имя таблицы или столбца. Тот же пример можно переписать с идентификаторами в кавычках следующим образом:

UPDATE "my_table" SET "a" = 5;

Идентификаторы в кавычках могут содержать любые символы, за исключением символа с кодом 0. (Чтобы включить в такой идентификатор кавычки, продублируйте их.) Это позволяет создавать таблицы и столбцы с именами, которые иначе были бы невозможны, например, с пробелами или амперсандами. Ограничение длины при этом сохраняется.

Ещё один вариант идентификаторов в кавычках позволяет использовать символы Unicode по их кодам. Такой идентификатор начинается с U& (строчная или заглавная U и амперсанд), а затем сразу без пробелов идёт двойная кавычка, например U&"foo". (Заметьте, что при этом возникает неоднозначность с оператором &. Чтобы её избежать, окружайте этот оператор пробелами.) Затем в кавычках можно записывать символы Unicode двумя способами: обратная косая черта, а за ней код символа из четырёх шестнадцатеричных цифр, либо обратная косая черта, знак плюс, а затем код из шести шестнадцатеричных цифр. Например, идентификатор "data" можно записать так:

U&"d\0061t\+000061"

В следующем менее тривиальном примере закодировано русское слово «слон», записанное кириллицей:

U&"\0441\043B\043E\043D"

Если вы хотите использовать не обратную косую черту, а другой спецсимвол, его можно указать, добавив UESCAPE после строки, например:

U&"d!0061t!+000061" UESCAPE '!'

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

Чтобы сделать спецсимволом знак апострофа, напишите его дважды.

Unicode-формат полностью поддерживается только при использовании на сервере кодировки UTF8. Когда используются другие кодировки, допускается указание только ASCII-символов (с кодами до \007F). И в четырёх, и в шестизначной форме можно записывать суррогатные пары UTF-16 и таким образом составлять символы с кодами больше чем U+FFFF, хотя наличие шестизначной формы технически делает это ненужным. (Суррогатные пары не сохраняются непосредственно, а объединяются в один символ, который затем кодируется в UTF-8.)

Идентификатор, заключённый в кавычки, становится зависимым от регистра, тогда как идентификаторы без кавычек всегда переводятся в нижний регистр. Например, идентификаторы FOO, foo и "foo" считаются одинаковыми в PostgreSQL, но "Foo" и "FOO" отличны друг от друга и от предыдущих трёх. (Приведение имён без кавычек к нижнему регистру, как это делает PostgreSQL, несовместимо со стандартом SQL, который говорит о том, что имена должны приводиться к верхнему регистру. То есть, согласно стандарту foo должно быть эквивалентно "FOO", а не "foo". Поэтому при создании переносимых приложений рекомендуется либо всегда заключать определённое имя в кавычки, либо не заключать никогда.)

4.1.2. Константы

В PostgreSQL есть три типа констант подразумеваемых типов: строки, битовые строки и числа. Константы можно также записывать, указывая типы явно, что позволяет представить их более точно и обработать более эффективно. Эти варианты рассматриваются в следующих подразделах.

4.1.2.1. Строковые константы

Строковая константа в SQL — это обычная последовательность символов, заключённая в апострофы ('), например: 'Это строка'

. Чтобы включить апостроф в строку, напишите в ней два апострофа рядом, например: 'Жанна д''Арк'. Заметьте, это не то же самое, что двойная кавычка (").

Две строковые константы, разделённые пробельными символами и минимум одним переводом строки, объединяются в одну и обрабатываются, как если бы строка была записана в одной константе. Например:

SELECT 'foo'
'bar';

эквивалентно:

SELECT 'foobar';

но эта запись:

SELECT 'foo'      'bar';

считается синтаксической ошибкой. (Это несколько странное поведение определено в стандарте SQL, PostgreSQL просто следует ему.)

4.1.2.2. Строковые константы со спецпоследовательностями в стиле C

PostgreSQL также принимает «спецпоследовательности», что является расширением стандарта SQL. Строка со спецпоследовательностями начинается с буквы E (заглавной или строчной), стоящей непосредственно перед апострофом, например: E'foo'. (Когда константа со спецпоследовательностью разбивается на несколько строк, букву E нужно поставить только перед первым открывающим апострофом.) Внутри таких строк символ обратной косой черты (\) начинает C-подобные спецпоследовательности, в которых сочетание обратной косой черты со следующим символом(ами) даёт определённое байтовое значение, как показано в Таблице 4.1.

Таблица 4.1. Спецпоследовательности

СпецпоследовательностьИнтерпретация
\bсимвол «забой»
\fподача формы
\nновая строка
\rвозврат каретки
\tтабуляция
\o, \oo, \ooo (o = 0 — 7)восьмеричное значение байта
\xh, \xhh (h = 0 — 9, A — F)шестнадцатеричное значение байта
\uxxxx, \Uxxxxxxxx (x = 0 — 9, A — F)16- или 32-битный шестнадцатеричный код символа Unicode

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

Вы должны позаботиться, чтобы байтовые последовательности, которые вы создаёте таким образом, особенно в восьмеричной и шестнадцатеричной записи, образовывали допустимые символы в серверной кодировке. Когда сервер работает с кодировкой UTF-8, вместо такой записи байт следует использовать спецпоследовательности Unicode или альтернативный синтаксис Unicode, описанный в Подразделе 4.1.2.3. (В противном случае придётся кодировать символы UTF-8 вручную и выписывать их по байтам, что очень неудобно.)

Спецпоследовательности с Unicode полностью поддерживаются только при использовании на сервере кодировки UTF8. Когда используются другие кодировки, допускается указание только ASCII-символов (с кодами до \u007F). И в четырёх, и в восьмизначной форме можно записывать суррогатные пары UTF-16 и таким образом составлять символы с кодами больше чем U+FFFF, хотя наличие восьмизначной формы технически делает это ненужным. (Когда суррогатные пары используются с серверной кодировкой UTF8, они сначала объединяются в один символ, который затем кодируется в UTF-8.)

Внимание

Если параметр конфигурации standard_conforming_strings имеет значение off, PostgreSQL распознаёт обратную косую черту как спецсимвол и в обычных строках, и в строках со спецпоследовательностями. Однако в версии PostgreSQL 9.1 по умолчанию принято значение on, и в этом случае обратная косая черта распознаётся только в спецстроках. Это поведение больше соответствует стандарту, хотя может нарушить работу приложений, рассчитанных на предыдущий режим, когда обратная косая черта распознавалась везде. В качестве временного решения вы можете изменить этот параметр на off, но лучше уйти от такой практики. Если вам нужно, чтобы обратная косая черта представляла специальный символ, задайте строковую константу с E.

В дополнение к standard_conforming_strings поведением обратной косой черты в строковых константах управляют параметры escape_string_warning и backslash_quote.

Строковая константа не может включать символ с кодом 0.

4.1.2.3. Строковые константы со спецпоследовательностями Unicode

postgrespro.ru

PostgreSQL : Документация: 9.5: 4.1. Лексическая структура : Компания Postgres Professional

4.1. Лексическая структура

SQL-программа состоит из последовательности команд. Команда, в свою очередь, представляет собой последовательность компонентов, оканчивающуюся точкой с запятой («;»). Конец входного потока также считается концом команды. Какие именно компоненты допустимы для конкретной команды, зависит от её синтаксиса.

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

Например, следующий текст является правильной (синтаксически) SQL-программой:

Это последовательность трёх команд, по одной в строке (хотя их можно было разместить и в одну строку или наоборот, разделить команды на несколько строк).

Кроме этого, SQL-программы могут содержать комментарии. Они не являются компонентами команд, а по сути равносильны пробельным символам.

Синтаксис SQL не очень строго определяет, какие компоненты идентифицируют команды, а какие — их операнды или параметры. Первые несколько компонентов обычно содержат имя команды, так что в данном примере мы можем говорить о командах «SELECT», «UPDATE» и «INSERT». Но например, команда UPDATE требует, чтобы также в определённом положении всегда стоял компонент SET, а INSERT в приведённом виде требует наличия компонента VALUES. Точные синтаксические правила для каждой команды описаны в Части VI.

4.1.1. Идентификаторы и ключевые слова

Показанные выше команды содержали компоненты SELECT, UPDATE и VALUES, которые являются примерами ключевых слов, то есть слов, имеющих фиксированное значение в языке SQL. Компоненты MY_TABLE и A являются примерами идентификаторов. Они идентифицируют имена таблиц, столбцов или других объектов баз данных, в зависимости от того, где они используются. Поэтому иногда их называют просто «именами». Ключевые слова и идентификаторы имеют одинаковую лексическую структуру, то есть, не зная языка, нельзя определить, является ли некоторый компонент ключевым словом или идентификатором. Полный список ключевых слов приведён в Приложении C.

Идентификаторы и ключевые слова SQL должны начинаться с буквы (az, хотя допускаются также не латинские буквы и буквы с диакритическими знаками) или подчёркивания (_). Последующими символами в идентификаторе или ключевом слове могут быть буквы, цифры (09), знаки доллара ($) или подчёркивания. Заметьте, что строго следуя букве стандарта SQL, знаки доллара нельзя использовать в идентификаторах, так что их использование вредит переносимости приложений. В стандарте SQL гарантированно не будет ключевых слов с цифрами и начинающихся или заканчивающихся подчёркиванием, так что идентификаторы такого вида защищены от возможных конфликтов с будущими расширениями стандарта.

Система выделяет для идентификатора не более NAMEDATALEN-1 байт, а более длинные имена усекаются. По умолчанию NAMEDATALEN равно 64, так что максимальная длина идентификатора равна 63 байтам. Если этого недостаточно, этот предел можно увеличить, изменив константу NAMEDATALEN в файле src/include/pg_config_manual.h.

Ключевые слова и идентификаторы без кавычек воспринимаются системой без учёта регистра. Таким образом:

UPDATE MY_TABLE SET A = 5;

равносильно записи:

uPDaTE my_TabLE SeT a = 5;

Часто используется неформальное соглашение записывать ключевые слова заглавными буквами, а имена строчными, например:

UPDATE my_table SET a = 5;

Есть и другой тип идентификаторов: отделённые идентификаторы или идентификаторы в кавычках. Они образуются при заключении обычного набора символов в двойные кавычки ("). Такие идентификаторы всегда будут считаться идентификаторами, но не ключевыми словами. Так "select" можно использовать для обозначения столбца или таблицы «select», тогда как select без кавычек будет воспринят как ключевое слово и приведёт к ошибке разбора команды в месте, где ожидается имя таблицы или столбца. Тот же пример можно переписать с идентификаторами в кавычках следующим образом:

UPDATE "my_table" SET "a" = 5;

Идентификаторы в кавычках могут содержать любые символы, за исключением символа с кодом 0. (Чтобы включить в такой идентификатор кавычки, продублируйте их.) Это позволяет создавать таблицы и столбцы с именами, которые иначе были бы невозможны, например, с пробелами или амперсандами. Ограничение длины при этом сохраняется.

Ещё один вариант идентификаторов в кавычках позволяет использовать символы Unicode по их кодам. Такой идентификатор начинается с U& (строчная или заглавная U и амперсанд), а затем сразу без пробелов идёт двойная кавычка, например U&"foo". (Заметьте, что при этом возникает неоднозначность с оператором &. Чтобы её избежать, окружайте этот оператор пробелами.) Затем в кавычках можно записывать символы Unicode двумя способами: обратная косая черта, а за ней код символа из четырёх шестнадцатеричных цифр, либо обратная косая черта, знак плюс, а затем код из шести шестнадцатеричных цифр. Например, идентификатор "data" можно записать так:

U&"d\0061t\+000061"

В следующем менее тривиальном примере закодировано русское слово «слон», записанное кириллицей:

U&"\0441\043B\043E\043D"

Если вы хотите использовать не обратную косую черту, а другой спецсимвол, его можно указать, добавив UESCAPE после строки, например:

U&"d!0061t!+000061" UESCAPE '!'

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

Чтобы сделать спецсимволом знак апострофа, напишите его дважды.

Unicode-формат полностью поддерживается только при использовании на сервере кодировки UTF8. Когда используются другие кодировки, допускается указание только ASCII-символов (с кодами до \007F). И в четырёх, и в шестизначной форме можно записывать суррогатные пары UTF-16 и таким образом составлять символы с кодами больше чем U+FFFF, хотя наличие шестизначной формы технически делает это ненужным. (Суррогатные пары не сохраняются непосредственно, а объединяются в один символ, который затем кодируется в UTF-8.)

Идентификатор, заключённый в кавычки, становится зависимым от регистра, тогда как идентификаторы без кавычек всегда переводятся в нижний регистр. Например, идентификаторы FOO, foo и "foo" считаются одинаковыми в PostgreSQL, но "Foo" и "FOO" отличны друг от друга и от предыдущих трёх. (Приведение имён без кавычек к нижнему регистру, как это делает PostgreSQL, несовместимо со стандартом SQL, который говорит о том, что имена должны приводиться к верхнему регистру. То есть, согласно стандарту foo должно быть эквивалентно "FOO", а не "foo". Поэтому при создании переносимых приложений рекомендуется либо всегда заключать определённое имя в кавычки, либо не заключать никогда.)

4.1.2. Константы

В PostgreSQL есть три типа констант подразумеваемых типов: строки, битовые строки и числа. Константы можно также записывать, указывая типы явно, что позволяет представить их более точно и обработать более эффективно. Эти варианты рассматриваются в следующих подразделах.

4.1.2.1. Строковые константы

Строковая константа в SQL — это обычная последовательность символов, заключённая в апострофы ('), например: 'Это строка'. Чтобы включить апостроф в строку, напишите в ней два апострофа рядом, например: 'Жанна д''Арк'. Заметьте, это не то же самое, что двойная кавычка (

").

Две строковые константы, разделённые пробельными символами и минимум одним переводом строки, объединяются в одну и обрабатываются, как если бы строка была записана в одной константе. Например:

SELECT 'foo'
'bar';

эквивалентно:

SELECT 'foobar';

но эта запись:

SELECT 'foo'      'bar';

считается синтаксической ошибкой. (Это несколько странное поведение определено в стандарте SQL, PostgreSQL просто следует ему.)

4.1.2.2. Строковые константы со спецпоследовательностями в стиле C

PostgreSQL также принимает «спецпоследовательности», что является расширением стандарта SQL. Строка со спецпоследовательностями начинается с буквы E (заглавной или строчной), стоящей непосредственно перед апострофом, например: E'foo'. (Когда константа со спецпоследовательностью разбивается на несколько строк, букву E нужно поставить только перед первым открывающим апострофом.) Внутри таких строк символ обратной косой черты (\) начинает C-подобные спецпоследовательности, в которых сочетание обратной косой черты со следующим символом(ами) даёт определённое байтовое значение, как показано в Таблице 4.1.

Таблица 4.1. Спецпоследовательности

СпецпоследовательностьИнтерпретация
\bсимвол «забой»
\fподача формы
\nновая строка
\rвозврат каретки
\tтабуляция
\o, \oo, \ooo (o = 0 — 7)восьмеричное значение байта
\xh, \xhh (h = 0 — 9, A — F)шестнадцатеричное значение байта
\uxxxx, \Uxxxxxxxx (x = 0 — 9, A — F)16- или 32-битный шестнадцатеричный код символа Unicode

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

Вы должны позаботиться, чтобы байтовые последовательности, которые вы создаёте таким образом, особенно в восьмеричной и шестнадцатеричной записи, образовывали допустимые символы в серверной кодировке. Когда сервер работает с кодировкой UTF-8, вместо такой записи байт следует использовать спецпоследовательности Unicode или альтернативный синтаксис Unicode, описанный в Подразделе 4.1.2.3. (В противном случае придётся кодировать символы UTF-8 вручную и выписывать их по байтам, что очень неудобно.)

Спецпоследовательности с Unicode полностью поддерживаются только при использовании на сервере кодировки UTF8. Когда используются другие кодировки, допускается указание только ASCII-символов (с кодами до \u007F). И в четырёх, и в восьмизначной форме можно записывать суррогатные пары UTF-16 и таким образом составлять символы с кодами больше чем U+FFFF, хотя наличие восьмизначной формы технически делает это ненужным. (Когда суррогатные пары используются с серверной кодировкой UTF8, они сначала объединяются в один символ, который затем кодируется в UTF-8.)

Внимание

Если параметр конфигурации standard_conforming_strings имеет значение off, PostgreSQL распознаёт обратную косую черту как спецсимвол и в обычных строках, и в строках со спецпоследовательностями. Однако в версии PostgreSQL 9.1 по умолчанию принято значение on, и в этом случае обратная косая черта распознаётся только в спецстроках. Это поведение больше соответствует стандарту, хотя может нарушить работу приложений, рассчитанных на предыдущий режим, когда обратная косая черта распознавалась везде. В качестве временного решения вы можете изменить этот параметр на off, но лучше уйти от такой практики. Если вам нужно, чтобы обратная косая черта представляла специальный символ, задайте строковую константу с E.

В дополнение к standard_conforming_strings поведением обратной косой черты в строковых константах управляют параметры escape_string_warning и backslash_quote.

Строковая константа не может включать символ с кодом 0.

4.1.2.3. Строковые константы со спецпоследовательностями Unicode

PostgreSQL также поддерживает ещё один вариант спецпоследовательностей, позволяющий включать в строки символы Unicode по их кодам. Строковая константа со спецпоследовательностями Unicode начинается с U& (строчная или заглавная U и амперсанд), а затем сразу без пробелов идёт апостроф, например U&'foo'. (Заметьте, что при этом возникает неоднозначность с оператором &. Чтобы её избежать, окружайте этот оператор пробелами.) Затем в апострофах можно записывать символы Unicode двумя способами: обратная косая черта, а за ней код символа из четырёх шестнадцатеричных цифр, либо обратная косая черта, знак плюс, а затем код из шести шестнадцатеричных цифр. Например, строку 'data' можно записать так:

U&'d\0061t\+000061'

В следующем менее тривиальном примере закодировано русское слово «слон», записанное кириллицей:

U&'\0441\043B\043E\043D'

Если вы хотите использовать не обратную косую черту, а другой спецсимвол, его можно указать, добавив UESCAPE после строки, например:

U&'d!0061t!+000061' UESCAPE '!'

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

Спецпоследовательности с Unicode поддерживаются только при использовании на сервере кодировки UTF8. Когда используются другие кодировки, допускается указание только ASCII-символов (с кодами до \007F). И в четырёх, и в шестизначной форме можно записывать суррогатные пары UTF-16 и таким образом составлять символы с кодами больше чем U+FFFF, хотя наличие шестизначной формы технически делает это ненужным. (Когда суррогатные пары используются с серверной кодировкой UTF8, они сначала объединяются в один символ, который затем кодируется в UTF-8.)

Также заметьте, что спецпоследовательности Unicode в строковых константах работают, только когда параметр конфигурации standard_conforming_strings равен on. Это объясняется тем, что иначе клиентские программы, проверяющие SQL-операторы, можно будет ввести в заблуждение и эксплуатировать это как уязвимо

postgrespro.ru

Иллюстрированный самоучитель по PostgreSQL › Команды PostgreSQL [страница — 308] | Самоучители по программированию

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

  • Модификация структуры группы пользователей. | Синтаксис: | ALTER GROUP имя ADD USER | пользователь [….] ALTER GROUP имя DROP USER | пользователь [….] | Параметры: | имя. Имя группы, в которую вносятся изменения. | пользователь. Имена пользователей, включаемых в группу или удаляемых из нее.

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

  • Модификация атрибутов и прав пользователя. | Синтаксис: | ALTER USER пользователь | [ WITH PASSWORD ‘пароль’ ] | [ CREATEDB I NOCREATEDB ] [ CREATEUSER | NOCREATEUSER ] | [ VALID UNTIL ‘время’ ] | Параметры: | пользователь. Имя пользователя PostgreSQL, данные которого изменяются командой ALTER USER. | пароль.

  • Начало отложенного транзакционного блока. | Синтаксис: | BEGIN [ WORK | TRANSACTION ] | Параметры: | Необязательные ключевые слова, делающие команду SQL более наглядной. | Результаты: | BEGIN. Сообщение выдается в начале транзакции. | NOTICE: BEGIN: already transaction in progress.

  • Закрытие объекта курсора. | Синтаксис: | CLOSE курсор | Параметры: | Имя открытого курсора. | Результаты: | CLOSE. Сообщение выдается при успешном закрытии курсора. | NOTICE: PerformPortalClose: portal «курсор» not found. Сообщение выдается в том случае, если заданный курсор не был объявлен или открыт.

  • Кластеризация таблицы по заданному индексу. | Синтаксис: | CLUSTER индекс ON таблица | Параметры: | индекс. Имя индекса, используемого при кластеризации. | таблица. Имя таблицы, для которой производится кластеризация. | Результаты: | CLUSTER. Сообщение выдается при успешной кластеризации таблицы.

  • Определение комментария для объекта базы данных. | Синтаксис: | COMMENT ON | [ | [ DATABASE | INDEX | RULE | SEQUENCE | TABLE | TYPE | VIEW ] объект | COLUMN таблица.поле| | FUNCTION функция (аргумент [….]) | | AGGREGATE агрвгатная_функция агрегатный_тип | | OPERATOR оператор (левый_тип, правый_тип) | | TRIGGER триггер ON таблица | ] IS ‘текст’ | Параметры: | DATABASE INDEX | RULE | SEQUENCE | TABLE | TYPE VIEW.

  • Завершение транзакционного блока и фиксация изменений в базе данных. | Синтаксис: | COMMIT [ WORK | TRANSACTION ] | Параметры: | Необязательные ключевые слова, делающие команду SQL более наглядной. | Результаты: | COMMIT. Сообщение выдается при успешной фиксации изменений в базе данных.

  • Копирование данных между файлами и таблицами. | Синтаксис: | 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.

  • Определение новой агрегатной функции в базе данных. | Синтаксис: | CREATE AGGREGATE имя (BASETYPE = входной_тип | [, SFUNC = функция. STYPE = переходный_тип ] | [, FINALFUNC = завершающая_функция ] | [, INITCOND = начальное_состояние ]) | Параметры: | имя. Имя создаваемой агрегатной функции. | входной_тип.

  • Создание новой базы данных в PostgreSQL. | Синтаксис: | CREATE DATABASE база_данных | [ WITH [ LOCATION = { ‘каталог’ | DEFAULT } ] | [ TEMPLATE = шаблон DEFAULT ] | [ ENCODING = имя_нодировки | номер_кодировки | DEFAULT ] ] | Параметры: | база_данных. Имя создаваемой базы данных. | каталог.

  • Определение новой функции в базе данных. | Синтаксис: | CREATE FUNCTION имя ([ тип_аргумента [….] ]) | RETURNS тип_возвращаемого_значения | AS ‘определение’ | LANGUAGE ‘язык’ | [ WITH (атрибут [….]) ] | CREATE FUNCTION имя ([ тип_аргумента [….] ]) | RETURNS тип_возвращаемого_значения | AS ‘объектный_файл’ [, ‘имя_в_объектном_файле’ ] | LANGUAGE ‘язык’ | [ WITH (атрибут […;]) ] | Параметры: | имя.

  • Создание новой группы PostgreSQL в базе данных. | Синтаксис: | CREATE GROUP группа | [ WITH [ SYSID идентификатор_группы ] | [ USER пользователь [….]]] | Параметры: | группа. Имя создаваемой группы. | идентификатор_группы. Системный идентификатор, присваиваемый новой группе.

  • Создает индекс для таблицы. | Синтаксис: | CREATE [ UNIQUE ] INDEX индекс ON таблица | [ USING тип ] (поле [ класс ] [,…]) | CREATE [ UNIQUE ] INDEX индекс ON таблица | [ USING тип ] (функция (поле [….])[ класс ]) | Параметры: | UNIQUE. Необязательное ключевое слово UNIQUE.

  • Определение нового языка, используемого при создании функций. | Синтаксис: | CREATE [ TRUSTED ] [ PROCEDURAL ] LANGUAGE ‘язык’ | HANDLER обработчик | LANCOMPILER ‘комментарий’ | Параметры: | TRUSTED. Ключевое слово TRUSTED означает, что PostgreSQL разрешает непривилегированным пользователям обходить ограничения, связанные с наличием прав доступа к языку’.

  • Определение нового оператора в базе данных. | Синтаксис: | CREATE OPERATOR оператор (PROCEDURE = функция | [, LEFTARG = тип1 ] | [, RIGHTARG = тип2 ] | [, COMMUTATOR = коммутатор ] | [, NEGATOR = инвертор ] | [, RESTRICT = функция_ограничения ] | [, JOIN = функция_объединения ] | [, HASHES ] | [, SORT1 = левая_сортировка ] | [. SORT2 = правая_сортировка ]) | Параметры: | оператор.

  • Определение нового правила в таблице. | Синтаксис: | CREATE RULE правило AS ON событие ТО объект | [ WHERE условие ] DO [ INSTEAD ] операция | операция:: = NOTHING | query | (query [;…]) | [ query [:…] ] | Параметры: | правило. Имя создаваемого правила. | событие.

  • Создание нового генератора числовой последовательности. | Синтаксис: | CREATE SEQUENCE последовательность [ INCREMENT приращение ] | [ MINVALUE минимум ] [ MAXVALUE максимум ] | [ START начало ] [ CACHE кэш ][ CYCLE ] | Параметры: | последовательность. Имя создаваемой последовательности. | приращение.

  • Создание новой таблицы. | Синтаксис: | CREATE [ TEMPORARY | TEMP ] TABLE таблица ( | { поле тип [ограничение_поля [… ] ] | ограничение_таблицы } | [….

  • Создание новой таблицы по результатам выборки. | Синтаксис: | CREATE TABLE таблица [ (поле [….]) ] | AS выборка | Параметры: | таблица. Имя создаваемой таблицы. | поле. Имя поля в создаваемой таблице; при перечислении нескольких полей их имена разделяются запятыми.

  • Создание нового триггера. | Синтаксис: | CREATE TRIGGER триггер { BEFORE | AFTER } { событие [ OR событие… ] } | ON таблица | FOR EACH { ROW STATEMENT } | EXECUTE PROCEDURE функция (аргументы) | Параметры: | триггер. Имя создаваемого триггера. | таблица. Имя таблицы, с которой ассоциируется триггер. | событие.

  • Определение нового типа данных в базе. | Синтаксис: | CREATE TYPE тип (INPUT = входная_функция, OUTPUT = входная_функция | , INTERNALLENGTH = { внутренний_размер | VARIABLE } | [, EXTERNALLENGTH – { внешний_размер | VARIABLE } ] | [, DEFAULT = «значение_по^умолчанию» ] | [, ELEMENT = элемент ] [.

  • Создание нового пользователя базы данных PostgreSQL. | Синтаксис: | CREATE USER пользователь | [ WITH [ SYSID uid ] | [ PASSWORD ‘пароль’ ] ] | [ CREATEDB | NOCREATEDB ] | [ CREATEUSER | NOCREATEUSER ] | [ IN GROUP группа [….] ] | [ VALID UNTIL ‘срок’ ] | Параметры: | пользователь. Имя создаваемого пользователя.

  • Создание представления для таблицы. | Синтаксис: | CREATE VIEW представление AS запрос | Параметры: | представление. Имя создаваемого представления. | запрос. Запрос SQL, определяющий структуру и содержимое представления. | Результаты: | CREATE. Сообщение, возвращаемое при успешном создании представления.

  • Получение текущей даты. | Синтаксис: | CURRENT_DATE | Параметры: | Функция вызывается без параметров. | Результаты: | Текущая дата в виде значения типа date. | Описание | Функция CURRENT_DATE возвращает текущую системную дату в виде типа date.

  • Получение текущих даты и времени. | Синтаксис: | CURRENT_TIMESTAMP | Параметры: | Функция вызывается без параметров. | Результаты: | Текущая дата и текущее время. | Описание | Функция CURRENT_TIME возвращает текущие дату и время в виде значения типа timestamp.

  • Определение нового курсора. | Синтаксис: | DECLARE курсор | [ BINARY ] [ INSENSITIVE ] [ SCROLL ] | CURSOR FOR запрос | [ FOR { READ ONLY | UPDATE [ OF поле [….]]}] | Параметры: | курсор. Имя нового курсора. | BINARY.

  • Удаление записей из таблицы. | Синтаксис: | DELETE FROM [ ONLY ] таблица [ WHERE условие ] | Параметры: | таблица. Имя таблицы, из которой удаляются записи. | условие. Критерий отбора удаляемых записей. Структура условия аналогична условию секции WHERE команды SELECT – за дополнительной информацией об условиях обращайтесь к описанию команды SELECT.

  • Удаление агрегатной функции из базы данных. | Синтаксис: | DROP AGGREGATE функция тип | Параметры: | функция. Имя удаляемой агрегатной функции. | тип. Тип данных, передаваемый агрегатной функции. | Результаты: | DROP. Сообщение выдается при успешном удалении агрегатной функции.

  • Удаление базы данных из системы. | Синтаксис: | DROP DATABASE база_данных | Параметры: | Имя удаляемой базы данных. | Результаты: | DROP DATABASE. Сообщение выдается при успешном удалении базы данных. | ERROR: user ‘пользователь’ is not allowed to create/drop databases.

  • Удаление пользовательской функции. | Синтаксис: | DROP FUNCTION функция ([ тип [….]]) | Параметры: | функция. Имя существующей функции, удаляемой из базы данных. | тип. Ноль пли более типов аргументов функции. Комбинация имени и типов однозначно определяет функцию. | Результаты: | DROP.

  • Удаление группы пользователей из базы данных. | Синтаксис: | DROP GROUP группа | Параметры: | Имя удаляемой группы. | Результаты: | DROP GROUP. Это сообщение выдается при успешном удалении группы. | Описание | Команда DROP GROUP удаляет группу из текущей базы данных.

  • Удаление процедурного языка из базы данных. | Синтаксис: | DROP [ PROCEDURAL ] LANGUAGE ‘язык’ | Параметры: | Имя существующего языка, удаляемого из базы данных. | Результаты: | DROP. Сообщение выдается в том случае, если удаление языка прошло без ошибок. | ERROR: Language «язык» does not exist.

  • Удаление оператора из базы данных. | Синтаксис: | DROP OPERATOR оператор | ({ левый__тип NONE }. | { правый_тип | NONE }) | Параметры: | оператор. Удаляемый оператор. | левый_тип \ NONE. Тип левого операнда (или NONE при его отсутствии). | правый_тип \ NONE. Тип правого операнда (или NONE при его отсутствии).

  • Удаление правила из базы данных. | Синтаксис: | DROP RULE правило [,…] | Параметры: | Имя удаляемого правила. Одной командой можно удалить сразу несколько правил, имена которых перечисляются через запятую. | Результаты: | DROP. Сообщение возвращается при успешном удалении правила.

  • Удаление таблицы из базы данных. | Синтаксис: | DROP TABLE таблица [….] | Параметры: | Имя существующей таблицы, удаляемой из базы данных. В одной команде можно удалить сразу несколько таблиц, имена которых перечисляются через запятую. | Результаты: | DROP.

  • Удаление определения триггера из базы данных. | Синтаксис: | DROP TRIGGER триггер ON таблица | Параметры: | триггер. Имя удаляемого триггера. | таблица. Имя таблицы, для которой устанавливался триггер. | Результаты: | DROP. Сообщение возвращается при успешном удалении триггера.

  • Удаление типа данных из системных каталогов. | Синтаксис: | DROP TYPE тип [,…] | Параметры: | Имя удаляемого типа. В одной команде можно удалить сразу несколько типов, имена которых перечисляются через запятую. | Результаты: | DROP. Сообщение возвращается при успешном удалении типа.

  • Удаление пользователя PostgreSQL. | Синтаксис: | DROP USER пользователь | Параметры: | Имя удаляемого пользователя PostgreSQL. | Результаты: | DROP USER. Сообщение возвращается при успешном удалении пользователя PostgreSQL. | ERROR: DROP USER: user «пользователь» does not exist.

  • Удаление существующего представления из базы данных. | Синтаксис: | DROP VIEW представление. [….] | Параметры: | Имя удаляемого представления. | Результаты: | DROP. Сообщение возвращается при успешном удалении представления. | ERROR: view «представление» does not exlst.

  • Вывод плана выполнения запроса. | Синтаксис: | EXPLAIN [ VERBOSE ] запрос | Параметры: | VERBOSE. При наличии необязательного ключевого слова VERBOSE в плане запроса выводится дополнительная информация. | запрос. Запрос, план выполнения которого вы хотите получить. | Результаты: | NOTICE: QUERY PLAN: plan.

  • Выборка записей с использованием курсора. | Синтаксис: | FETCH направление | [ количество_записей ] { IN | FROM } курсор | направление:: – { FORWARD | BACKWARD | RELATIVE } | количество_записей:: = { число \ ALL NEXT PRIOR } | Параметры: | направление. Необязательный параметр, определяющий направление выборки.

  • Предоставление прав доступа пользователю, группе или всем пользователям базы данных. | Синтаксис: | GRANT привилегия [,…] ON объект [….] | ТО { PUBLIC | GROUP группа \ пользователь } | Параметры: | привилегия. Предоставляемая привилегия. Допустимые значения:

  • Вставка новых записей в таблицу. | Синтаксис: | INSERT INTO таблице [ (поле [….]) ] | { DEFAULT VALUES | VALUES (значение [….]) | | запрос } | Параметры: | таблица. Таблица, в которую вставляются новые данные. | поле. Имя поля, для которого задается значение.

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

  • Динамическая загрузка объектных файлов в базу данных. | Синтаксис: | LOAD ‘файл’ | Параметры: | Имя загружаемого объектного файла. | Результаты: | LOAD. Сообщение возвращается при успешной загрузке объектного файла. | ERROR: LOAD: could not open file ‘файл’. Ошибка – указанный файл не найден.

  • Блокировка записей в транзакциях. | Синтаксис: | LOCK [ TABLE ] таблица | LOCK [ TABLE ] таблица IN режим | режим:: = { [ ROW | ACCESS ] { SHARE | EXCLUSIVE } | | SHARE ROW EXCLUSIVE } MODE | Параметры: | таблица. Имя таблицы, для которой устанавливается блокировка. | режим.

  • Перемещение курсора к другой записи. | Синтаксис: | MOVE [ направление ] [ количество ] | { IN | FROM } курсор | Параметры: | направление. Направление, в котором перемещается указанный курсор. За дополнительной информацией о направлениях обращайтесь к описанию команды FETCH. | количество.

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

  • Восстановление индексов в таблицах. | Синтаксис: | REINDEX { TABLE | DATABASE | INDEX } объект [ FORCE ] | Параметры: | TABLE | DATABASE | INDEX. Тип индексируемого объекта. | объект. Имя индексируемого объекта. | FORCE. Ключевое слово FORCE восстанавливает индексы для всех перечисленных объектов.

  • Восстановление стандартных значений конфигурационных переменных. | Синтаксис: | RESET переменная | Параметры: | Переменная, которой присваивается значение по умолчанию. | Результаты: | RESET VARIABLE. Это сообщение выдается при успешном сбросе переменной.

  • Отмена привилегий доступа у пользователя, группы или всех пользователей. | Синтаксис: | REVOKE привилегия […. ] | ON объект [….] | FROM { PUBLIC | GROUP группа \ пользователь } | Параметры: | привилегия. Отменяемая привилегия.

  • Откат текущей транзакции с отменой всех изменений. | Синтаксис: | ROLLBACK [ WORK TRANSACTION ] | Параметры: | Необязательные ключевые слова, делающие команду SQL более наглядной. | Результаты: | ROLLBACK. Сообщение выдается при успешном откате транзакции. | NOTICE: ROLLBACK: no transaction In progress.

  • Выборка записей из таблицы или представления. | Синтаксис: | SELECT [ ALL | DISTINCT [ ON (уникальное_выражение [….]) ] ] | цель [ AS выходное_имя ] [….] | [ FROM источник [ {. | CROSS JOIN }…] ] [ WHERE условие_фильтрации ] | [ GROUP BY условие_группировки [….

  • Создание новой таблицы по результатам команды SELECT. | Синтаксис: | SELECT [ ALL | DISTINCT [ ON (уникальное_выражение [….]) ] ] | цель [ AS выходное имя ] [,…] [ INTO [ TEMPORARY | TEMP ] [ TABLE ] новая_таблица ] | [ FROM источник [ {.

  • Присваивание значений конфигурационным переменным. | Синтаксис: | SET переменная {ТО = } { значение \ ‘значение’ DEFAULT } | SET TIME ZONE { ‘часовой_пояс’ \ LOCAL DEFAULT } | Параметры: | переменная. Имя конфигурационной переменной, которой присваивается новое значение. | значение.

  • Выбор режима проверки ограничений в текущей транзакции. | Синтаксис: | SET CONSTRAINTS { ALL режим […. ] } | { DEFERRED | IMMEDIATE } | Параметры: | ALL. Ключевое слово ALL означает, что указанный режим должен относиться ко всем ограничениям в текущей транзакции. | режим.

  • Выбор уровня изоляции текущей транзакции. | Синтаксис: | SET TRANSACTION ISOLATION LEVEL | { READ COMMITTED | SERIALIZABLE } | SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL | { READ COMMITTED | SERIALIZABLE } | Параметры: | READ COMMITED.

  • Вывод значений конфигурационных переменных. | Синтаксис: | SHOW переменная | Параметры: | Имя конфигурационной переменной. | Результаты: | SHOW VARIABLE. Сообщение выдается при успешном выполнении команды SHOW. | ERROR: Option ‘переменная’ is not recognized.

  • Очистка таблицы. | Синтаксис: | TRUNCATE [ TABLE ] таблица | Параметры: | Имя таблицы. В результате очистки из таблицы удаляются все записи. | Результаты: | TRUNCATE. Сообщение выдается при успешной очистке таблицы. | ERROR: Relation ‘таблица’ does not exist.

  • Серверный процесс выходит из режима ожидания уведомлений. | Синтаксис: | UNLISTEN { событие \ * } | Параметры: | событие. Имя события, ожидаемого сервером. | *. Отмена ожидания всех событий, определенных ранее. | Результаты: | UNLISTEN. Это сообщение выдается при успешном выполнении команды UNLISTEN.

  • Обновление записей в таблице. | Синтаксис: | UPDATE [ ONLY ] таблица SET | поле = выражение [….] | [ FROM список_источников ] | [ WHERE условие ] | Параметры: | ONLY. Обновление выполняется только в указанной таблице и не распространяется на производные таблицы (если они существуют). | таблица.

  • Удаление временных данных и анализ базы данных. | Синтаксис: | VACUUM [ VERBOSE ] [ ANALYZE ] [ таблица ] | VACUUM [ VERBOSE ] ANALYZE [ таблица [ (поле [….]) ] ] | Параметры: | VERBOSE. Вывод отчета по каждой обработанной таблице. | ANALYZE.

  • samoychiteli.ru

    PostgreSQL : Документация: 9.6: SELECT : Компания Postgres Professional

    Предложение WITH

    Предложение WITH позволяет задать один или несколько подзапросов, к которым затем можно обратиться по имени в основном запросе. Эти подзапросы по сути действуют как временные таблицы или представления в процессе выполнения главного запроса. Каждый подзапрос может представлять собой оператор SELECT, TABLE, VALUES, INSERT, UPDATE или DELETE. При использовании в WITH оператора, изменяющего данные, (INSERT, UPDATE или DELETE) обычно добавляется предложение RETURNING. Заметьте, что именно результат RETURNING, а не нижележащая таблица, изменяемая запросом, формирует временную таблицу, которую затем читает основной запрос. Если RETURNING опущено, оператор, тем не менее, выполняется, но не выдаёт никакого результата, так что на него нельзя сослаться как на таблицу в основном запросе.

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

    Если указано RECURSIVE, подзапрос SELECT может ссылаться сам на себя по имени. Такой подзапрос должен иметь форму

    нерекурсивная_часть UNION [ ALL | DISTINCT ] рекурсивная_часть
    

    , где рекурсивная ссылка на сам запрос может находиться только справа от UNION. Для одного запроса допускается только одна рекурсивная ссылка на него же. Операторы, изменяющие данные, не могут быть рекурсивными, но результат рекурсивного запроса SELECT в таких операторах можно использовать. За примером обратитесь к Разделу 7.8.

    Ещё одна особенность RECURSIVE в том, что запросы WITH могут быть неупорядоченными: запрос может ссылаться на другой, идущий в списке после него. (Однако циклические ссылки или взаимная рекурсия не поддерживаются.) Без RECURSIVE запрос в WITH может ссылаться только на запросы того же уровня в WITH, предшествующие ему в списке WITH.

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

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

    За дополнительными сведениями обратитесь к Разделу 7.8.

    postgrespro.ru

    PostgreSQL : Документация: 9.5: SELECT : Компания Postgres Professional

    Предложение WITH

    Предложение WITH позволяет задать один или несколько подзапросов, к которым затем можно обратиться по имени в основном запросе. Эти подзапросы по сути действуют как временные таблицы или представления в процессе выполнения главного запроса. Каждый подзапрос может представлять собой оператор SELECT, TABLE, VALUES, INSERT, UPDATE или DELETE. При использовании в WITH оператора, изменяющего данные, (INSERT, UPDATE или DELETE) обычно добавляется предложение RETURNING. Заметьте, что именно результат RETURNING, а не нижележащая таблица, изменяемая запросом, формирует временную таблицу, которую затем читает основной запрос. Если RETURNING опущено, оператор, тем не менее, выполняется, но не выдаёт никакого результата, так что на него нельзя сослаться как на таблицу в основном запросе.

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

    Если указано RECURSIVE, подзапрос SELECT может ссылаться сам на себя по имени. Такой подзапрос должен иметь форму

    нерекурсивная_часть UNION [ ALL | DISTINCT ] рекурсивная_часть
    

    , где рекурсивная ссылка на сам запрос может находиться только справа от UNION. Для одного запроса допускается только одна рекурсивная ссылка на него же. Операторы, изменяющие данные, не могут быть рекурсивными, но результат рекурсивного запроса SELECT в таких операторах можно использовать. За примером обратитесь к Разделу 7.8.

    Ещё одна особенность RECURSIVE в том, что запросы WITH могут быть неупорядоченными: запрос может ссылаться на другой, идущий в списке после него. (Однако циклические ссылки или взаимная рекурсия не поддерживаются.) Без RECURSIVE запрос в WITH может ссылаться только на запросы того же уровня в WITH, предшествующие ему в списке WITH.

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

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

    За дополнительными сведениями обратитесь к Разделу 7.8.

    postgrespro.ru

    Postgres Pro Standard : Документация: 9.5: SELECT : Компания Postgres Professional

    Предложение WITH

    Предложение WITH позволяет задать один или несколько подзапросов, к которым затем можно обратиться по имени в основном запросе. Эти подзапросы по сути действуют как временные таблицы или представления в процессе выполнения главного запроса. Каждый подзапрос может представлять собой оператор SELECT, TABLE, VALUES, INSERT, UPDATE или DELETE. При использовании в WITH оператора, изменяющего данные, (INSERT, UPDATE или DELETE) обычно добавляется предложение RETURNING. Заметьте, что именно результат RETURNING, а не нижележащая таблица, изменяемая запросом, формирует временную таблицу, которую затем читает основной запрос. Если RETURNING опущено, оператор, тем не менее, выполняется, но не выдаёт никакого результата, так что на него нельзя сослаться как на таблицу в основном запросе.

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

    Если указано RECURSIVE, подзапрос SELECT может ссылаться сам на себя по имени. Такой подзапрос должен иметь форму

    нерекурсивная_часть UNION [ ALL | DISTINCT ] рекурсивная_часть
    

    , где рекурсивная ссылка на сам запрос может находиться только справа от UNION. Для одного запроса допускается только одна рекурсивная ссылка на него же. Операторы, изменяющие данные, не могут быть рекурсивными, но результат рекурсивного запроса SELECT в таких операторах можно использовать. За примером обратитесь к Разделу 7.8.

    Ещё одна особенность RECURSIVE в том, что запросы WITH могут быть неупорядоченными: запрос может ссылаться на другой, идущий в списке после него. (Однако циклические ссылки или взаимная рекурсия не поддерживаются.) Без RECURSIVE запрос в WITH может ссылаться только на запросы того же уровня в WITH, предшествующие ему в списке WITH.

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

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

    За дополнительными сведениями обратитесь к Разделу 7.8.

    postgrespro.ru

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *