Выполнение команд оболочки

В PSQL, Вы можете обратиться к оболочке ОС с \! Команда. Допустим, вы находитесь на Windows, и нужно листинг каталога. Вместо выхода Psql, вы можете просто ввести \! в режиме строки

Смотрим отчетность

Команда \watch новая функция в PSQL, поскольку PostgreSQL 9.3. Используйте его, чтобы повторно запустить SQL запрос через фиксированные промежутки времени, так что вы можете смотреть на результат. Например, вы хотите, следить за запросами, которые не завершены. Вы можете запустить такой запрос, как показано в примере 3-3.

Пример 3-3. Смотреть соединение трафика каждые 10 секунд

SELECT datname, waiting, query
FROM pg_stat_activity
WHERE state = 'active' AND pid != pg_backend_pid(); \watch 10

Хотя \watch в первую очередь предназначена для вывода запроса мониторинга, вы также можете использовать его для запуска заявления на фиксированные промежутки времени. В примере 3-4, мы регистрировали активность каждые пять секунд.

Пример 3-4. Искать трафик каждые пять секунд

SELECT * INTO log_activity FROM pg_stat_activity; - Создать таблицу и выполнить первый вставку.


INSERT INTO log_activity SELECT * FROM pg_stat_activity; \watch 5 - Вставка каждые пять секунд

Если вы хотите, чтобы удалить часы, используйте CTRL-X CTRL-C. Излишне говорить, что часы предназначены только для интерактивного PSQL.

Вы можете найти больше примеров использования часы Michael Paquier: часы в PSQL.

Списки

Различные команды PSQL может дать вам списки объектов вместе с деталями. Пример 3-5 демонстрирует, как перечислить все таблицы в схеме, pg_catalog начать с pg_t, вместе с их размерами.

Пример 3-5. Список Table с \dt+

\dt+ pg_catalog.pg_t*
Schema | Name | Type | Owner | Size | Description
-----------+------------------+-------+----------+--------+-------------
pg_catalog | pg_tablespace | table | postgres | 40 kB |
pg_catalog | pg_trigger | table | postgres | 16 kB |
pg_catalog | pg_ts_config | table | postgres | 40 kB |
pg_catalog | pg_ts_config_map | table | postgres | 48 kB |
pg_catalog | pg_ts_dict | table | postgres | 40 kB |
pg_catalog | pg_ts_parser | table | postgres | 40 kB |
pg_catalog | pg_ts_template | table | postgres | 40 kB |
pg_catalog | pg_type | table | postgres | 112 kB |

Если бы мы хотіли узнать информацию об определенном объекте, например, таблицы pg_ts_config, мы должны использовать команду \ d +, как показано в примере 3-6.

Пример 3-6. Опишите объект с \d+

\d+ pg_ts_dict
Table "pg_catalog.pg_ts_dict"
Column | Type | Modifiers | Storage | Stats target | Description
---------------+------+-----------+----------+--------------+-------------
dictname | name | not null | plain | |
dictnamespace | oid | not null | plain | |
dictowner | oid | not null | plain | |
dicttemplate | oid | not null | plain | |
dictinitoption | text | | extended | |
psql Gems | 51
Indexes:
"pg_ts_dict_dictname_index" UNIQUE, btree (dictname, dictnamespace)
"pg_ts_dict_oid_index" UNIQUE, btree (oid)
Has OIDs: yes

Импорт и экспорт данных

PSQL имеет команду \copy(копирования), которая позволяет импортировать данные и экспортировать данные в текстовый файл. Вкладка это разделитель по умолчанию, но вы можете указать другие. Новые разрывы строк должны разделить строки. Для нашего первого примера, мы загрузили данные из переписи населения США Fact Finder, охватывающих расовые демографические жилья в штате Массачусетс. Вы можете скачать файл мы используем в этом примере, DEC_10_SF1_QTH1_with_ann.csv, с книги PostgreSQL.

psql импорт

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

До приведения данных в PostgreSQL, вы должны сначала создать таблицу для хранения входящих данных. Данные должны соответствовать файлам и числа столбцов и типов данных. Это может стать дополнительным шагом для хорошо сформированного файла, но это устранит необходимость для PSQL угадать тип данных. PSQL перерабатывает весь импорт в качестве одной транзакции; если он сталкивается с ошибкой в данных, весь импорт не будет работать. Если вы не уверены о данных, содержащихся в файле, мы рекомендуем вам настроить таблицу с наиболее сговорчивыми типами данных, а затем переделывая их позже, если это необходимо. Например, если вы не можете быть уверены, что колонка будет просто числовые значения, сделать его характер изменения, чтобы получить данные для просмотра и затем переделать его позже.

Запустите Psql из командной строки и запустить команды в Примере 3-7 в Psql консоли.

Пример 3-7. Импорт данных с PSQL

\connect postgresql_book
\cd /postgresql_book/ch03
\copy staging.factfinder_import FROM DEC_10_SF1_QTH1_with_ann.csv CSV

