Понимание планов выполнения
Теперь, когда вы нашли несколько медленных запросов, самое время начать веселье.
EXPLAIN
Команда EXPLAIN, безусловно, обязательна при настройке запросов. Он говорит вам, что на самом деле происходит. Чтобы использовать его, просто добавьте к запросу EXPLAIN и запустите его. PostgreSQL покажет вам план выполнения, который он использовал.
При использовании EXPLAIN для настройки, я рекомендую всегда использовать опцию ANALYZE (EXPLAIN ANALYZE), поскольку она дает вам более точные результаты. Опция ANALYZE фактически выполняет оператор (а не просто оценивает его), а затем объясняет его.
Давайте окунемся и начнем понимать вывод EXPLAIN. Вот пример:
Узлы
Первое, что нужно понять, это то, что каждый блок с отступом с предшествующим «->» (вместе с верхней строкой) называется узлом. Узел — это логическая единица работы («шаг», если хотите) со связанной стоимостью и временем выполнения. Стоимость и время, представленные на каждом узле, являются совокупными и сводят все дочерние узлы. Это означает, что самая верхняя строка (узел) показывает совокупную стоимость и фактическое время для всего оператора
Это важно, потому что вы можете легко детализировать для определения, какие узлы являются узким местом.
Стоимость
Первое число — это начальные затраты (затраты на получение первой записи), а второе число — это затраты на обработку всего узла (общие затраты от начала до конца).
Фактически, это стоимость, которую, по оценкам PostgreSQL, придется выполнить для выполнения оператора. Это число не означает сколько времени потребуется для выполения запроса, хотя обычно существует прямая зависимость, необходимого для выполнения. Стоимость — это комбинация из 5 рабочих компонентов, используемых для оценки требуемой работы: последовательная выборка, непоследовательная (случайная) выборка, обработка строки, оператор (функция) обработки и запись индекса обработки
Стоимость представляет собой операции ввода-вывода и загрузки процессора, и здесь важно знать, что относительно высокая стоимость означает, что PostgresSQL считает, что ему придется выполнять больше работы. Оптимизатор принимает решение о том, какой план выполнения использовать, исходя из стоимости
Оптимизатор предпочитает более низкие затраты.
Фактическое время
В миллисекундах первое число — это время запуска (время для извлечения первой записи), а второе число — это время, необходимое для обработки всего узла (общее время от начала до конца). Легко понять, верно?
В приведенном выше примере потребовалось 55,009 мс для получения первой записи и 55,012 мс для завершения всего узла.
Узнать больше о планах выполнения
Есть несколько действительно хороших статей для понимания результатов EXPLAIN. Вместо того, чтобы пытаться пересказать их здесь, я рекомендую потратить время на то, чтобы по-настоящему понять их, перейдя к этим 2 замечательным ресурсам:
- http://www.depesz.com/2013/04/16/explaining-the-unexplainable/
- https://wiki.postgresql.org/images/4/45/Explaining_EXPLAIN.pdf
Опыт оптимизации и контроля производительности в БД с 3000 пользователей Промо
Данная статья написана по материалам доклада, прочитанного на Конференции Инфостарта IE 2014 29-31 октября 2014 года.
Меня зовут Сергей, являюсь руководителем отдела оптимизации и производительности систем в компании «Деловые линии».
Цель этого доклада – поделиться информацией о нашем опыте работы с большой базой на платформе 1С, с чем пришлось столкнуться, как удалось обеспечить работоспособность.
Уверен, что вам будет интересно, так как подобной информацией мало кто делится, да и про само существование таких систем их владельцы стараются не рассказывать, максимум про это «краем глаза» упоминают участвовавшие в проекте вендоры.
**update от 04.03.2016 по вопросам из комментариев
Изменение таблицы
Когда нужно обновить название столбца таблицы используем команду ALTER
Предположим полю website_url не хватает 50 символов. Увеличим длину до 60.
ALTER TABLE booking_sites ALTER column website_url TYPE VARCHAR(60);
Проверим изменилась ли таблица
\d booking_sites
Table «public.booking_sites»
Column | Type | Collation | Nullable | Default
—————-+————————+————+———-+——————————————-
id | bigint | | not null | nextval(‘booking_sites_id_seq’::regclass)
company_name | character varying(50) | | not null |
origin_country | character varying(50) | | not null |
age | character varying(3) | | not null |
date_of_birth | date | | not null |
website_url | character varying(60) | | |
Indexes:
«booking_sites_pkey» PRIMARY KEY, btree (id)
Пример 3
Еще один быстрый и простой способ дублировать таблицу — использовать оператор «AS TABLE» в команде CREATE TABLE PostgreSQL. В этом случае мы увидим, как этот запрос работает волшебным образом. Итак, мы открыли инструмент запроса по его значку. Затем мы должны написать в нем следующий запрос. Мы создали таблицу с именем «новая» как копию таблицы «test» с помощью предложения «AS TABLE» в нашем запросе. Попробуйте выполнить команду в области запроса оболочки командной строки PostgreSQL, чтобы увидеть результаты. Щелкните значок «Выполнить» на панели задач графического пользовательского интерфейса pgAdmin или нажмите клавишу «Ввод» на клавиатуре, если вы работаете в командной оболочке SQL для выполнения этого запроса. Вы увидите, что запрос работает правильно в соответствии с выводом, показанным в области вывода моментального снимка, например сообщениями. Это означает, что таблица «test» была успешно продублирована,
Вы можете увидеть вновь созданную таблицу «новая» в списке таблиц в базе данных Postgres.
После извлечения содержимого таблицы «новая» инструментом запроса с помощью команды SELECT он показывает те же данные, что и таблица «test» вместе со структурой, например, имена столбцов.
Получение данных
Зачастую нам нужно поделиться данными из postgres с сотрудниками, руководством или клиентами, причём желательно в каком-нибудь удобочитаемом формате типа CSV или Excel. Вы уже подготовили запрос, свели всё в одну таблицу, осталось только куда-нибудь это выгрузить. Погуглив psql csv export, можно найти 2 способа. Первый более примитивный.
CSV фйалы представляют собой просто строки со значениями, которые разделены запятыми. Таким образом, указав psql как форматировать вывод, можно получить похожую структуру. Тут есть одна большая проблема — если ваши данные содержат запятую, то её нужно экранировать, а т.к. количество полей может быть огромным, то такой способ ведёт в тупик.
Правильным способом будет выгрузка в CSV с помощью мета-команды или SQL команды . выглядит это примерно так:
накладывает несколько ограничений. Во-первых, путь к файлу должен быть абсолютным. Во-вторых, вы можете писать только на локальную файловую систему. То есть подключиться к удалённой БД и выгрузить данные на локальный компьютер не получится. И тут на помощь приходит \copy, которая представляет из себя всего лишь более удобную оболочку для COPY. Запрос выше можно переписать так:
Обратите внимание, что используется относительный путь до файла. Также можно задать и другие параметры CSV
Единственное ограничение состоит в том, что команда должна быть одной строкой. Причина в том, что окончанием выражения для команды с \ является перевод строки, а не точка с запятой. Это не касается — там управление передаётся в редактор. Под капотом выполняет всё тот же COPY, перенаправляя вывод в STDOUT вместо файла. Далее psql забирает со STDOUT и записывает в локальный файл.
Если вам нужно выгрузить данные в Excel, то убедитесь, что задали правильную кодировку. Он не дружит с UTF-8, так что лучше откатиться до latin1 (2015 год на дворе, я солидарен с негодованиями автора):
Если sql-запрос у вас находится в файле, то использовать его для команды не получится. Вам придётся скопировать всё тело запроса в выражение в команде, удалив переносы строк.
Наверно, я вам уже надоел, так что закругляюсь. Напоследок хотелось бы ещё рассказать про утилиту psql2csv. Она позволяет запускать запрос из файла и получать отформатированный CSV в STDOUT (который можно потом перенаправить в файл):
В случае запроса из файла:
Параметры вызова утилиты совпадают с параметрами psql. Вы можете заменить вызов psql на psql2csv, передав запрос в качестве аргумента, а на выходе получить валидный CSV. Но это ещё не всё — почему бы не подать вывод на вход какой-нибудь другой утилите?!
psql2csv также принимает аргументы для совместимости с Excel.
Я уже очень привык работать с PostgreSQL через командную строку. Всё, что раньше делал в pgAdmin, можно делать и тут, причём быстрее. Я надеюсь, что эта статья убедила вас сделать psql основным инструментом для работы с PostgreSQL, показав удобство и гибкость.
Если у вас есть какие-то замечания или дополнения, пожалуйста, напишите!
Взаимодействие psql с операционной системой
Терминал psql умеет выполнять команды операционной системы. Для этого нужно использовать команду “\!“. Например так:
postgres=# \! hostname s-pg13
Можно установить переменную окружения в систему с помощью команды \setenv:
postgres=# \setenv TEST Hello postgres=# \! echo $TEST Hello
А для того чтобы перевести вывод команд в файл нужно использовать ‘\o имя_файла’. И чтобы вернуть всё обратно используем “\o” без имени файла. Например:
postgres=# \o dba.log postgres=# SELECT schemaname, tablename, tableowner FROM pg_tables LIMIT 5; postgres=# \! cat dba.log ---------------------- schemaname | pg_catalog tablename | pg_statistic tableowner | postgres ---------------------- schemaname | pg_catalog tablename | pg_type tableowner | postgres ---------------------- schemaname | pg_catalog tablename | pg_foreign_table tableowner | postgres ---------------------- schemaname | pg_catalog tablename | pg_authid tableowner | postgres ---------------------- schemaname | pg_catalog tablename | pg_statistic_ext_data tableowner | postgres postgres=# \o postgres=# \x Expanded display is off.
В предыдущем листинге с помощью последней команды мы выключили расширенный режим.
Помимо вывода в файл psql умеет выполнять команды из файла. Это делается с помощью команды “\i имя файла”. Вот пример:
postgres=# \q postgres@s-pg13:~$ cat <<EOT >> dba1.log > SELECT 'pg_statistic: '|| count(*) FROM pg_statistic; > SELECT 'pg_type: '|| count(*) FROM pg_type; > SELECT 'pg_foreign_table: '|| count(*) FROM pg_foreign_table; > EOT postgres@s-pg13:~$ psql psql (13.3) Type "help" for help. postgres=# \! cat dba1.log SELECT 'pg_statistic: '|| count(*) FROM pg_statistic; SELECT 'pg_type: '|| count(*) FROM pg_type; SELECT 'pg_foreign_table: '|| count(*) FROM pg_foreign_table; postgres=# \a \t \pset fieldsep ' ' Output format is unaligned. Tuples only is on. Field separator is " ". postgres=# \i dba1.log pg_statistic: 402 pg_type: 411 pg_foreign_table: 0 postgres=# \a \t \pset fieldsep '|' Output format is aligned. Tuples only is off. Field separator is "|".
В примере выше мы проделали следующее:
- вышли из psql;
- создали скрипт dba1.log, который подсчитывает количество строк из:
- pg_statistic – статистическая информация о содержимом базы данных;
- pg_type – информация о типах данных;
- pg_foreign_table – дополнительная информация о сторонних таблицах.
- обратно вернулись в psql;
- прочитали файл dba1.log;
- изменили формат вывода;
- выполнили скрипт sql команд;
- вернули формат вывода в прежнее состояние.
Изменить несколько столбцов в таблице
Синтаксис
Синтаксис для изменения нескольких столбцов в таблице в PostgreSQL (используя ALTER TABLE):
ALTER TABLE table_name
ALTER COLUMN column_name TYPE column_definition,
ALTER COLUMN column_name TYPE column_definition,
…
;
- table_name
- Имя таблицы для изменения.
- column_name
- Имя столбца, который нужно изменить в таблице.
- column_definition
- Измененный тип данных столбца.
Пример
Рассмотрим пример, который показывает, как изменить несколько столбцов в таблице PostgreSQL с помощью оператора ALTER TABLE.
Например:
PgSQL
ALTER TABLE order_details
ALTER COLUMN notes TYPE varchar(500),
ALTER COLUMN quantity TYPE numeric;
1 |
ALTERTABLEorder_details ALTERCOLUMNnotesTYPEvarchar(500), ALTERCOLUMNquantityTYPEnumeric; |
В этом примере ALTER TABLE будут изменены два столбца таблицы order_details — notes и quantity.
Поле notes будет изменен на тип данных varchar(500), а столбец quantity будет изменен на тип данных numeric.
История релизов
Дата | Версия | Описание (комментарии) |
---|---|---|
1986 | SQL-86(SQL-87) | Первая версия, стандартизованная ANSI. |
1989 | SQL-89 | Эта версия включает незначительные изменения, которые добавляют ограничения целостности. |
1992 | SQL-92(SQL2) | Эта версия включает в себя основные изменения в языке SQL. Многие системы баз данных используют этот стандарт для своего языка спецификации. |
1999 | SQL:1999(SQL3) | В этой версии представлено много новых функций, таких как сопоставление регулярных выражений, триггеры, некоторые объектно-ориентированные функции и возможности OLAP. SQL:1999 также добавляет BOOLEAN тип данных, но многие коммерческие серверы баз данных не поддерживают его как тип столбца. Между тем SQL:1999 считается устаревшим. |
2003 | SQL:2003 | Эта версия включает незначительные изменения ко всем частям SQL:1999. Эта версия также добавляет новые функции, такие как:
|
2006 | SQL:2006 | Эта версия определяет способы импорта, хранения и управления данными XML. Кроме того, он позволяет приложениям использовать XQuery для запроса данных в формате XML. |
2008 | SQL:2008 | Эта версия добавляет такие функции, как оператор TRUNCATE TABLE, предложение FETCH и триггеры INSTEAD OF. |
2011 | SQL:2011 | Эта версия добавляет улучшения для оконных функций и предложения FETCH. |
2016 | SQL:2016 | Эта версия добавляет различные функции для работы с данными JSON. |
2019 | SQL:2019 | Эта версия указывает тип данных многомерных массивов (MDarray). |
Настройка PostgreSQL в Ubuntu 20.04
После установки СУБД откройте терминал и переключитесь на пользователя postgres с помощью команды:
Эта учетная запись создается во время установки программы и на данный момент вы можете получить доступ к системе баз данных только с помощью нее. По умолчанию PostgreSQL использует концепцию ролей для аутентификации и авторизации.
Это очень похоже на учетные записи Unix, но программа не различает пользователей и групп, есть только роли. Сразу после установки PostgreSQL пытается связать свои роли с системными учетными записями, если для имени системной учетной записи существует роль, то пользователь может войти в консоль управления и выполнять позволенные ему действия. Таким образом, после переключения на пользователя postgres вы можете войти в консоль управления:
И посмотреть информацию о соединении:
Чтобы выйти наберите:
Теперь рассмотрим, как создать другие роли и базы данных.
Создание роли postgresql
Вы уже можете полноценно работать с базой данных с помощью учетной записи postgres, но давайте создадим дополнительную роль. Учетная запись postgres является администратором, поэтому имеет доступ к функциям управления. Для создания пользователя выполните команду:
Скрипт задаст лишь два вопроса, имя новой роли и нужно ли делать ее суперпользователем.
Создание базы данных
Точно также как имена ролей сопоставляются с системными пользователями, имя базы данных будет подбираться по имени пользователя. Например, если мы создали пользователя alex, то по умолчанию система попытается получить доступ к базе данных alex. Мы можем ее очень просто создать:
Дальше, чтобы подключиться к этой базе данных нам нужно войти от имени одноименного пользователя:
Заходим в консоль и смотрим информацию о подключении:
Все верно сработало. Мы подключились с помощью роли alex к базе alex. Если нужно указать другую базу данных, вы можете сделать это с помощью опции -d, например:
Все сработало верно, при условии, что все компоненты были настроены как описано выше.
Создание таблиц
Теперь, когда вы знаете, как подключится к базе данных PostgreSQL, давайте рассмотрим, как выполняются основные задачи. Сначала разберем создание таблиц для хранения некоторых данных. Для создания таблицы PostgreSQLиспользуется такой синтаксис:
CREATE TABLE имя_таблицы (имя_колонки1 тип_колонки (длина) ограничения, имя_колонки2 тип_колонки (длина), имя_колонки3 тип_колонки (длина));
Как видите, сначала мы задаем имя таблицы, затем описываем каждый столбец. Столбец должен иметь имя, тип и размер, также можно задать ограничения для данных, которые там будут содержаться. Например:
Мы создали таблицу детской площадки для описания оборудования, которое на ней есть. Сначала идет идентификатор equip_id, который имеет тип serial, это значит, что его значение будет автоматически увеличиваться, ключ primary key значит, что значения должны быть уникальны.
Следующие колонки — обычные строки, для них мы задаем длину поля, они не могут быть пустыми (NOT NULL). Следующий столбец тоже строка, но она может содержать только одно из указанных значений, последний столбец — дата создания.
Вы можете вывести все таблицы, выполнив команду:
Здесь мы видим, что кроме нашей таблицы, существует еще одна переменная -playground_equip_id_seq. В ней содержится последнее значение этого поля. Если нужно вывести только таблицы, выполните:
Утилиты (программы) PosgreSQL:
- createdb и dropdb – создание и удаление базы данных (соответственно)
- createuser и dropuser – создание и пользователя (соответственно)
- pg_ctl – программа предназначенная для решения общих задач управления (запуск, останов, настройка параметров и т.д.)
- postmaster – многопользовательский серверный модуль PostgreSQL (настройка уровней отладки, портов, каталогов данных)
- initdb – создание новых кластеров PostgreSQL
- initlocation – программа для создания каталогов для вторичного хранения баз данных
- vacuumdb – физическое и аналитическое сопровождение БД
- pg_dump – архивация и восстановление данных
- pg_dumpall – резервное копирование всего кластера PostgreSQL
- pg_restore – восстановление БД из архивов (.tar, .tar.gz)
Примеры создания резервных копий:
Создание бекапа базы mydb, в сжатом виде
pg_dump -h localhost -p 5440 -U someuser -F c -b -v -f mydb.backup mydb
Создание бекапа базы mydb, в виде обычного текстового файла, включая команду для создания БД
pg_dump -h localhost -p 5432 -U someuser -C -F p -b -v -f mydb.backup mydb
Создание бекапа базы mydb, в сжатом виде, с таблицами которые содержат в имени payments
pg_dump -h localhost -p 5432 -U someuser -F c -b -v -t *payments* -f payment_tables.backup mydb
Дамп данных только одной, конкретной таблицы. Если нужно создать резервную копию нескольких таблиц, то имена этих таблиц перечисляются с помощью ключа -t для каждой таблицы.
pg_dump -a -t table_name -f file_name database_name
Создание резервной копии с сжатием в gz
pg_dump -h localhost -O -F p -c -U postgres mydb | gzip -c > mydb.gz
Список наиболее часто используемых опций:
- -h host — хост, если не указан то используется localhost или значение из переменной окружения PGHOST.
- -p port — порт, если не указан то используется 5432 или значение из переменной окружения PGPORT.
- -u — пользователь, если не указан то используется текущий пользователь, также значение можно указать в переменной окружения PGUSER.
- -a, —data-only — дамп только данных, по-умолчанию сохраняются данные и схема.
- -b — включать в дамп большие объекты (blog’и).
- -s, —schema-only — дамп только схемы.
- -C, —create — добавляет команду для создания БД.
- -c — добавляет команды для удаления (drop) объектов (таблиц, видов и т.д.).
- -O — не добавлять команды для установки владельца объекта (таблиц, видов и т.д.).
- -F, —format {c|t|p} — выходной формат дампа, custom, tar, или plain text.
- -t, —table=TABLE — указываем определенную таблицу для дампа.
- -v, —verbose — вывод подробной информации.
- -D, —attribute-inserts — дамп используя команду INSERT с списком имен свойств.
Бекап всех баз данных используя команду pg_dumpall.
pg_dumpall > all.sql
Восстановление таблиц из резервных копий (бэкапов):
psql — восстановление бекапов, которые хранятся в обычном текстовом файле (plain text);
pg_restore — восстановление сжатых бекапов (tar);
Восстановление всего бекапа с игнорированием ошибок
psql -h localhost -U someuser -d dbname -f mydb.sql
Восстановление всего бекапа с остановкой на первой ошибке
psql -h localhost -U someuser —set ON_ERROR_STOP=on -f mydb.sql
Для восстановления из tar-арихива нам понадобиться сначала создать базу с помощью CREATE DATABASE mydb; (если при создании бекапа не была указана опция -C) и восстановить
pg_restore —dbname=mydb —jobs=4 —verbose mydb.backup
Восстановление резервной копии БД, сжатой gz
gunzip mydb.gz psql -U postgres -d mydb -f mydb
5.7.3. Путь поиска схемы
Полные имена довольно утомительно писать и часто в приложении лучше
бывает нигде не привязываться к отдельному имени схемы.
Таким образом на таблицы ссылаются через неполные имена,
которые содержат только имя таблицы. СУБД определяет какая таблица
имеется в виду с помощью пути поиска, который является
списком схем, в которых осуществляется поиск. Первая совпавшая
таблица в пути поиска считается той, которая запрашивалась.
Если совпадающих имён в пути поиска не найдено, будет выдана ошибка,
даже если совпадающее имя таблицы существует в других схемах текущей
базы данных.
Первая схема в пути поиска называется текущей схемой. Кроме того,
что текущая схема будет находится первой, она также является схемой,
где будут создаваться новые таблицы командой CREATE TABLE,
в которой не указано имя схемы.
Чтобы посмотреть текущий путь поиска, используйте команду:
SHOW search_path;
В случае настроек по умолчанию, она возвращает:
search_path -------------- "$user",public
Первый элемент говорит, что поиск должен производится в схеме
с таким же именем как и у текущего пользователя. Если такой
схемы не существует, данный элемент игнорируется.
Второй элемент указывает на схему public, которую мы уже
рассматривали.
Первая существующая схема в пути поиска является местоположением
по умолчанию, для создания новых объектов. Именно по этой
причине, по умолчанию объекты создаются в схеме public.
Когда на объекты ссылаются из любых других контекстов без указания
схемы (модификация таблиц, данных или команды запросов) происходит
перебор схем в пути поиска пока не будет найден совпавший
объект. Следовательно, в конфигурации по умолчанию, все
операции без указания имени схемы снова указывают только на
схему public.
Чтобы поместить новую схему в путь поисках, используйте команду:
SET search_path TO myschema,public;
(Здесь мы опустили $user, потому что эта
схема в данный момент нам не нужна.) И после этого, мы получаем
доступ к таблице без указания схемы:
DROP TABLE mytable;
Также, поскольку myschema является первым
элементом в пути поиска, именно в ней по умолчанию будут
создаваться новые объекты.
Мы также можем написать:
SET search_path TO myschema;
Тогда мы не сможем больше обращаться к схеме public без явного
указания имени. В схеме public не существует ничего особенного,
кроме того, что она существует по умолчанию. Её можно даже
удалить.
Другие способы манипулирования путём поиска схем см. в
Section 9.23.
Путь поиска, точно также как и для таблиц, работает и для имён
типов данных, имён функций и операторов. Имена типов данных и
функций могут быть указаны и в полном виде, точно также как и
имена таблиц. Если вам необходимо написать полное имя оператора в
выражении, существует специальный синтаксис: вы должны написать
OPERATOR(схема.оператор)
Это необходимо для избежания неоднозначностей в синтаксе. Вот пример:
SELECT 3 OPERATOR(pg_catalog.+) 4;
Схемы
Схема – это пространство имён для объектов внутри базы данных.
Суть работы схемы можно представить так: мы все складываем не все в одну большую кучу, а по небольшим отдельным кучкам. Например, как в файловой системе, всё кладем не в один каталог, а раскладываем по подкаталогам.
Вот пример работы со схемами! В одну схему поместим объекты для модуля “логистика”, а в другую для модуля “финансы” и так далее.
В базе данных может быть несколько схем. По умолчанию существует две глобальные схемы. Глобальные они потому-что не принадлежат какой-то определённой базе данных:
- pg_catalog – служебная схема (её ещё называют системный каталог), присутствует во всех базах данных, например там находится представление pg_tables;
- public – общая схема, присутствует во всех базах данных и по умолчанию все объекты создаются в ней.
Также вы можете создать свои дополнительные схемы.
Основные команды PostgreSQL в интерактивном режиме:
- \connect db_name – подключиться к базе с именем db_name
- \du – список пользователей
- \dp (или \z) – список таблиц, представлений, последовательностей, прав доступа к ним
- \di – индексы
- \ds – последовательности
- \dt – список таблиц
- \dt+ — список всех таблиц с описанием
- \dt *s* — список всех таблиц, содержащих s в имени
- \dv – представления
- \dS – системные таблицы
- \d+ – описание таблицы
- \o – пересылка результатов запроса в файл
- \l – список баз данных
- \i – читать входящие данные из файла
- \e – открывает текущее содержимое буфера запроса в редакторе (если иное не указано в окружении переменной EDITOR, то будет использоваться по умолчанию vi)
- \d “table_name” – описание таблицы
- \i запуск команды из внешнего файла, например \i /my/directory/my.sql
- \pset – команда настройки параметров форматирования
- \echo – выводит сообщение
- \set – устанавливает значение переменной среды. Без параметров выводит список текущих переменных (\unset – удаляет).
- \? – справочник psql
- \help – справочник SQL
- \q (или Ctrl+D) – выход с программы
INFORMATION_SCHEMA как Альтернатива SHOW Операторы
оператор предназначается как более
непротиворечивый способ обеспечить доступ к информации, предоставленной различным операторы, которые поддерживает MySQL (, , и т.д). Используя имеет эти преимущества, по сравнению с :
-
Это соответствует правилам Кодда, потому что весь доступ делается на таблицах.
-
Можно использовать знакомый синтаксис оператор, и только должен изучить некоторые имена таблиц и имена
столбцов. -
Конструктор не должен волноваться о добавляющих ключевых словах.
-
Можно фильтровать, сортировать, связать, и преобразовать следствия запросы в любой формат Ваши потребности приложения, такие
как структура данных или текстовое представление синтаксическому анализу. -
Этот метод является более взаимодействующим с другими системами баз данных.
Например, пользователи Базы данных Oracle знакомы с запросами таблиц в словаре данных Oracle.
Поскольку знакомо и широко используемый, операторы остаются альтернативой. Фактически, наряду с реализацией , есть улучшения к как описано в Разделе 19.31,
«Расширения Операторы».