Уроки по Sql

Документация postgresql – PostgreSQL : Документация: 10: 37.16. Инфраструктура сборки расширений : Компания Postgres Professional

Содержание

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 — вычислить набор строк
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 — выгр

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 использует стандартные учётные записи в формате servicename/hostname@realm. Сервер PostgreSQL примет любого принципала, включённого в используемый сервером файл таблицы ключей, но необходимо проявить осторожность в указании корректных деталей принципала в ходе соединения с клиентом, применяющим параметр подключения

krbsrvname. (См. также Подраздел 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. По умолчанию это

/usr/local/pgsql/etc/krb5.keytab (каталог может быть другим, в зависимости от значения 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, такого как

[email protected] (или более редкого 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 — вычислить набор строк
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

, программа psql не читает команды со стандартного ввода; вместо этого она завершается после обработки всех ключей -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, мы смогли диагностировать эту проблему и найти обходное решение.

  1. Получите RTF-версию документации, введя:

    doc/src/sgml$ make postgres.rtf
    
  2. Исправьте файл RTF, чтобы в нём корректно указывались все стили, в частности, стиль по умолчанию. Если документ содержит разделы refentry, нужно также заменить указания форматирования, связывающие предыдущий абзац с текущим, на указания, связывающие текущий абзац со следующим. Для внесения этих корректив предоставляется утилита fixrtf (она находится в doc/src/sgml):

    doc/src/sgml$ ./fixrtf --refentry postgres.rtf
    

    Этот скрипт добавляет в документ {\s0 Normal;} в качестве нулевого стиля. По утверждению разработчиков Applixware, стандарт RTF не должен допускать добавления неявного нулевого стиля, хотя Microsoft Word обрабатывает это указание. Для исправления разделов refentry этот скрипт заменяет теги \keepn на \keep.

  3. Создайте новый документ в Applixware Words, а затем импортируйте в него файл RTF.

  4. Создайте оглавление с помощью Applixware.

    1. Выделите строки существующего оглавления, от первого символа первой строки до последнего символа последней строки.

    2. Постройте новое оглавление, выбрав в меню → → ( → → ). Выберите первые три уровня заголовков для включения в оглавление. В результате строки оглавления, импортированные из RTF, будут заменены оглавлением, созданным в Applixware.

    3. Поправьте форматирование оглавления, выбрав пункт меню → ( → ), и определив следующие значения отступов (First (Первый) и Left (Слева)) для каждого из трёх стилей оглавления:

      СтильПервый отступ (в дюймах)Отступ слева (в дюймах)
      TOC-Heading 10.40.4
      TOC-Heading 20.80.8
      TOC-Heading 31.21.2
  5. Проработайте форматирование документа:

  6. Замените выравненные по правому краю номера страниц в части оглавления Примеры и Рисунки правильными значениями. Это должно занять всего несколько минут.

  7. Удалите из документа раздел алфавитного указателя, если он пуст.

  8. Сгенерируйте заново и скорректируйте оглавление.

    1. Выделите поле оглавления.

    2. Выберите в меню → → ( → → ).

    3. Отделите оглавление, выбрав в меню → → ( → → ).

    4. Удалите первую строку в оглавлении, которая указывает на само оглавление.

  9. Сохраните документ в специальном формате Applixware Words, чтобы в него можно было легко внести последние правки.

  10. «Напечатайте» документ в файл формата 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

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

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