В примере 3-7, мы запускаем интерактивный Psql, подключаемся к нашей базе данных, использовав \cd , чтобы изменить текущий каталог на папку, содержащую наш файл и импортировали наши данные с помощью команды \copy (копирования). Потому что разделитель по умолчанию вкладка, мы дополнили наше заявление с CSV, чтобы сказать, что наши Psql данные разделены запятыми.

Если ваш файл имеет нестандартные разделители, такие как путь, укажите разделитель:

\copy sometable FROM somefile.txt DELIMITER '|';

Если вы хотите заменить нулевые значения чем-то еще, добавьте NULL AS:

\copy sometable FROM somefile.txt NULL As '';

Не путайте команду \copy(копирования) в PSQL с копией запроса предоставленной в языке SQL. Потому что PSQL это утилита клиента, все пути интерпретируются относительно подключенного клиента.Копия SQL является сервер и работает в консоли учетной записи службы Postgres OS.Входной файл должен находиться в пути, доступном для учетной записи службы. Мы подробно провили различия между двумя импортированных данных фиксированной ширины в PostgreSQL с PSQL.

PSQL Экспорт

Экспортировать данные еще проще, чем импортировать данные. Вы даже можете экспортировать выбранные строки из таблицы. Используйте команду \copy (копирования) Psql что бы экспортировать. В примере 3-8, мы демонстрируем, как экспортировать данные, мы просто загружаем обратно с разделителями табуляцию файла.

Пример 3-8. Экспорт данных с PSQL

\connect postgresql_book
\copy (SELECT * FROM staging.factfinder_import WHERE s01 ~ E'^[0-9]+' ) TO '/
test.tab'
WITH DELIMITER E'\t' CSV HEADER

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

Вы можете использовать только заголовок с форматом CSV (посмотреть пример 3-9).

Пример 3-9. Экспорт данных с PSQL

\connect postgresql_book
\copy staging.factfinder_import TO '/test.csv' WITH CSV HEADER QUOTE '"' FORCE
QUOTE *

FORCE QUOTE * гарантирует, что все столбцы в двойных кавычках. Для ясности, они также указывают на характер цитировани, хотя PSQL предполагает двойные кавычки.

 

Copy from/ в программе

Из PostgreSQL 9.3, PSQL может извлекать данные с выхода командной строки программы, такие как завиток, LS, и Wget-и выводить данные в таблицу. Пример 3-10 импортирует список каталогов из команды реж.

Пример 3-10. Импорт реж листинг с PSQL

\connect postgresql_book
CREATE TABLE dir_list (filename text);
\copy dir_list FROM PROGRAM 'dir C:\projects /b'

Hubert Lubaczewski имеет больше примеров использования \copy. Посетить Depesz: "Каналы" скопировать из внешней программы.

Базовая отчетность

Верите или нет, PSQL способно производить базовые отчеты HTML. Попробуйте следующее и проверьте HTMLвывод,показанный на рисунке 3-1.

psql -d postgresql_book -H -c
"SELECT category, count(*) As num_per_cat
FROM pg_settings
WHERE category LIKE '%Query%'
GROUP BY category
ORDER BY category;" -o test.html

Рисунок 3-1. Минималистский отчет HTML

Нплохо. Но команда выводит только HTML-таблицы, не полный HTML документ. Чтобы создать отчет получше, нужно составить сценарий, как показано в примере 3-11.

Пример 3-11. Настройки содержание settings_report.psql

\o settings_report.html
\T 'cellspacing=0 cellpadding=0'
\qecho '<html><head><style>H2{color:maroon}</style>'
\qecho '<title>PostgreSQL Settings</title></head><body>'
\qecho '<table><tr valign=''top''><td><h2>Planner Settings</h2>'
\x on
\t on
\pset format html
SELECT category, string_agg(name || '=' || setting, E'\n' ORDER BY name) As settings

FROM pg_settings
WHERE category LIKE '%Planner%'
GROUP BY category
ORDER BY category;
\H
\qecho '</td><td><h2>File Locations</h2>'
\x off
\t on
\pset format html
SELECT name, setting FROM pg_settings WHERE category = 'File Locations' ORDER BY
name;
\qecho '<h2>Memory Settings</h2>'
SELECT name, setting, unit FROM pg_settings WHERE category ILIKE '%memory%' ORDER
BY name;
\qecho '</td></tr></table>'
\qecho '</body></html>'
\o

Перенаправление вывода запроса в file.

html для вывода запросов.

Добавляет дополнительный HTML.

Режим Expand. Повторяет заголовки столбцов для каждой строки и выводит каждый столбец каждой строки в виде отдельной строки.

Принудительные запросы для вывода в виде таблиц HTML.

string_agg (), введенный в PostgreSQL 9.0 для объединения всех свойств в той же категории в одном столбце.

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

Переключение режима кортежи. Когда заголовки столбцов и число строк опущены.

Пример 3-11 показывает, что перемещая команды SQL и PSQL, Вы можете создать достаточно полный табличный отчет и подотчеты. Выполнить Пример 3-11путем подключения в интерактивном режиме с PSQL и выполнения \i settings_report.psql, или запустить Psql -f settings_report.psql из командной строки OS. Вывод, генерируемый settings_report.html показано на рисунке 3-2.

Рисунок 3-2. Отчет HTML

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