Начало работы
Начало работы
Переключение и подключение ``Сценарий оболочки $ sudo -u postgres psql
Вывести список всех баз данных
```Основной скрипт
postgres=# \l
Подключение к базе данных с именем postgres
postgres=# \c postgres
Отключить
postgres=# \q
postgres=# \!
Команды psql
Опция | Пример | Описание |
---|---|---|
[-d] <база данных> |
psql -d mydb | Подключение к базе данных |
-U |
psql -U john mydb | Подключение от имени конкретного пользователя |
-h -p |
psql -h localhost -p 5432 mydb | Подключение к хосту/порту |
-U -h -p -d |
psql -U admin -h 192.168.1.5 -p 2506 -d mydb | Подключение удаленного PostgreSQL |
-W |
psql -W mydb | Принудительный ввод пароля |
-c |
psql -c ‘\c postgres’ -c ‘\dt’ | Выполнить SQL-запрос или команду |
-H |
psql -c “\l+” -H postgres > database.html | Создать HTML-отчет |
-l |
psql -l | Вывести список всех баз данных |
-f |
psql mydb -f file.sql | Выполнение команд из файла |
-V |
psql -V | Вывести версию psql |
{.show-header} |
Получение справки
- | - |
---|---|
\h |
Справка по синтаксису команд SQL |
\h DELETE |
Синтаксис SQL-запроса DELETE |
\? |
Список команд PostgreSQL |
Запуск в консоли PostgreSQL
Работа с PostgreSQL
Recon
Показать версию
SHOW SERVER_VERSION;
Показать состояние системы
\conninfo
Показать переменные окружения
SHOW ALL;
Показать список пользователей
SELECT rolname FROM pg_roles;
Показать текущего пользователя
SELECT current_user;
Показать права доступа текущего пользователя
\du
Показать текущую базу данных
SELECT current_database();
Показать все таблицы в базе данных
\dt
Перечислить функции
\df <schema>
Базы данных
Список баз данных
\l
Подключиться к базе данных
\c <имя_базы_данных>
Показать текущую базу данных
SELECT current_database();
CREATE DATABASE <имя_базы_данных> WITH OWNER <имя_пользователя>;
DROP DATABASE IF EXISTS <database_name>;
ALTER DATABASE <old_name> RENAME TO <new_name>;
Таблицы
Список таблиц в текущей базе данных
\dt
SELECT table_schema,table_name FROM information_schema.tables ORDER BY table_schema,table_name;
Перечислить таблицы в глобальном порядке
\dt *.*.
SELECT * FROM pg_catalog.pg_tables
Перечислить схему таблицы
\d <имя_таблицы>
\d+ <имя_таблицы>
SELECT имя_колонки, тип_данных, максимальная_длина_символа
ИЗ INFORMATION_SCHEMA.COLUMNS
WHERE имя_таблицы = '<имя_таблицы>';
CREATE TABLE <table_name>(
<column_name> <column_type>,
<имя_столбца> <тип_столбца>
);
Создание таблицы с автоинкрементным первичным ключом
CREATE TABLE <table_name> (
<имя_столбца> SERIAL PRIMARY KEY
);
DROP TABLE IF EXISTS <table_name> CASCADE;
Разрешения
Станьте пользователем postgres, если у вас есть ошибки в правах ``hell sudo su - postgres psql
[Grant](http://www.postgresql.org/docs/current/static/sql-grant.html) все разрешения на базу данных
```sql {.wrap}
GRANT ALL PRIVILEGES ON DATABASE <db_name> TO <user_name>;
Предоставление прав на подключение к базе данных
GRANT CONNECT ON DATABASE <db_name> TO <user_name>;
Предоставление прав на схему
GRANT USAGE ON SCHEMA public TO <user_name>;
Предоставление прав на функции
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO <user_name>;
Предоставление прав на выборку, обновление, вставку, удаление для всех таблиц
GRANT SELECT, UPDATE, INSERT ON ALL TABLES IN SCHEMA public TO <user_name>;
Предоставление прав доступа к таблице
GRANT SELECT, UPDATE, INSERT ON <table_name> TO <user_name>;
Предоставление прав на выборку в таблице
GRANT SELECT ON ALL TABLES IN SCHEMA public TO <user_name>;
Колонки
ALTER TABLE <table_name> IF EXISTS
ADD <column_name> <data_type> [<constraints>];
Обновление столбца
ALTER TABLE <table_name> IF EXISTS
ALTER <имя_колонки> TYPE <data_type> [<constraints>];
Удаление столбца
ALTER TABLE <table_name> IF EXISTS
DROP <column_name>;
Обновить столбец, сделав его автоинкрементным первичным ключом
ALTER TABLE <table_name>
ADD COLUMN <column_name> SERIAL PRIMARY KEY;
Вставка в таблицу с автоинкрементным первичным ключом
INSERT INTO <имя_таблицы>
VALUES (DEFAULT, <value1>);
INSERT INTO <table_name> (<column1_name>,<column2_name>)
VALUES ( <value1>,<value2> );
Данные
Select all data
SELECT * FROM <имя_таблицы>;
Чтение одного ряда данных
SELECT * FROM <имя_таблицы> LIMIT 1;
Поиск данных
SELECT * FROM <table_name> WHERE <column_name> = <value>;
Вставка данных
INSERT INTO <table_name> VALUES( <value_1>, <value_2> );
Update данные
UPDATE <table_name>
SET <column_1> = <value_1>, <column_2> = <value_2>
WHERE <column_1> = <value>;
Удалить все данные
DELETE FROM <имя_таблицы>;
Удалить конкретные данные
DELETE FROM <имя_таблицы>
WHERE <column_name> = <value>;
Пользователи
Список ролей
SELECT rolname FROM pg_roles;
CREATE USER <имя_пользователя> WITH PASSWORD '<пароль>';
DROP USER IF EXISTS <user_name>;
Alter пароль пользователя
ALTER ROLE <имя_пользователя> WITH PASSWORD '<пароль>';
Схема
Список схем
\dn
SELECT schema_name FROM information_schema.schemata;
SELECT nspname FROM pg_catalog.pg_namespace;
CREATE SCHEMA IF NOT EXISTS <schema_name>;
DROP SCHEMA IF EXISTS <schema_name> CASCADE;
Даты
Показать текущую дату ГГГГ-ММ-ДД
SELECT current_date;
Вычислить возраст между двумя датами
SELECT age(timestamp, timestamp);
Показать текущее время с учетом часового пояса
SELECT current_time;
Make даты с использованием целых чисел
SELECT make_date(2021,03,25);
Команды PostgreSQL
Таблицы
- | - |
---|---|
\d <table> |
Описать таблицу |
\d+ <table> |
Описать таблицу с подробностями |
\dt |
Список таблиц из текущей схемы |
\dt *.* |
Список таблиц из всех схем |
\dt <schema>.* |
Список таблиц для схемы |
\dp |
Список привилегий доступа к таблицам |
\det[+] |
Список иностранных таблиц |
Буфер запросов
- | - |
---|---|
\e [FILE] |
Редактировать буфер запроса (или файл) |
\ef [FUNC] |
Редактировать определение функции |
\p |
Показать содержимое |
\r |
Сбросить (очистить) буфер запроса |
\s [FILE] |
Показать историю или сохранить ее в файл |
\w FILE |
Записать буфер запроса в файл |
Информационный
- | - |
---|---|
\l[+] |
Список всех баз данных |
\dn[S+] |
Список схем |
\di[S+] |
Список индексов |
\du[+] |
Список ролей |
\ds[S+] |
Список последовательностей |
\df[antw][S+] |
Список функций |
\deu[+] |
Список отображений пользователей |
\dv[S+] |
Список представлений |
\dl |
Список больших объектов |
\dT[S+] |
Список типов данных |
\da[S] |
Список агрегатов |
\db[+] |
Список табличных пространств |
\dc[S+] |
Список преобразований |
\dC[+] |
Приведение к списку |
\ddp |
Список привилегий по умолчанию |
\dd[S] |
Показать описания объектов |
\dD[S+] |
Список доменов |
\des[+] |
Список иностранных серверов |
\dew[+] |
Список обёрток для иностранных данных |
\dF[+] |
Список конфигураций текстового поиска |
\dFd[+] |
Список словарей для поиска текста |
\dFp[+] |
Список парсеров для поиска текста |
\dFt[+] |
Список шаблонов текстового поиска |
\dL[S+] |
Список процедурных языков |
\do[S] |
Список операторов |
\dO[S+] |
Список колаций |
\drds |
Список ролевых настроек для каждой базы данных |
\dx[+] |
Список расширений |
S
: показать системные объекты, +
: дополнительная детализация
Соединение
- | - |
---|---|
\c [DBNAME] |
Подключение к новой базе данных |
\encoding [ENCODING] |
Показать или установить кодировку клиента |
\password [USER] |
Изменить пароль |
\conninfo |
Показать информацию |
Форматирование
- | - |
---|---|
\a |
Переключение между выравниванием и выравниванием |
\C [STRING] |
Установить заголовок таблицы или снять его, если он отсутствует |
\f [STRING] |
Показать или установить разделитель полей для невыровненных |
\H |
Переключение режима вывода HTML |
`\t [on | off]` |
\T [STRING] |
Установить или снять атрибуты тега HTML <table> |
`\x [on | off]` |
Ввод/вывод
- | - |
---|---|
\copy ... |
Импорт/экспорт таблицы См. также: copy |
\echo [STRING] |
Вывести строку |
\i FILE |
Выполнить файл |
\o [FILE] |
Экспорт всех результатов в файл |
\qecho [STRING] |
Вывести строку в выходной поток |
Переменные
- | - |
---|---|
\prompt [TEXT] NAME |
Установить переменную |
\set [NAME [VALUE]] |
Установить переменную (или перечислить все, если нет параметров) |
\unset NAME |
Удалить переменную |
Misc
- | - |
---|---|
\cd [DIR] |
Изменить каталог |
`\timing [on | off]` |
\! [COMMAND] |
Выполнить в оболочке |
\! ls -l |
Перечислить все в оболочке |
Большие объекты
\lo_export LOBOID FILE
\lo_import FILE [COMMENT]
\lo_list
\lo_unlink LOBOID
Разное
Резервное копирование
Используйте pg_dumpall для резервного копирования всех баз данных ‘‘‘shell-скрипт $ pg_dumpall -U postgres > all.sql
Использование pg_dump для резервного копирования базы данных
командный сценарий
$ pg_dump -d mydb -f mydb_backup.sql
-
-a
Выгружать только данные, но не схему -
-s
Дамп только схемы, без данных -
-c
Сбросить базу данных перед воссозданием -
-C
Создать базу данных перед восстановлением -
-t
Дамп только именованной таблицы (таблиц) -
-F
Формат (c
: custom,d
: directory,t
: tar) {.marker-none}
Для получения полного списка опций используйте команду pg_dump -?
.
Восстановление
Восстановление базы данных с помощью psql командный сценарий $ psql -U user mydb < mydb_backup.sql
Восстановление базы данных с помощью pg_restore
``Основной сценарий
$ pg_restore -d mydb mydb_backup.sql -c
-
-U
Укажите пользователя базы данных -
-c
Сбросить базу данных перед воссозданием -
-C
Создать базу данных перед восстановлением -
-e
Выход при возникновении ошибки -
-F
Format (c
: custom,d
: directory,t
: tar,p
: plain text sql(default)) {.marker-none}
Используйте pg_restore -?
для получения полного списка опций
Удаленный доступ
Получение местоположения файла postgresql.conf ‘‘‘shell-скрипт $ psql -U postgres -c ‘SHOW config_file’
Добавить в postgresql.conf
```Шелл-скрипт
listen_addresses = '*'
Добавьте в pg_hba.conf (в том же месте, что и postgresql.conf)
host all all 0.0.0.0/0 md5
host all all ::/0 md5
Перезапустите сервер PostgreSQL
$ sudo systemctl restart postgresql
Импорт/экспорт CSV
Экспорт таблицы в CSV-файл
\copy table TO '<path>' CSV
\copy table(col1,col1) TO '<path>' CSV
\copy (SELECT...) TO '<path>' CSV
Импорт CSV-файла в таблицу ``Основной сценарий \copy table FROM ‘’ CSV \copy table(col1,col1) FROM ‘’ CSV
См. также: [Copy](https://www.postgresql.org/docs/current/sql-copy.html)
Также см.
--------
- [Posgres-cheatsheet](https://gist.github.com/apolloclark/ea5466d5929e63043dcf#posgres-cheatsheet) _(gist.github.com)_