PostgreSQL : Документация: 10: Часть VI. Справочное руководство : Компания Postgres Professional
Статьи этого справочного руководства составлены так, чтобы дать в разумном объёме авторитетную, полную и формальную сводку по соответствующим темам. Дополнительные сведения об использовании PostgreSQL в повествовательной, ознакомительной или показательной форме можно найти в других частях этой книги. Ссылки на них можно найти на страницах этого руководства.
Все эти справочные статьи также публикуются в виде традиционных страниц «man».
Содержание
- I. Команды SQL
- ABORT — прервать текущую транзакцию
- ALTER AGGREGATE — изменить определение агрегатной функции
- ALTER COLLATION — изменить определение правила сортировки
- ALTER CONVERSION — изменить определение перекодировки
- ALTER DATABASE — изменить атрибуты базы данных
- ALTER DEFAULT PRIVILEGES — определить права доступа по умолчанию
- ALTER DOMAIN — изменить определение домена
- ALTER EVENT TRIGGER — изменить определение событийного триггера
- ALTER EXTENSION — изменить определение расширения
- ALTER FOREIGN DATA WRAPPER — изменить определение обёртки сторонних данных
- ALTER FOREIGN TABLE — изменить определение сторонней таблицы
- ALTER FUNCTION — изменить определение функции
- ALTER GROUP — изменить имя роли или членство
- ALTER INDEX — изменить определение индекса
- ALTER LANGUAGE — изменить определение процедурного языка
- ALTER LARGE OBJECT — изменить определение большого объекта
- ALTER MATERIALIZED VIEW — изменить определение материализованного представления
- ALTER OPERATOR — изменить определение оператора
- ALTER OPERATOR CLASS — изменить определение класса операторов
- ALTER OPERATOR FAMILY — изменить определение семейства операторов
- ALTER POLICY — изменить определение политики защиты на уровне строк
- ALTER PUBLICATION — изменить определение публикации
- ALTER ROLE — изменить роль в базе данных
- ALTER RULE — изменить определение правила
- ALTER SCHEMA — изменить определение схемы
- ALTER SEQUENCE — изменить определение генератора последовательности
- ALTER SERVER — изменить определение стороннего сервера
- ALTER STATISTICS — изменить определение объекта расширенной статистики
- ALTER SUBSCRIPTION — изменить определение подписки
- ALTER SYSTEM — изменить параметр конфигурации сервера
- ALTER TABLE — изменить определение таблицы
- ALTER TABLESPACE — изменить определение табличного пространства
- ALTER TEXT SEARCH CONFIGURATION — изменить определение конфигурации текстового поиска
- ALTER TEXT SEARCH DICTIONARY — изменить определение словаря текстового поиска
- ALTER TEXT SEARCH PARSER — изменить определение анализатора текстового поиска
- ALTER TEXT SEARCH TEMPLATE — изменить определение шаблона текстового поиска
- ALTER TRIGGER — изменить определение триггера
- ALTER TYPE — изменить определение типа
- ALTER USER — изменить роль в базе данных
- ALTER USER MAPPING — изменить определение сопоставления пользователей
- ALTER VIEW — изменить определение представления
- ANALYZE — собрать статистику по базе данных
- BEGIN — начать блок транзакции
- CHECKPOINT — произвести контрольную точку в журнале предзаписи
- CLOSE — закрыть курсор
- CLUSTER — кластеризовать таблицу согласно индексу
- COMMENT — задать или изменить комментарий объекта
- COMMIT — зафиксировать текущую транзакцию
- COMMIT PREPARED — зафиксировать транзакцию, которая ранее была подготовлена для двухфазной фиксации
- COPY — копировать данные между файлом и таблицей
- CREATE ACCESS METHOD — создать новый метод доступа
- CREATE AGGREGATE — создать агрегатную функцию
- CREATE CAST — создать приведение
- CREATE COLLATION — создать правило сортировки
- CREATE CONVERSION — создать перекодировку
- CREATE DATABASE — создать базу данных
- CREATE DOMAIN — создать домен
- CREATE EVENT TRIGGER — создать событийный триггер
- CREATE EXTENSION — установить расширение
- CREATE FOREIGN DATA WRAPPER — создать новую обёртку сторонних данных
- CREATE FOREIGN TABLE — создать стороннюю таблицу
- CREATE FUNCTION — создать функцию
- CREATE GROUP — создать роль в базе данных
- CREATE INDEX — создать индекс
- CREATE LANGUAGE — создать процедурный язык
- CREATE MATERIALIZED VIEW — создать материализованное представление
- CREATE OPERATOR — создать оператор
- CREATE OPERATOR CLASS — создать класс операторов
- CREATE OPERATOR FAMILY — создать семейство операторов
- CREATE POLICY — создать новую политику защиты на уровне строк для таблицы
- CREATE PUBLICATION — создать публикацию
- CREATE ROLE — создать роль в базе данных
- CREATE RULE — создать правило перезаписи
- CREATE SCHEMA — создать схему
- CREATE SEQUENCE — создать генератор последовательности
- CREATE SERVER — создать сторонний сервер
- CREATE STATISTICS — создать расширенную статистику
- CREATE SUBSCRIPTION — создать подписку
- CREATE TABLE — создать таблицу
- CREATE TABLE AS — создать таблицу из результатов запроса
- CREATE TABLESPACE — создать табличное пространство
- CREATE TEXT SEARCH CONFIGURATION — создать конфигурацию текстового поиска
- CREATE TEXT SEARCH DICTIONARY — создать словарь текстового поиска
- CREATE TEXT SEARCH PARSER — создать анализатор текстового поиска
- CREATE TEXT SEARCH TEMPLATE — создать шаблон текстового поиска
- CREATE TRANSFORM — создать трансформацию
- CREATE TRIGGER — создать триггер
- CREATE TYPE — создать новый тип данных
- CREATE USER — создать роль в базе данных
- CREATE USER MAPPING — создать сопоставление пользователя для стороннего сервера
- CREATE VIEW — создать представление
- DEALLOCATE — освободить подготовленный оператор
- DECLARE — определить курсор
- DELETE — удалить записи таблицы
- DISCARD — очистить состояние сеанса
- DO — выполнить анонимный блок кода
- DROP ACCESS METHOD — удалить метод доступа
- DROP AGGREGATE — удалить агрегатную функцию
- DROP CAST — удалить приведение типа
- DROP COLLATION — удалить правило сортировки
- DROP CONVERSION — удалить преобразование
- DROP DATABASE — удалить базу данных
- DROP DOMAIN — удалить домен
- DROP EVENT TRIGGER — удалить событийный триггер
- DROP EXTENSION — удалить расширение
- DROP FOREIGN DATA WRAPPER — удалить обёртку сторонних данных
- DROP FOREIGN TABLE — удалить стороннюю таблицу
- DROP FUNCTION — удалить функцию
- DROP GROUP — удалить роль в базе данных
- DROP INDEX — удалить индекс
- DROP LANGUAGE — удалить процедурный язык
- DROP MATERIALIZED VIEW — удалить материализованное представление
- DROP OPERATOR — удалить оператор
- DROP OPERATOR CLASS — удалить класс операторов
- DROP OPERATOR FAMILY — удалить семейство операторов
- DROP OWNED — удалить объекты базы данных, принадлежащие роли
- DROP POLICY — удалить политику защиты на уровне строк для таблицы
- DROP PUBLICATION — удалить публикацию
- DROP ROLE — удалить роль в базе данных
- DROP RULE — удалить правило перезаписи
- DROP SCHEMA — удалить схему
- DROP SEQUENCE — удалить последовательность
- DROP SERVER — удалить описание стороннего сервера
- DROP STATISTICS — удалить расширенную статистику
- DROP SUBSCRIPTION — удалить подписку
- DROP TABLE — удалить таблицу
- DROP TABLESPACE — удалить табличное пространство
- DROP TEXT SEARCH CONFIGURATION — удалить конфигурацию текстового поиска
- DROP TEXT SEARCH DICTIONARY — удалить словарь текстового поиска
- DROP TEXT SEARCH PARSER — удалить анализатор текстового поиска
- DROP TEXT SEARCH TEMPLATE — удалить шаблон текстового поиска
- DROP TRANSFORM — удалить трансформацию
- DROP TRIGGER — удалить триггер
- DROP TYPE — удалить тип данных
- DROP USER — удалить роль в базе данных
- DROP USER MAPPING — удалить сопоставление пользователя для стороннего сервера
- DROP VIEW — удалить представление
- END — зафиксировать текущую транзакцию
- EXECUTE — выполнить подготовленный оператор
- EXPLAIN — показать план выполнения оператора
- FETCH — получить результат запроса через курсор
- GRANT — определить права доступа
- IMPORT FOREIGN SCHEMA — импортировать определения таблиц со стороннего сервера
- INSERT — добавить строки в таблицу
- LISTEN — ожидать уведомления
- LOAD — загрузить файл разделяемой библиотеки
- LOCK — заблокировать таблицу
- MOVE — переместить курсор
- NOTIFY — сгенерировать уведомление
- PREPARE — подготовить оператор к выполнению
- PREPARE TRANSACTION — подготовить текущую транзакцию для двухфазной фиксации
- REASSIGN OWNED — сменить владельца объектов базы данных, принадлежащих заданной роли
- REFRESH MATERIALIZED VIEW — заменить содержимое материализованного представления
- REINDEX — перестроить индексы
- RELEASE SAVEPOINT — высвободить ранее определённую точку сохранения
- RESET — восстановить значение по умолчанию заданного параметра времени выполнения
- REVOKE — отозвать права доступа
- ROLLBACK — прервать текущую транзакцию
- ROLLBACK PREPARED — отменить транзакцию, которая ранее была подготовлена для двухфазной фиксации
- ROLLBACK TO SAVEPOINT — откатиться к точке сохранения
- SAVEPOINT — определить новую точку сохранения в текущей транзакции
- SECURITY LABEL — определить или изменить метку безопасности, применённую к объекту
- SELECT — получить строки из таблицы или представления
- SELECT INTO — создать таблицу из результатов запроса
- SET — изменить параметр времени выполнения
- SET CONSTRAINTS — установить время проверки ограничений для текущей транзакции
- SET ROLE — установить идентификатор текущего пользователя в рамках сеанса
- SET SESSION AUTHORIZATION — установить идентификатор пользователя сеанса и идентификатор текущего пользователя в рамках сеанса
- SET TRANSACTION — установить характеристики текущей транзакции
- SHOW — показать значение параметра времени выполнения
- START TRANSACTION — начать блок транзакции
- TRUNCATE — опустошить таблицу или набор таблиц
- UNLISTEN — прекратить ожидание уведомления
- UPDATE — изменить строки таблицы
- VACUUM — провести сборку мусора и, возможно, проанализировать базу данных
- VALUES — вычислить набор строк
- ALTER AGGREGATE — изменить определение агрегатной функции
- ABORT — прервать текущую транзакцию
- II. Клиентские приложения PostgreSQL
- clusterdb — кластеризовать базу данных PostgreSQL
- createdb — создать базу данных PostgreSQL
- createuser — создать новую учётную запись PostgreSQL
- dropdb — удалить базу данных PostgreSQL
- dropuser — удалить учётную запись пользователя PostgreSQL
- ecpg — встроенный C-препроцессор SQL
- pg_basebackup — создать резервную копию кластера PostgreSQL
- pgbench — запустить тест производительности PostgreSQL
- pg_config — вывести информацию об установленной версии PostgreSQL
- pg_dump — выгрузить базу данных PostgreSQL в формате скрипта в файл или архив
- pg_dumpall — выгр
- createdb — создать базу данных PostgreSQL
- clusterdb — кластеризовать базу данных PostgreSQL
postgrespro.ru
PostgreSQL : Документация: 10: 20.3. Методы аутентификации : Компания Postgres Professional
20.3. Методы аутентификации
Следующие подразделы содержат более детальную информацию о методах аутентификации.
20.3.1. Аутентификация trust
Когда указан способ аутентификации trust
, PostgreSQL предполагает, что любой подключающийся к серверу авторизован для доступа к базе данных вне зависимости от указанного имени пользователя базы данных (даже если это имя суперпользователя). Конечно, ограничения, прописанные в столбцах база
и пользователь
, продолжают работать. Этот метод должен применяться только в том случае, когда на уровне операционной системы обеспечена адекватная защита от подключений к серверу.
Аутентификация trust
очень удобна для локальных подключений на однопользовательской рабочей станции. Но сам по себе этот метод обычно не подходит для машин с несколькими пользователями. Однако вы можете использовать trust
даже на многопользовательской машине, если ограничите доступ к файлу Unix-сокета сервера на уровне файловой системы. Для этого установите конфигурационные параметры unix_socket_permissions
(и, возможно, unix_socket_group
) как описано в Разделе 19.3. Либо вы можете установить конфигурационный параметр unix_socket_directories
, чтобы разместить файл сокета в должным образом защищённом каталоге.
Установка разрешений на уровне файловой системы помогает только в случае подключений через Unix-сокеты. На локальные подключения по TCP/IP ограничения файловой системы не влияют. Поэтому, если вы хотите использовать разрешения файловой системы для обеспечения локальной безопасности, уберите строку host ... 127.0.0.1 ...
из pg_hba.conf
или смените метод аутентификации.
Метод аутентификации trust
для подключений по TCP/IP допустим только в случае, если вы доверяете каждому пользователю компьютера, получившему разрешение на подключение к серверу строками файла pg_hba.conf
, указывающими метод trust
. Не стоит использовать trust
для любых подключений по TCP/IP, отличных от localhost (127.0.0.1).
20.3.2. Аутентификация password
Существует несколько методов аутентификации по паролю. Они работают примерно одинаково, но различаются тем, как пароли пользователей хранятся на сервере и как пароль передаётся от клиента по каналу связи.
scram-sha-256
С методом
scram-sha-256
выполняется аутентификация SCRAM-SHA-256, как описано в RFC 7677. Она производится по схеме вызов-ответ, которая предотвращает перехват паролей через недоверенные соединения и поддерживает хранение паролей на сервере в виде криптографического хеша, что считается безопасным.Это наиболее безопасный из существующих на данный момент методов, но он не поддерживается старыми клиентскими библиотеками.
md5
Для метода
md5
реализован менее безопасный механизм вызов-ответ. Он предотвращает перехват паролей и предусматривает хранение паролей на сервере в зашифрованном виде, но не защищает в случае похищения хешей паролей с сервера. Кроме того, алгоритм хеширования MD5 в наши дни уже может не защитить от целенаправленных атак.Метод
md5
несовместим с функциональностью db_user_namespace.Для облегчения перехода от метода
md5
к более новому методу SCRAM, если в качестве метода аутентификации вpg_hba.conf
указанmd5
, но пароль пользователя на сервере зашифрован для SCRAM (см. ниже), автоматически будет производиться аутентификация на базе SCRAM.password
С методом
password
пароль передаётся в открытом виде и поэтому является уязвимым для атак с перехватом трафика. Его следует избегать всегда, если это возможно. Однако, если подключение защищено SSL, методpassword
может быть безопасен. (Хотя аутентификация по сертификату SSL может быть лучшим выбором когда используется SSL).
Пароли баз данных PostgreSQL отделены от паролей пользователей операционной системы. Пароли всех пользователей базы данных хранятся во внутреннем каталоге pg_authid
. Управлять паролями можно, либо используя SQL-команды CREATE USER и ALTER ROLE, например, CREATE USER foo WITH PASSWORD 'secret'
, либо с помощью команды psql \password
. Если пароль для пользователя не задан, вместо него хранится NULL, и пройти аутентификацию по паролю этот пользователь не сможет.
Доступность различных методов аутентификации по паролю зависит от того, как пароли пользователей шифруются на сервере (или, говоря точнее, хешируются). Это определяется параметром конфигурации password_encryption в момент назначения пароля. Если пароль шифруется в режиме scram-sha-256
, его можно будет использовать для методов аутентификации scram-sha-256
и password
(но в последнем случае он будет передаваться открытым текстом). В случае указания метода аутентификации md5
при этом произойдёт автоматический переход к использованию scram-sha-256
, как сказано выше, так что этот вариант тоже будет работать. Если пароль шифруется в режиме md5
, его можно будет использовать только для методов аутентификации md5
и password
(и в последнем случае он так же будет передаваться открытым текстом). (Ранние версии PostgreSQL поддерживали хранение паролей на сервере в открытом виде, но теперь это невозможно.) Чтобы просмотреть хранящиеся в БД хеши паролей, обратитесь к системному каталогу pg_authid
.
Для перевода существующей инсталляции с md5
на scram-sha-256
, после того как все клиентские библиотеки будут обновлены до версий, поддерживающих SCRAM, задайте password_encryption = 'scram-sha-256'
в postgresql.conf
, добейтесь, чтобы все пользователи сменили свои пароли, а затем поменяйте указания метода аутентификации в pg_hba.conf
на scram-sha-256
.
20.3.3. Аутентификация GSSAPI
GSSAPI является протоколом отраслевого стандарта для безопасной авторизации, определённым в RFC 2743. PostgreSQL поддерживает GSSAPI с Kerberos аутентификацией с соответствии с RFC 1964. GSSAPI обеспечивает автоматическую аутентификацию (single sign-on), для систем, которые её поддерживают. Сама по себе аутентификация безопасна, но данные, отсылаемые в ходе подключения к базе данных, не защищены, если не используется SSL.
Поддержка GSSAPI должна быть включена при сборке PostgreSQL; за дополнительными сведениями обратитесь к Главе 16.
При работе с Kerberos GSSAPI использует стандартные учётные записи в формате
. Сервер PostgreSQL примет любого принципала, включённого в используемый сервером файл таблицы ключей, но необходимо проявить осторожность в указании корректных деталей принципала в ходе соединения с клиентом, применяющим параметр подключения servicename
/hostname
@realm
. (См. также Подраздел 33.1.2.) Значение имени сервиса по умолчанию postgres
может быть изменено во время сборки с помощью ./configure --with-krb-srvnam=
whatever
. В большинстве сред изменять данный параметр не требуется. Однако некоторые реализации Kerberos могут потребовать иного имени сервиса, например, Microsoft Active Directory требует, чтобы имя сервиса было набрано заглавными буквами (POSTGRES
).
hostname
здесь — это полное доменное имя компьютера, где работает сервер. Областью субъекта-службы является предпочитаемая область данного компьютера.
Принципалы клиентов могут быть сопоставлены с различными именами пользователей баз данных PostgreSQL в pg_ident.conf
. Например, принципалу pgusername@realm
может быть сопоставлено просто pgusername
. Так же возможно использовать в качестве имени роли в PostgreSQL полное имя принципала username@realm
PostgreSQL также поддерживает возможность убирать область из имени принципала. Эта возможность оставлена для обратной совместимости и использовать её крайне нежелательно, так как при этом оказывается невозможно различить разных пользователей, имеющих одинаковые имена, но приходящих из разных областей. Чтобы включить её, установите для include_realm
значение 0. В простых конфигурациях с одной областью исключение области в сочетании с параметром krb_realm
(который позволяет ограничить область пользователя одним значением, заданным в krb_realm
parameter) будет безопасным, но менее гибким вариантом по сравнению с явным описанием сопоставлений в pg_ident.conf
.
Убедитесь, что файл ключей вашего сервера доступен для чтения (и желательно недоступен для записи) учётной записи сервера PostgreSQL. (См. также Раздел 18.1.) Расположение этого файла ключей указывается параметром krb_server_keyfile. По умолчанию это
(каталог может быть другим, в зависимости от значения sysconfdir
при сборке). Из соображений безопасности рекомендуется использовать отдельный файл keytab для сервера PostgreSQL, а не открывать доступ к общесистемному файлу.
Файл таблицы ключей генерируется программным обеспечением Kerberos; подробнее это описано в документации Kerberos. Следующий пример для MIT-совместимых реализаций Kerberos 5:
kadmin%
ank -randkey postgres/server.my.domain.org
kadmin%
ktadd -k krb5.keytab postgres/server.my.domain.org
При подключении к базе данных убедитесь, что у вас есть разрешение на сопоставление принципала с именем пользователя базы данных. Например, для имени пользователя базы данных fred
, принципал [email protected]
сможет подключиться. Чтобы дать разрешение на подключение принципалу fred/[email protected]
, используйте файл сопоставления имён пользователей, как описано в Разделе 20.2.
Для метода GSSAPI доступны следующие параметры конфигурации:
include_realm
Когда этот параметр равен 0, из принципала аутентифицированного пользователя убирается область, и оставшееся имя проходит сопоставление имён (см. Раздел 20.2). Этот вариант не рекомендуется и поддерживается в основном для обратной совместимости, так как он небезопасен в окружениях с несколькими областями, если только дополнительно не задаётся
krb_realm
. Более предпочтительный вариант — оставить значениеinclude_realm
по умолчанию (1) и задать вpg_ident.conf
явное сопоставление для преобразования имён принципалов в имена пользователей PostgreSQL.map
Разрешает сопоставление имён пользователей системы и пользователей баз данных. За подробностями обратитесь к Разделу 20.2. Для принципала GSSAPI/Kerberos, такого как
(или более редкогоusername/[email protected]
), именем пользователя в сопоставлении будет[email protected]
(илиusername/[email protected]
, соответственно), еслиinclude_realm
не равно 0; в противном случае именем системного пользователя в сопоставлении будетusername
(илиusername/hostbased
).krb_realm
Устанавливает область, с которой будут сверяться имена принципалов пользователей. Если этот параметр задан, подключаться смогут только пользователи из этой области. Если не задан, подключаться смогут пользователи из любой области, в зависимости от установленного сопоставления имён пользователей.
20.3.4. Аутентификация SSPI
SSPI — технология Windows для защищённой аутентификации с единственным входом. PostgreSQL использует SSPI в режиме negotiate
, который применяет Kerberos, когда это возможно, и автоматически возвращается к NTLM в других случаях. Аутентификация SSPI работает только, когда и сервер, и клиент работают на платформе Windows, или, на не-Windows платформах, если доступен GSSAPI.
Если используется аутентификация Kerberos, SSPI работает так же, как GSSAPI; подробнее об этом рассказывается в Подразделе 20.3.3.
Для SSPI доступны следующие параметры конфигурации:
include_realm
Когда этот параметр равен 0, из принципала аутентифицированного пользователя убирается область, и оставшееся имя проходит сопоставление имён (см. Раздел 20.2). Этот вариант не рекомендуется и поддерживается в основном для обратной совместимости, так как он небезопасен в окружениях с несколькими областями, если только дополнительно не задаётся
krb_realm
. Более предпочтительный вариант — оставить значениеinclude_realm
по умолчанию (1) и задать вpg_ident.conf
явное сопоставление для преобразования имён принципалов в имена пользователей PostgreSQL.compat_realm
Если равен 1, для параметра
include_realm
применяется имя домена, совместимое с SAM (также известное как имя NetBIOS). Это вариант по умолчанию. Если он равен 0, для имени принципала Kerberos применяется действительное имя области.Этот параметр можно отключить, только если ваш сервер работает под именем доменного пользователя (в том числе, виртуального пользователя службы на компьютере, включённом в домен) и все клиенты, проходящие проверку подлинности через SSPI, также используют доменные учётные записи; в противном случае аутентификация не будет выполнена.
upn_username
Если этот параметр включён вместе с
compat_realm
, для аутентификации применяется имя Kerberos UPN. Если он отключён (по умолчанию), применяется SAM-совместимое имя пользователя. По умолчанию у новых учётных записей эти два имени совпадают.Заметьте, что libpq использует имя, совместимое с SAM, если имя не задано явно. Если вы применяете libpq или драйвер на его базе, этот параметр следует оставить отключённым, либо явно задавать имя пользователя в строке подключения.
map
Позволяет сопоставить пользователей системы с пользователями баз данных. За подробностями обратитесь к Разделу 20.2. Для принципала SSPI/Kerberos, такого как
[email protected]
(или более редкогоusername/[email protected]
), именем пользователя в сопоставлении будет[email protected]
(илиusername/[email protected]
, соответственно), еслиinclude_realm
не равно 0; в противном случае именем системного пользователя в сопоставлении будетusername
(илиusername/hostbased
).krb_realm
Устанавливает область, с которой будут сверяться имена принципалов пользователей. Если этот параметр задан, подключаться смогут только пользователи из этой области. Если не задан, подключаться смогут пользователи из любой области, в зависимости от установленного сопоставления имён пользователей.
20.3.5. Аутентификация Ident
Метод аутентификации ident работает, получая имя пользователя операционной системы клиента от сервера Ident и используя его в качестве разрешённого имени пользователя базы данных (с возможным сопоставлением имён пользователя). Способ доступен только для подключений по TCP/IP.
Примечание
Когда для локального подключения (не TCP/IP) указан ident, вместо него используется метод аутентификации peer (см. Подраздел 20.3.6).
Для метода ident доступны следующие параметры конфигурации:
map
Позволяет сопоставить имена пользователей системы и базы данных. За подробностями обратитесь к Разделу 20.2.
Протокол «Identification» (Ident) описан в RFC 1413. Практически каждая Unix-подобная операционная система поставляется с сервером Ident, по умолчанию слушающим TCP-порт 113. Базовая функция этого сервера — отвечать на вопросы, вроде «Какой пользователь инициировал подключение, которое идет через твой порт X
и подключается к моему порту Y
?». Поскольку после установления физического подключения PostgreSQL знает и X
, и Y
, он может опрашивать сервер Ident на компьютере клиента и теоретически может определять пользователя операционной системы при каждом подключении.
Недостатком этой процедуры является то, что она зависит от интеграции с клиентом: если клиентская машина не вызывает доверия или скомпрометирована, злоумышленник может запустить любую программу на порту 113 и вернуть любое имя пользователя на свой выбор. Поэтому этот метод аутентификации подходит только для закрытых сетей, где каждая клиентская машина находится под жёстким контролем и где администраторы оп
postgrespro.ru
PostgreSQL : Документация: 9.6: Часть VI. Справочное руководство : Компания Postgres Professional
Статьи этого справочного руководства составлены так, чтобы дать в разумном объёме авторитетную, полную и формальную сводку по соответствующим темам. Дополнительные сведения об использовании PostgreSQL в повествовательной, ознакомительной или показательной форме можно найти в других частях этой книги. Ссылки на них можно найти на страницах этого руководства.
Все эти справочные статьи также публикуются в виде традиционных страниц «man».
Содержание
- I. Команды SQL
- ABORT — прервать текущую транзакцию
- ALTER AGGREGATE — изменить определение агрегатной функции
- ALTER COLLATION — изменить определение правила сортировки
- ALTER CONVERSION — изменить определение перекодировки
- ALTER DATABASE — изменить атрибуты базы данных
- ALTER DEFAULT PRIVILEGES — определить права доступа по умолчанию
- ALTER DOMAIN — изменить определение домена
- ALTER EVENT TRIGGER — изменить определение событийного триггера
- ALTER EXTENSION — изменить определение расширения
- ALTER FOREIGN DATA WRAPPER — изменить определение обёртки сторонних данных
- ALTER FOREIGN TABLE — изменить определение сторонней таблицы
- ALTER FUNCTION — изменить определение функции
- ALTER GROUP — изменить имя роли или членство
- ALTER INDEX — изменить определение индекса
- ALTER LANGUAGE — изменить определение процедурного языка
- ALTER LARGE OBJECT — изменить определение большого объекта
- ALTER MATERIALIZED VIEW — изменить определение материализованного представления
- ALTER OPERATOR — изменить определение оператора
- ALTER OPERATOR CLASS — изменить определение класса операторов
- ALTER OPERATOR FAMILY — изменить определение семейства операторов
- ALTER POLICY — изменить определение политики защиты на уровне строк
- ALTER ROLE — изменить роль в базе данных
- ALTER RULE — изменить определение правила
- ALTER SCHEMA — изменить определение схемы
- ALTER SEQUENCE — изменить определение генератора последовательности
- ALTER SERVER — изменить определение стороннего сервера
- ALTER SYSTEM — изменить параметр конфигурации сервера
- ALTER TABLE — изменить определение таблицы
- ALTER TABLESPACE — изменить определение табличного пространства
- ALTER TEXT SEARCH CONFIGURATION — изменить определение конфигурации текстового поиска
- ALTER TEXT SEARCH DICTIONARY — изменить определение словаря текстового поиска
- ALTER TEXT SEARCH PARSER — изменить определение анализатора текстового поиска
- ALTER TEXT SEARCH TEMPLATE — изменить определение шаблона текстового поиска
- ALTER TRIGGER — изменить определение триггера
- ALTER TYPE — изменить определение типа
- ALTER USER — изменить роль в базе данных
- ALTER USER MAPPING — изменить определение сопоставления пользователей
- ALTER VIEW — изменить определение представления
- ANALYZE — собрать статистику по базе данных
- BEGIN — начать блок транзакции
- CHECKPOINT — записать контрольную точку в журнал транзакций
- CLOSE — закрыть курсор
- CLUSTER — кластеризовать таблицу согласно индексу
- COMMENT — задать или изменить комментарий объекта
- COMMIT — зафиксировать текущую транзакцию
- COMMIT PREPARED — зафиксировать транзакцию, которая ранее была подготовлена для двухфазной фиксации
- COPY — копировать данные между файлом и таблицей
- CREATE ACCESS METHOD — создать новый метод доступа
- CREATE AGGREGATE — создать агрегатную функцию
- CREATE CAST — создать приведение
- CREATE COLLATION — создать правило сортировки
- CREATE CONVERSION — создать перекодировку
- CREATE DATABASE — создать базу данных
- CREATE DOMAIN — создать домен
- CREATE EVENT TRIGGER — создать событийный триггер
- CREATE EXTENSION — установить расширение
- CREATE FOREIGN DATA WRAPPER — создать новую обёртку сторонних данных
- CREATE FOREIGN TABLE — создать стороннюю таблицу
- CREATE FUNCTION — создать функцию
- CREATE GROUP — создать роль в базе данных
- CREATE INDEX — создать индекс
- CREATE LANGUAGE — создать процедурный язык
- CREATE MATERIALIZED VIEW — создать материализованное представление
- CREATE OPERATOR — создать оператор
- CREATE OPERATOR CLASS — создать класс операторов
- CREATE OPERATOR FAMILY — создать семейство операторов
- CREATE POLICY — создать новую политику защиты на уровне строк для таблицы
- CREATE ROLE — создать роль в базе данных
- CREATE RULE — создать правило перезаписи
- CREATE SCHEMA — создать схему
- CREATE SEQUENCE — создать генератор последовательности
- CREATE SERVER — создать сторонний сервер
- CREATE TABLE — создать таблицу
- CREATE TABLE AS — создать таблицу из результатов запроса
- CREATE TABLESPACE — создать табличное пространство
- CREATE TEXT SEARCH CONFIGURATION — создать конфигурацию текстового поиска
- CREATE TEXT SEARCH DICTIONARY — создать словарь текстового поиска
- CREATE TEXT SEARCH PARSER — создать анализатор текстового поиска
- CREATE TEXT SEARCH TEMPLATE — создать шаблон текстового поиска
- CREATE TRANSFORM — создать трансформацию
- CREATE TRIGGER — создать триггер
- CREATE TYPE — создать новый тип данных
- CREATE USER — создать роль в базе данных
- CREATE USER MAPPING — создать сопоставление пользователя для стороннего сервера
- CREATE VIEW — создать представление
- DEALLOCATE — освободить подготовленный оператор
- DECLARE — определить курсор
- DELETE — удалить записи таблицы
- DISCARD — очистить состояние сеанса
- DO — выполнить анонимный блок кода
- DROP ACCESS METHOD — удалить метод доступа
- DROP AGGREGATE — удалить агрегатную функцию
- DROP CAST — удалить приведение типа
- DROP COLLATION — удалить правило сортировки
- DROP CONVERSION — удалить преобразование
- DROP DATABASE — удалить базу данных
- DROP DOMAIN — удалить домен
- DROP EVENT TRIGGER — удалить событийный триггер
- DROP EXTENSION — удалить расширение
- DROP FOREIGN DATA WRAPPER — удалить обёртку сторонних данных
- DROP FOREIGN TABLE — удалить стороннюю таблицу
- DROP FUNCTION — удалить функцию
- DROP GROUP — удалить роль в базе данных
- DROP INDEX — удалить индекс
- DROP LANGUAGE — удалить процедурный язык
- DROP MATERIALIZED VIEW — удалить материализованное представление
- DROP OPERATOR — удалить оператор
- DROP OPERATOR CLASS — удалить класс операторов
- DROP OPERATOR FAMILY — удалить семейство операторов
- DROP OWNED — удалить объекты базы данных, принадлежащие роли
- DROP POLICY — удалить политику защиты на уровне строк для таблицы
- DROP ROLE — удалить роль в базе данных
- DROP RULE — удалить правило перезаписи
- DROP SCHEMA — удалить схему
- DROP SEQUENCE — удалить последовательность
- DROP SERVER — удалить описание стороннего сервера
- DROP TABLE — удалить таблицу
- DROP TABLESPACE — удалить табличное пространство
- DROP TEXT SEARCH CONFIGURATION — удалить конфигурацию текстового поиска
- DROP TEXT SEARCH DICTIONARY — удалить словарь текстового поиска
- DROP TEXT SEARCH PARSER — удалить анализатор текстового поиска
- DROP TEXT SEARCH TEMPLATE — удалить шаблон текстового поиска
- DROP TRANSFORM — удалить трансформацию
- DROP TRIGGER — удалить триггер
- DROP TYPE — удалить тип данных
- DROP USER — удалить роль в базе данных
- DROP USER MAPPING — удалить сопоставление пользователя для стороннего сервера
- DROP VIEW — удалить представление
- END — зафиксировать текущую транзакцию
- EXECUTE — выполнить подготовленный оператор
- EXPLAIN — показать план выполнения оператора
- FETCH — получить результат запроса через курсор
- GRANT — определить права доступа
- IMPORT FOREIGN SCHEMA — импортировать определения таблиц со стороннего сервера
- INSERT — добавить строки в таблицу
- LISTEN — ожидать уведомления
- LOAD — загрузить файл разделяемой библиотеки
- LOCK — заблокировать таблицу
- MOVE — переместить курсор
- NOTIFY — сгенерировать уведомление
- PREPARE — подготовить оператор к выполнению
- PREPARE TRANSACTION — подготовить текущую транзакцию для двухфазной фиксации
- REASSIGN OWNED — сменить владельца объектов базы данных, принадлежащих заданной роли
- REFRESH MATERIALIZED VIEW — заменить содержимое материализованного представления
- REINDEX — перестроить индексы
- RELEASE SAVEPOINT — высвободить ранее определённую точку сохранения
- RESET — восстановить значение по умолчанию заданного параметра времени выполнения
- REVOKE — отозвать права доступа
- ROLLBACK — прервать текущую транзакцию
- ROLLBACK PREPARED — отменить транзакцию, которая ранее была подготовлена для двухфазной фиксации
- ROLLBACK TO SAVEPOINT — откатиться к точке сохранения
- SAVEPOINT — определить новую точку сохранения в текущей транзакции
- SECURITY LABEL — определить или изменить метку безопасности, применённую к объекту
- SELECT — получить строки из таблицы или представления
- SELECT INTO — создать таблицу из результатов запроса
- SET — изменить параметр времени выполнения
- SET CONSTRAINTS — установить время проверки ограничений для текущей транзакции
- SET ROLE — установить идентификатор текущего пользователя в рамках сеанса
- SET SESSION AUTHORIZATION — установить идентификатор пользователя сеанса и идентификатор текущего пользователя в рамках сеанса
- SET TRANSACTION — установить характеристики текущей транзакции
- SHOW — показать значение параметра времени выполнения
- START TRANSACTION — начать блок транзакции
- TRUNCATE — опустошить таблицу или набор таблиц
- UNLISTEN — прекратить ожидание уведомления
- UPDATE — изменить строки таблицы
- VACUUM — провести сборку мусора и, возможно, проанализировать базу данных
- VALUES — вычислить набор строк
- ALTER AGGREGATE — изменить определение агрегатной функции
- ABORT — прервать текущую транзакцию
- II. Клиентские приложения PostgreSQL
- clusterdb — кластеризовать базу данных PostgreS
postgrespro.ru
PostgreSQL : Документация: 9.6: psql : Компания Postgres Professional
-a
--echo-all
Отправляет на стандартный вывод все непустые входные строки по мере их чтения. (Это не относится к строкам, считанным в интерактивном режиме.) Эквивалентно установке переменной ECHO
в значение all
.
-A
--no-align
Переключение на невыровненный режим вывода. (По умолчанию, наоборот, используется выровненный режим вывода.)
-b
--echo-errors
Посылает все команды SQL с ошибками на стандартный вывод. Равнозначно присвоению переменной ECHO
значения errors
.
-c команда
--command=команда
Передаёт psql команду
для выполнения. Этот ключ можно повторять и комбинировать в любом порядке с ключом -f
. Когда указывается -c
или -f
, psql не читает команды со стандартного ввода; вместо этого она завершается сразу после обработки всех ключей -c
и -f
по порядку.
команда
должна быть либо командной строкой, которая полностью интерпретируется сервером (т. е. не использует специфические функции psql), либо одиночной командой с обратной косой чертой. Таким образом, используя -c
, нельзя смешивать метакоманды SQL и psql. Но это можно сделать, передав несколько ключей -c
или передав строку в psql через канал:psql -c '\x' -c 'SELECT * FROM foo;'
или
echo '\x \\ SELECT * FROM foo;' | psql
(\\
— разделитель метакоманд.)
Каждая строка SQL-команд, заданная ключом -c
, передаётся на сервер как один запрос. Поэтому сервер выполняет её в одной транзакции, даже когда эта строка содержит несколько команд SQL, если только в ней не содержатся явные команды BEGIN
/COMMIT
, разделяющие её на несколько транзакций. Кроме того, psql печатает результат только последней SQL-команды в строке. Это отличается от поведения, когда та же строка считывается из файла или подаётся на стандартный ввод psql, так как в последнем случае psql передаёт каждую команду SQL отдельно.
Из-за такого поведения указание нескольких команд в одной строке -c
часто приводит к неожиданным результатам. Поэтому лучше использовать несколько ключей -c
или подавать команды на стандартный ввод psql, применяя либо echo, как показано выше, либо создаваемый прямо в оболочке документ, например:
psql <<EOF \x SELECT * FROM foo; EOF
-d имя_бд
--dbname=имя_бд
Указывает имя базы данных для подключения. Эквивалентно указанию dbname
в качестве первого аргумента, не являющегося параметром в командной строке.
Если этот параметр содержит знак =
или начинается с допустимого префикса URI (postgresql://
или postgres://
), он воспринимается как строка conninfo
. За дополнительными сведениями обратитесь к Подразделу 32.1.1.
-e
--echo-queries
Посылает все команды SQL, отправленные на сервер, ещё и на стандартный вывод. Эквивалентно установке переменной ECHO
в значение queries
.
-E
--echo-hidden
Отображает фактические запросы, генерируемые \d
и другими командами, начинающимися с \. Это можно использовать для изучения внутренних операций в psql. Эквивалентно установке переменной ECHO_HIDDEN
значения on
.
-f имя_файла
--file=имя_файла
Читает команды из файла имя_файла
, а не из стандартного ввода. Этот ключ можно повторять и комбинировать в любом порядке с ключом -c
. Если указан ключ -c
или -f
-c
и -f
по очереди. Не считая этого, данный ключ по большому счёту равнозначен метакоманде \i
.Если имя_файла
задано символом -
(минус), считывается стандартный ввод до признака конца файла или до метакоманды \q
. Это позволяет перемежать интерактивный ввод с вводом из файлов. Однако заметьте, что Readline в этом случае не применяется (так же, как и с ключом -n
).
Использование этого параметра немного отличается от psql <
. В основном, оба варианта будут делать то, что вы ожидаете, но с filename
-f
доступны некоторые полезные свойства, такие как сообщения об ошибках с номерами строк. Также есть небольшая вероятность, что запуск в таком режиме будет быстрее. С другой стороны, вариант с перенаправлением ввода из командного интерпретатора (в теории) гарантирует получение точно такого же вывода, какой вы получили бы, если бы ввели всё вручную.
-F separator
--field-separator=separator
Использование separator
в качестве разделителя полей при невыровненном режиме вывода. Эквивалентно \pset fieldsep
или \f
.
-h компьютер
--host=компьютер
Указывает имя компьютера, на котором работает сервер. Если значение начинается с косой черты, оно определяет каталог Unix-сокета.
-H
--html
Включает табличный вывод в формате HTML. Эквивалентно \pset format html
или команде \H
.
-l
--list
Выводит список всех доступных баз данных и завершает работу. Другие параметры, не связанные с соединением, игнорируются. Это похоже на метакоманду \list
.
-L имя_файла
--log-file=имя_файла
В дополнение к обычному выводу, записывает вывод результатов всех запросов в файл filename
.
-n
--no-readline
Отключает использование Readline для редактирования командной строки и использования истории команд. Может быть полезно для выключения расширенных действий клавиши табуляции при вырезании и вставке.
-o имя_файла
--output=имя_файла
Записывает вывод результатов всех запросов в файл filename
. Эквивалентно команде \o
.
-p порт
--port=порт
Указывает TCP-порт или расширение файла локального Unix-сокета, через который сервер принимает подключения. Значение по умолчанию определяется переменной среды PGPORT
, если она установлена, либо числом, заданным при компиляции, обычно 5432.
-P assignment
--pset=assignment
Задаёт параметры печати, в стиле команды \pset
. Обратите внимание, что имя параметра и значение разделяются знаком равенства, а не пробела. Например, чтобы установить формат вывода в LaTeX, нужно написать -P format=latex
.
-q
--quiet
Указывает, что psql должен работать без вывода дополнительных сообщений. По умолчанию, выводятся приветствия и различные информационные сообщения. Этого не произойдёт с использованием данного параметра. Полезно вместе с параметром -c
. Этот же эффект можно получить, установив для переменной QUIET
значение on
.
-R separator
--record-separator=separator
Использует separator
как разделитель записей при невыровненном режиме вывода. Эквивалентно команде \pset recordsep
.
-s
--single-step
Запуск в пошаговом режиме. Это означает, что пользователь будет подтверждать выполнение каждой команды, отправляемой на сервер, с возможностью отменить выполнение. Используется для отладки скриптов.
-S
--single-line
Запуск в однострочном режиме, при котором символ новой строки завершает SQL-команды, также как это делает точка с запятой.
Примечание
Этот режим реализован для тех, кому он нужен, но это не обязательно означает, что и вам нужно его использовать. В частности, если смешивать в одной строке команды SQL и метакоманды, порядок их выполнения может быть не всегда понятен для неопытного пользователя.
-t
--tuples-only
Отключает вывод имён столбцов и результирующей строки с количеством выбранных записей. Эквивалентно команде \t
.
-T table_options
--table-attr=table_options
Задаёт атрибуты, которые будут вставлены в тег HTML table
. За подробностями обратитесь к описанию \pset
.
-U имя_пользователя
--username=имя_пользователя
Подключение к базе данных под пользователем username
вместо используемого по умолчанию. (Разумеется, при наличии прав на это.)
-v assignment
--set=assignment
--variable=assignment
Выполняет присвоение значения переменной, как метакоманда \set
. Обратите внимание на то, что необходимо разделить имя переменной и значение (при наличии) знаком равенства в командной строке. Чтобы сбросить переменную, опустите знак равенства. Чтобы установить пустое значение, поставьте знак равенства, но опустите значение. Присваивания выполняются на очень ранней стадии запуска, поэтому если переменные зарезервированы для внутренних целей, то позже они могут быть перезаписаны.
-V
--version
Выводит версию psql и завершает работу.
-w
--no-password
Не выдавать запрос на ввод пароля. Если сервер требует аутентификацию по паролю и пароль не доступен с помощью других средств, таких как файл .pgpass
, попытка соединения не удастся. Этот параметр может быть полезен в пакетных заданиях и скриптах, где нет пользователя, который вводит пароль.
Обратите внимание, что этот параметр действует на протяжении всей сессии и, таким образом, влияет на метакоманду \connect
, также как и на первую попытку соединения.
-W
--password
Принудительно запрашивать пароль перед подключением к базе данных.
Это несущественный параметр, так как psql запрашивает пароль автоматически, если сервер проверяет подлинность по паролю. Однако, чтобы понять это, psql лишний раз подключается к серверу. Поэтому иногда имеет смысл ввести -W
, чтобы исключить эту ненужную попытку подключения.
Обратите внимание, что этот параметр действует на протяжении всей сессии и, таким образом, влияет на метакоманду \connect
, также как и на первую попытку соединения.
-x
--expanded
Включает режим развёрнутого вывода таблицы. Эквивалентно команде \x
.
-X,
--no-psqlrc
Не читать стартовые файлы (ни общесистемный файл psqlrc
, ни пользовательский файл ~/.psqlrc
).
-z
--field-separator-zero
Установить нулевой байт в качестве разделителя полей для невыровненного режима вывода.
-0
--record-separator-zero
Установить нулевой байт в качестве разделителя записей для невыровненного режима вывода. Это полезно при взаимодействии с другими программами, например, с xargs -0
.
-1
--single-transaction
Этот параметр может применяться только в сочетании с одним или несколькими параметрами -c
и/или -f
. С ним psql выполняет команду BEGIN
перед обработкой первого такого параметра и COMMIT
после последнего, заворачивая таким образом все команды в одну транзакцию. Это гарантирует, что либо все команды завершатся успешно, либо никакие изменения не сохранятся.
Если в самих этих командах содержатся операторы BEGIN
, COMMIT
или ROLLBACK
, этот параметр не даст желаемого эффекта. Кроме того, если какая-либо отдельная команда не может выполняться внутри блока транзакции, с этим параметром вся транзакция прервётся с ошибкой.
-?
--help[=тема
]
Показать справку по psql и завершиться. Необязательный параметр тема
(по умолчанию options
) выбирает описание интересующей части psql: commands
описывает команды psql с обратной косой чертой; options
описывает параметры командной строки, которые можно передать psql; а variables
выдаёт справку по переменным конфигурации psql.
postgrespro.ru
PostgreSQL : Документация: 9.6: 41.2. Структура PL/pgSQL : Компания Postgres Professional
41.2. Структура PL/pgSQL
Функции, написанные на PL/pgSQL, определяются на сервере командами CREATE FUNCTION. Такая команда обычно выглядит, например, так:
CREATE FUNCTION somefunc(integer, text) RETURNS integer
AS 'тело функции
'
LANGUAGE plpgsql;
Если рассматривать CREATE FUNCTION
, тело функции представляет собой просто текстовую строку. Часто для написания тела функции удобнее заключать эту строку в доллары (см. Подраздел 4.1.2.4), а не в обычные апострофы. Если не применять заключение в доллары, все апострофы или обратные косые черты в теле функции придётся экранировать, дублируя их. Почти во всех примерах в этой главе тело функций заключается в доллары.
PL/pgSQL это блочно-структурированный язык. Текст тела функции должен быть блоком. Структура блока:
[ <<метка
>> ] [ DECLAREобъявления
] BEGINоператоры
END [метка
];
Каждое объявление и каждый оператор в блоке должны завершаться символом «;»(точка с запятой). Блок, вложенный в другой блок, должен иметь точку с запятой после END
, как показано выше. Однако финальный END
, завершающий тело функции, не требует точки с запятой.
Подсказка
Распространённой ошибкой является добавление точки с запятой сразу после BEGIN
. Это неправильно и приведёт к синтаксической ошибке.
Метка
требуется только тогда, когда нужно идентифицировать блок в операторе EXIT
, или дополнить имена переменных, объявленных в этом блоке. Если метка указана после END
, то она должна совпадать с меткой в начале блока.
Ключевые слова не чувствительны к регистру символов. Как и в обычных SQL-командах, идентификаторы неявно преобразуются к нижнему регистру, если они не взяты в двойные кавычки.
Комментарии в PL/pgSQL коде работают так же, как и в обычном SQL. Двойное тире (--
) начинает комментарий, который завершается в конце строки. Блочный комментарий начинается с /*
и завершается */
. Блочные комментарии могут быть вложенными.
Любой оператор в выполняемой секции блока может быть вложенным блоком. Вложенные блоки используются для логической группировки нескольких операторов или локализации области действия переменных для группы операторов. Во время выполнения вложенного блока переменные, объявленные в нём, скрывают переменные внешних блоков с такими же именами. Чтобы получить доступ к внешним переменным, нужно дополнить их имена меткой блока. Например:
CREATE FUNCTION somefunc() RETURNS integer AS $$ << outerblock >> DECLARE quantity integer := 30; BEGIN RAISE NOTICE 'Сейчас quantity = %', quantity; -- Выводится 30 quantity := 50; -- -- Вложенный блок -- DECLARE quantity integer := 80; BEGIN RAISE NOTICE 'Сейчас quantity = %', quantity; -- Выводится 80 RAISE NOTICE 'Во внешнем блоке quantity = %', outerblock.quantity; -- Выводится 50 END; RAISE NOTICE 'Сейчас quantity = %', quantity; -- Выводится 50 RETURN quantity; END; $$ LANGUAGE plpgsql;
Примечание
Существует скрытый «внешний блок», окружающий тело каждой функции на PL/pgSQL. Этот блок содержит объявления параметров функции (если они есть), а также некоторые специальные переменные, такие как FOUND
(см. Подраздел 41.5.5). Этот блок имеет метку, совпадающую с именем функции, таким образом, параметры и специальные переменные могут быть дополнены именем функции.
Важно не путать использование BEGIN
/END
для группировки операторов в PL/pgSQL с одноимёнными SQL-командами для управления транзакциями. BEGIN
/END
в PL/pgSQL служат только для группировки предложений; они не начинают и не заканчивают транзакции. Функции и триггерные процедуры всегда выполняются в рамках транзакции, начатой во внешнем запросе — они не могут начать или завершить эту транзакцию, так как у них внутри нет контекста для выполнения таких действий. Однако блок содержащий секцию EXCEPTION
создаёт вложенную транзакцию, которая может быть отменена, не затрагивая внешней транзакции. Подробнее это описано в Подразделе 41.6.6.
postgrespro.ru
PostgreSQL : Документация: 9.5: J.3. Сборка документации : Компания Postgres Professional
J.3. Сборка документации
Завершив все подготовительные действия, перейдите в каталог doc/src/sgml
и запустите одну из команд сборки, описанных в следующих подразделах. (Помните, что для сборки нужно использовать GNU make.)
Чтобы собрать HTML-версию документации:
doc/src/sgml$
make html
Эта цель сборки также выбирается по умолчанию. Результат помещается в подкаталог html
.
Чтобы был сформирован алфавитный указатель, во время сборки требуется выполнить несколько проходов. Если этот указатель вам не нужен, вы просто хотите проверить результат, используйте режим draft
:
doc/src/sgml$
make draft
Чтобы получить документацию в виде одной HTML-страницы, выполните:
doc/src/sgml$
make postgres.html
J.3.2. Страницы man
Для преобразования страниц DocBook refentry
в формат *roff, подходящий для страниц man, мы используем стили DocBook XSL. Страницы man распространяются в архиве tar, подобно HTML-версии. Чтобы создать страницы man, выполните:
cd doc/src/sgml make man
J.3.3. Получение печатной версии с использованием JadeTeX
Если вы хотите получить печатную версию документации, используя JadeTex, вы можете воспользоваться одной из следующих команд:
Чтобы получить PostScript через DVI для формата A4, выполните:
doc/src/sgml$
make postgres-A4.ps
Для формата «U.S. Letter» выполните:
doc/src/sgml$
make postgres-US.ps
Чтобы получить PDF:
doc/src/sgml$
make postgres-A4.pdf
или:
doc/src/sgml$
make postgres-US.pdf
(Разумеется, вы можете получить PDF и из PostScript, но если сгенерировать PDF напрямую, полученный файл будет содержать гиперссылки и другие расширенные особенности.)
Если вы намерены использовать JadeTeX для сборки документации PostgreSQL, вам, вероятно, потребуется увеличить некоторые внутренние параметры TeX. Их можно задать в файле texmf.cnf
. На момент написания этого описания работали следующие параметры:
hash_extra.jadetex = 200000 hash_extra.pdfjadetex = 200000 pool_size.jadetex = 2000000 pool_size.pdfjadetex = 2000000 string_vacancies.jadetex = 150000 string_vacancies.pdfjadetex = 150000 max_strings.jadetex = 300000 max_strings.pdfjadetex = 300000 save_size.jadetex = 15000 save_size.pdfjadetex = 15000
J.3.4. Переполнение текста
В некоторых местах текст документации оказывается слишком широким для предопределённых границ, и, в особых случаях, не умещается на странице. В частности, это наблюдается с широкими таблицами или текстом, не допускающим переносы. Сталкиваясь с такой ситуацией, TeX выводит сообщения «Overfull hbox» (Переполнение горизонтальной рамки) в файл журнала, например, postgres-US.log
или postgres-A4.log
. С учётом того, что дюйм составляют 72 точки, всё, что выходит за границу больше чем на 72 точки, скорее всего не поместится на печатаемой странице (при размере поля один дюйм). Чтобы найти в SGML текст, выходящий за границы, определите номер страницы, указанный над сообщением о переполнении, например: [50 ###]
(стр. 50), и посмотрите на следующую страницу (в данном случае, стр. 51) в PDF. Увидев, какой текст на ней выходит за границы, внесите требуемые коррективы в SGML.
J.3.5. Получение печатной версии из RTF
Вы также можете получить печатную версию документации PostgreSQL, преобразовав её в формат RTF, который позволяет откорректировать форматирование в офисном пакете. В зависимости от возможностей конкретного текстового редактора, затем документацию можно будет преобразовать в PostScript или PDF. Ниже описывается, как это можно проделать с применением Applixware.
Примечание
Судя по всему, текущие версии документации PostgreSQL провоцируют ошибку или превышают ограничения размера, существующие в OpenJade. Если у вас процесс сборки RTF «зависает» на долгое время, а размер выводимого файла остаётся нулевым, возможно, вы столкнулись именно с этой проблемой. (Но учтите, что обычная сборка занимает от 5 до 10 минут, так что не прерывайте процесс слишком быстро.)
Очистка RTF в Applixware
OpenJade опускает указание стиля по умолчанию для основного текста. В прошлом, пока это не было обнаружено, генерация оглавления документации выполнялась очень долго. Однако, благодаря помощи разработчиков Applixware, мы смогли диагностировать эту проблему и найти обходное решение.
Получите RTF-версию документации, введя:
doc/src/sgml$
make postgres.rtf
Исправьте файл RTF, чтобы в нём корректно указывались все стили, в частности, стиль по умолчанию. Если документ содержит разделы
refentry
, нужно также заменить указания форматирования, связывающие предыдущий абзац с текущим, на указания, связывающие текущий абзац со следующим. Для внесения этих корректив предоставляется утилитаfixrtf
(она находится вdoc/src/sgml
):doc/src/sgml$
./fixrtf --refentry postgres.rtf
Этот скрипт добавляет в документ
{\s0 Normal;}
в качестве нулевого стиля. По утверждению разработчиков Applixware, стандарт RTF не должен допускать добавления неявного нулевого стиля, хотя Microsoft Word обрабатывает это указание. Для исправления разделовrefentry
этот скрипт заменяет теги\keepn
на\keep
.Создайте новый документ в Applixware Words, а затем импортируйте в него файл RTF.
Создайте оглавление с помощью Applixware.
Выделите строки существующего оглавления, от первого символа первой строки до последнего символа последней строки.
Постройте новое оглавление, выбрав в меню → → ( → → ). Выберите первые три уровня заголовков для включения в оглавление. В результате строки оглавления, импортированные из RTF, будут заменены оглавлением, созданным в Applixware.
Поправьте форматирование оглавления, выбрав пункт меню → ( → ), и определив следующие значения отступов (
First
(Первый) иLeft
(Слева)) для каждого из трёх стилей оглавления:Стиль Первый отступ (в дюймах) Отступ слева (в дюймах) TOC-Heading 1
0.4
0.4
TOC-Heading 2
0.8
0.8
TOC-Heading 3
1.2
1.2
Проработайте форматирование документа:
Замените выравненные по правому краю номера страниц в части оглавления Примеры и Рисунки правильными значениями. Это должно занять всего несколько минут.
Удалите из документа раздел алфавитного указателя, если он пуст.
Сгенерируйте заново и скорректируйте оглавление.
Выделите поле оглавления.
Выберите в меню → → ( → → ).
Отделите оглавление, выбрав в меню → → ( → → ).
Удалите первую строку в оглавлении, которая указывает на само оглавление.
Сохраните документ в специальном формате Applixware Words, чтобы в него можно было легко внести последние правки.
«Напечатайте» документ в файл формата PostScript.
J.3.6. Простые текстовые файлы
Инструкции по установке также распространяются в виде обычного текста, на случай, если они понадобятся в ситуации, когда под рукой не окажется средств просмотра более удобного формата. Файл INSTALL
соответствует Главе 15, с небольшими изменениями, внесёнными с учётом другого контекста. Чтобы пересоздать этот файл, перейдите в каталог doc/src/sgml
и введите make INSTALL
.
В прошлом примечания к выпуску и инструкции по регрессионному тестированию также распространялись в виде простых текстовых файлов, но эта практика была прекращена.
J.3.7. Проверка синтаксиса
Сборка всей документации может занять много времени. Но если нужно проверить только синтаксис файлов документации, это можно сделать всего за несколько секунд:
doc/src/sgml$
make check
postgrespro.ru
PostgreSQL : Документация: 10: 2.5. Выполнение запроса : Компания Postgres Professional
2.5. Выполнение запроса
Чтобы получить данные из таблицы, нужно выполнить запрос. Для этого предназначен SQL-оператор SELECT
. Он состоит из нескольких частей: выборки (в которой перечисляются столбцы, которые должны быть получены), списка таблиц (в нём перечисляются таблицы, из которых будут получены данные) и необязательного условия (определяющего ограничения). Например, чтобы получить все строки таблицы weather
, введите:
SELECT * FROM weather;
Здесь *
— это краткое обозначение «всех столбцов». Таким образом, это равносильно записи:
SELECT city, temp_lo, temp_hi, prcp, date FROM weather;
В результате должно получиться:
city | temp_lo | temp_hi | prcp | date ---------------+---------+---------+------+------------ San Francisco | 46 | 50 | 0.25 | 1994-11-27 San Francisco | 43 | 57 | 0 | 1994-11-29 Hayward | 37 | 54 | | 1994-11-29 (3 rows)
В списке выборки вы можете писать не только ссылки на столбцы, но и выражения. Например, вы можете написать:
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;
И получить в результате:
city | temp_avg | date ---------------+----------+------------ San Francisco | 48 | 1994-11-27 San Francisco | 50 | 1994-11-29 Hayward | 45 | 1994-11-29 (3 rows)
Обратите внимание, как предложение AS
позволяет переименовать выходной столбец. (Само слово AS
можно опускать.)
Запрос можно дополнить «условием», добавив предложение WHERE
, ограничивающее множество возвращаемых строк. В предложении WHERE
указывается логическое выражение (проверка истинности), которое служит фильтром строк: в результате оказываются только те строки, для которых это выражение истинно. В этом выражении могут присутствовать обычные логические операторы (AND
, OR
и NOT
). Например, следующий запрос покажет, какая погода была в Сан-Франциско в дождливые дни:
SELECT * FROM weather WHERE city = 'San Francisco' AND prcp > 0.0;
Результат:
city | temp_lo | temp_hi | prcp | date ---------------+---------+---------+------+------------ San Francisco | 46 | 50 | 0.25 | 1994-11-27 (1 row)
Вы можете получить результаты запроса в определённом порядке:
SELECT * FROM weather ORDER BY city;
city | temp_lo | temp_hi | prcp | date ---------------+---------+---------+------+------------ Hayward | 37 | 54 | | 1994-11-29 San Francisco | 43 | 57 | 0 | 1994-11-29 San Francisco | 46 | 50 | 0.25 | 1994-11-27
В этом примере порядок сортировки определён не полностью, поэтому вы можете получить строки Сан-Франциско в любом порядке. Но вы всегда получите результат, показанный выше, если напишете:
SELECT * FROM weather ORDER BY city, temp_lo;
Если требуется, вы можете убрать дублирующиеся строки из результата запроса:
SELECT DISTINCT city FROM weather;
city --------------- Hayward San Francisco (2 rows)
И здесь порядок строк также может варьироваться. Чтобы получать неизменные результаты, соедините предложения DISTINCT
и ORDER BY
:
SELECT DISTINCT city FROM weather ORDER BY city;
postgrespro.ru