Запуск postgresql з командного рядка. Установка PostgreSQL – Windows, Mac OS X, Linux. Приклади створення резервних копій

06.08.2020 Огляди

Щоб будь-хто зміг звернутися до бази даних, необхідно спочатку запустити сервер баз даних. Програма сервера називається postgres. Для роботи програма postgres повинна знати, де знайти дані, які вона використовуватиме. Вказати це місце дозволяє параметр -D. Таким чином, найпростіше запустити сервер, виконавши команду:

$ postgres -D /usr/local/pgsql/data

в результаті якої сервер продовжить роботу як процес переднього плану. Запускати цю команду слід під ім'ям облікового запису PostgreSQL. Без параметра -D сервер спробує використовувати каталог даних, вказаний у змінної оточення PGDATA. Якщо ця змінна не визначена, сервер не буде запущений.

Однак зазвичай краще запускати postgres у фоновому режимі. Для цього можна застосувати звичайний синтаксис, прийнятий в оболонці Unix:

$ postgres -D /usr/local/pgsql/data >logfile 2>&1 &

Важливо де-небудь зберігати інформацію, яку виводить сервер у канали stdout і stderr, як показано вище. Це корисно і для цілей аудиту, і для діагностики проблем. (Поглиблені роботи з файлами журналів розглядаються в Розділі 24.3.)

Програма postgres також приймає декілька інших параметрів командного рядка. За додатковою інформацією зверніться до довідкової сторінки postgresі до наступного Розділу 19 .

Такий варіант запуску досить швидко може виявитися незручним. Тому для спрощення подібних завдань пропонується допоміжна програма pg_ctl. Наприклад:

Pg_ctl start -l logfile

запустить сервер у фоновому режимі і направить повідомлення сервера, що виводяться, у вказаний файл журналу. Параметр -D нею має те значення, що й у програми postgres . pg_ctl також можна зупинити сервер.

Зазвичай виникає бажання, щоб сервер баз даних сам запускався під час завантаження операційної системи. Скрипти автозапуску для різних системрізні, але у складі PostgreSQL пропонується кілька типових скриптів у каталозі contrib/start-scripts. Для встановлення такого скрипта в системі потрібні права root.

У різних системах прийнято різні угоди про порядок запуску служб у процесі завантаження. У багатьох системах використовується файл /etc/rc.local або /etc/rc.d/rc.local . В інших застосовуються каталоги init.d або rc.d. Однак за будь-якого варіанта запускатися сервер повинен від імені користувача PostgreSQL, але не rootабо будь-якого іншого користувача. Тому команду запуску зазвичай слід записувати у формі su postgres -c "...". Наприклад:

Su postgres -c "pg_ctl start -D /usr/local/pgsql/data -l serverlog"

Нижче наведено конкретніші пропозиції для кількох основних ОС. (Замість вказаних нами шаблонних значень необхідно підставити правильний шлях до каталогу даних та фактичне ім'я користувача.)

    Для запуску у FreeBSD скористайтесь файлом contrib/start-scripts/freebsd на дереві вихідного коду PostgreSQL.

    У OpenBSD додайте до файлу /etc/rc.local наступні рядки:

    If [ -x /usr/local/pgsql/bin/pg_ctl -a -x /usr/local/pgsql/bin/postgres]; then su -l postgres -c "/usr/local/pgsql/bin/pg_ctl start -s -l /var/postgresql/log -D /usr/local/pgsql/data" echo -n "postgresql" fi

    У системах Linuxви можете або додати

    /usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/data

    у /etc/rc.d/rc.local або /etc/rc.local , або скористатися файлом contrib/start-scripts/linux у дереві вихідного коду PostgreSQL .

    Використовуючи systemd , можна застосувати наступний файл опису служби (наприклад, /etc/systemd/system/postgresql.service):

    Description=PostgreSQL database server Documentation=man:postgres(1) Type=notify User=postgres ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data ExecReload=/bin/kill -HUP $ MAINPID KillMode = mixed KillSignal = SIGINT TimeoutSec = 0 WantedBy = multi-user.target

    Для використання Type=notify потрібно, щоб сервер був скомпілюваний із зазначенням configure --with-systemd .

    На особливу увагу заслуговує значення тайм-ауту. На момент написання цієї документації за умовчанням у systemd прийнято тайм-аут 90 секунд, так що процес, який не повідомив про свою готовність за цей час, буде знищений. Але серверу PostgreSQL при запуску може знадобитися виконати відновлення після збою, так що перехід у стан готовності може зайняти набагато більше часу. Запропоноване значення 0 вимикає логіку тайм-ауту.

    У NetBSD можна використовувати скрипт запуску для FreeBSD або для Linux залежно від переваг.

    У Solaris , створіть файл з ім'ям /etc/init.d/postgresql , що містить наступний сток:

    Su - postgres -c "/usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/data"

Коли сервер працює, ідентифікатор його процесу (PID) зберігається у файлі postmaster.pid у каталозі даних. Це дозволяє виключити запуск декількох екземплярів сервера з одним каталогом даних, а також може бути корисним для вимкнення сервера.

18.3.1. Збої під час запуску сервера

Є кілька поширених причин, через які сервер може не запуститися. Щоб зрозуміти, чим викликаний збій, перегляньте файл журналу сервера або запустіть сервер вручну (не перенаправляючи його потоки стандартного виводу та помилок) і проаналізуйте повідомлення, що виводяться. Нижче ми розглянемо деякі з найчастіших повідомлень про помилки докладніше.

LOG: не може бути IPv4 адреса "127.0.0.1": Address already in use HINT: Чи є інший postmaster already running on port 5432? If not, wait a few seconds and retry. FATAL: could not create any TCP/IP sockets

Це зазвичай означає саме те, що написано: ви намагаєтеся запустити сервер на тому порту, на якому вже працює інший. Однак, якщо повідомлення ядра не Address already in use або подібне, можлива інша проблема. Наприклад, при спробі запустити сервер із номером зарезервованого порту будуть видані такі повідомлення:

$ postgres -p 666 LOG: не може бути IPv4 адреса "127.0.0.1": Вихід знижений HINT: Чи є інший postmaster абовикористовується на port 666? If not, wait a few seconds and retry. FATAL: could not create any TCP/IP sockets

Наступне повідомлення:

FATAL: не може створювати shared memory segment: Invalid argument DETAIL: Потрібна система call була shmget(key=5440001, size=4011376640, 03600).

може означати, що встановлений для вашого ядра граничний розмір пам'яті, що розділяється, занадто малий для робочої області, яку намагається створити PostgreSQL (у даному прикладі 4011376640 байт). Можливо також, що у вашому ядрі взагалі відсутня підтримка пам'яті, що розділяється, в стилі System-V. Як тимчасове рішення можна спробувати запустити сервер з меншою кількістю буферів (), але в результаті вам, швидше за все, доведеться переконфігурувати ядро ​​і збільшити допустимий розмір пам'яті, що розділяється. Ви також можете побачити це повідомлення при спробі запустити кілька серверів на одному комп'ютері, якщо запрошений ними обсяг пам'яті, що розділяється, в сумі перевищує цю межу.

Повідомлення:

FATAL: не можна створювати semaphores: Не простий робочий стіл на пристрої.

неозначає, що у вас закінчилося місце на диску. Це означає, що встановлене у вашому ядрі граничне число семафорів System V менше, ніж кількість семафорів, яке намагається створити PostgreSQL. Як і в попередньому випадку, можна спробувати обійти цю проблему, запустивши сервер з меншою кількістю допустимих підключень (max_connections), але врешті-решт вам доведеться збільшити цю межу в ядрі.

Якщо ви отримуєте помилку « illegal system call »(невірний системний виклик), то, найімовірніше, ваше ядро ​​зовсім не підтримує пам'ять або семафори, що розділяється. У цьому випадку вам залишається лише переконфігурувати ядро ​​та включити їхню підтримку.

Налаштування засобів IPC у стилі System V описується у .

18.3.2. Проблеми із підключеннями клієнтів

Хоча помилки підключень, можливі на стороні клієнта, досить різноманітні і залежать від додатків, але кілька проблем можуть бути пов'язані безпосередньо з тим, як був запущений сервер. Опис помилок, відмінних від наведених нижче, слід шукати в документації відповідної клієнтської програми.

Psql: could not connect to server: Connection refusedЧи є сервер навігації на host "server.joe.com" і приймає TCP/IP connections on port 5432?

Це загальна проблема « я не можу знайти сервер і почати взаємодію з ним» . Наведене вище повідомлення свідчить про спробу встановити підключення через TCP/IP. Дуже часто це пояснюється тим, що сервер просто забули налаштувати для роботи по протоколу TCP/IP.

Крім того, при спробі встановити підключення до локальному серверучерез Unix-сокет можна отримати таке повідомлення:

Psql: можна не підключатися до сервера: Немає такого файлу або directory Це сервер керувати локально і пристосовувати зв'язки на Unix domain socket "/tmp/.s.PGSQL.5432"?

Шлях в останньому рядку допомагає зрозуміти, чи правильною адресою намагається підключитися клієнт. Якщо сервер насправді не приймає підключення за цією адресою, зазвичай видається повідомлення ядра Connection refused (У з'єднанні відмовлено) або No such file or directory (Немає такого файлу чи каталогу), наведене вище. (Важливо розуміти, що Connection refused у цьому контексті неозначає, що сервер отримав запит на підключення та відкинув його. У цьому випадку були б видані інші повідомлення, наприклад, показані в Розділі 20.4.) Інші повідомлення про помилки, наприклад, Connection timed out (Тайм-аут з'єднання) можуть сигналізувати про більш фундаментальні проблеми, наприклад, про порушення мережевих з'єднань.

Якщо ви зареєстровані як привілейований користувач root, то замість виконання команд su - с, знайомих на попередніх етапах, вам доведеться увійти в систему під ім'ям postgres, створеним на першому етапі. Після входу під ім'ям postgres введіть команду, наведену у лістингу 2.15.

Лістинг 2.15. Ініціалізація бази даних.

$ /usr/local/pgsql/bin/initdb – D /usr/1ocal/pgsql/data

Ключ - D визначає каталог, у якому зберігатимуться дані. Те саме можна зробити за допомогою змінного середовища PCDATA. Якщо значення змінної PCDATA встановлено, ключ - D не є обов'язковим. Якщо ви волієте зберігати файли даних в іншому каталозі, переконайтеся, що користувач postgres має право запису в цей каталог. Приблизний результат ініціалізації initdb наведено у лістингу 2.16.

Лістинг 2.16. Вихідні дані initdb.

$ /usr/local/pgsql/bin/intidb – D /usr/local/pgsql/data Ця система системи буде оновлена ​​з username "postgres." Цей user буде own all the data files and must also own the server process. Creating directory /usr/pgsql/data Creating directory /usr/pgsqi/data/case Creating directory /usr/pgsql/data/global Creating directory /usr/pgsql/pg_xlog Creating tempiatel database in /usr/local/pgsql/data/base /l DEBUG: database system був shut down at 2001-08-24 16:36:35 PDT DEBUG: Checkpoint record at (0.8) DEBUG: Redo record at (0. 8): Undo record at (0. 8) : Shutdown TRUE DEBUG: NextTransactionld: 514; NextOid: 16384 DEBUG: Database system є в production statu Creating global relations in /usr/local/pgsql/data/global Q. 108) DEBUG: Redo record at (0. 108): Undo record at (0. 0); Shutdown TRUE DEBUG: NextTransactionld: 514: NextOid: 17199 DEBUG: Database system is in production state Initializing pg_shadow Створення unlimited row width for system tables. Creating system views. Loading pg_description Налагодження останніхсоід. Vacuuming database. Copying tempiatel to tempiateO. Success. Ви можете заново запустити ваш сервер Database using: /usr/local/pgsql/bin/postmaster – D /usr/local/pgsql/data or /usr/local/pgsql/bin/pg_ct1 – D /usr/local/pgsql/data - 1 logfile start

Примітка
Щоб PostgreSQL використовував інший каталог даних, вкажіть шлях до цього каталогу з ключем - О. Каталог повинен бути попередньо ініціалізований командою initdb
.

Наприкінці вихідних даних команди initdb наводиться інформація про два варіанти запуску сервера PostgreSQL. У першому варіанті процес postmaster запускається в активному режимі. Після введення команди, наведеної в лістингу 2.17, запрошення командного рядка стає недоступним, доки процес postmaster не буде зупинено клавішами CTRL + C.

Лістинг 2.17. Запуск postmaster в активному режимі.

$ /usr/local/pgsql/bin/postmaster – D /usr/local/pgsql/data DEBUG: Redo record at (0. 1522064): Undo record at (0. 8): Shutdown TRUE DEBUG: NextTransactionld: 615: NextOid: 18720

Запуск PostgreSQL в активному режимі зазвичай не потрібно. Автори рекомендують використовувати другу команду, яка запускає postmaster у фоновому режимі. Як показано у лістингу 2.18, процес запускається командою pg_ct1.

Лістинг 2.18. Запуск postmaster у фоновому режимі.

$ /usr/1ocal/pgsqVbin/pg_ctl – D /usr/local/pgsql/data – 1 /tmp/pgsql.log start postmaster successfully started

Головна різниця між цими двома командами полягає в тому, що у другому варіанті postmaster запускається у фоновому режимі, а вся налагоджувальна інформація надсилається у файл /tmp/pgsql.log. При нормальній роботі зазвичай рекомендується запускати postmaster у фоновому режимі з увімкненим веденням журналу.

Примітка
Додаток pg_ctl запускає та зупиняє сервер PostgreSQL додатковою інформацієюпро цю команду звертайтесь до розділу 9
.

Щоб будь-хто зміг звернутися до бази даних, необхідно спочатку запустити сервер баз даних. Програма сервера називається postgres. Для роботи програма postgres повинна знати, де знайти дані, які вона використовуватиме. Вказати це місце дозволяє параметр -D. Таким чином, найпростіше запустити сервер, виконавши команду:

$ postgres -D /usr/local/pgsql/data

в результаті якої сервер продовжить роботу як процес переднього плану. Запускати цю команду слід під ім'ям облікового запису PostgreSQL. Без параметра -D сервер спробує використати каталог даних, вказаний у змінній оточенні PGDATA . Якщо ця змінна не визначена, сервер не буде запущений.

Однак зазвичай краще запускати postgres у фоновому режимі. Для цього можна застосувати звичайний синтаксис, прийнятий в оболонці Unix:

$ postgres -D /usr/local/pgsql/data >logfile 2>&1 &

Важливо де-небудь зберігати інформацію, яку виводить сервер у канали stdout і stderr, як показано вище. Це корисно і для цілей аудиту, і для діагностики проблем. (Поглиблені роботи з файлами журналів розглядаються в Розділі 24.3.)

Програма postgres також приймає кілька інших параметрів командного рядка. За додатковою інформацією зверніться до довідкової сторінки postgresі до наступного Розділу 19 .

Такий варіант запуску досить швидко може виявитися незручним. Тому для спрощення подібних завдань пропонується допоміжна програма pg_ctl. Наприклад:

Pg_ctl start -l logfile

запустить сервер у фоновому режимі і направить повідомлення сервера, що виводяться, у вказаний файл журналу. Параметр -D нею має те значення, що й у програми postgres . pg_ctl також можна зупинити сервер.

Зазвичай виникає бажання, щоб сервер баз даних сам запускався під час завантаження операційної системи. Скрипти автозапуску для різних систем різні, але у складі PostgreSQL пропонується кілька типових скриптів у каталозі contrib/start-scripts. Для встановлення такого скрипта в системі потрібні права root.

У різних системах прийнято різні угоди про порядок запуску служб у процесі завантаження. У багатьох системах використовується файл /etc/rc.local або /etc/rc.d/rc.local . В інших застосовуються каталоги init.d або rc.d. Однак за будь-якого варіанта запускатися сервер повинен від імені користувача PostgreSQL, але не rootабо будь-якого іншого користувача. Тому команду запуску зазвичай слід записувати у формі su postgres -c "...". Наприклад:

Su postgres -c "pg_ctl start -D /usr/local/pgsql/data -l serverlog"

Нижче наведено конкретніші пропозиції для кількох основних ОС. (Замість вказаних нами шаблонних значень необхідно підставити правильний шлях до каталогу даних та фактичне ім'я користувача.)

    Для запуску у FreeBSD скористайтесь файлом contrib/start-scripts/freebsd у дереві вихідного коду PostgreSQL.

    У OpenBSD додайте до файлу /etc/rc.local наступні рядки:

    If [ -x /usr/local/pgsql/bin/pg_ctl -a -x /usr/local/pgsql/bin/postgres]; then su -l postgres -c "/usr/local/pgsql/bin/pg_ctl start -s -l /var/postgresql/log -D /usr/local/pgsql/data" echo -n "postgresql" fi

    У системах Linux ви можете або додати

    /usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/data

    у /etc/rc.d/rc.local або /etc/rc.local , або скористатися файлом contrib/start-scripts/linux у дереві вихідного коду PostgreSQL .

    Використовуючи systemd , можна застосувати наступний файл опису служби (наприклад, /etc/systemd/system/postgresql.service):

    Description=PostgreSQL database server Documentation=man:postgres(1) Type=notify User=postgres ExecStart=/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data ExecReload=/bin/kill -HUP $ MAINPID KillMode = mixed KillSignal = SIGINT TimeoutSec = 0 WantedBy = multi-user.target

    Для використання Type=notify потрібно, щоб сервер був скомпілюваний із зазначенням configure --with-systemd .

    На особливу увагу заслуговує значення тайм-ауту. На момент написання цієї документації за умовчанням у systemd прийнято тайм-аут 90 секунд, так що процес, який не повідомив про свою готовність за цей час, буде знищений. Але серверу PostgreSQL при запуску може знадобитися виконати відновлення після збою, так що перехід у стан готовності може зайняти набагато більше часу. Запропоноване значення 0 вимикає логіку тайм-ауту.

    У NetBSD можна використовувати скрипт запуску для FreeBSD або для Linux залежно від переваг.

    У Solaris , створіть файл з ім'ям /etc/init.d/postgresql , що містить наступний сток:

    Su - postgres -c "/usr/local/pgsql/bin/pg_ctl start -l logfile -D /usr/local/pgsql/data"

Коли сервер працює, ідентифікатор його процесу (PID) зберігається у файлі postmaster.pid у каталозі даних. Це дозволяє виключити запуск декількох екземплярів сервера з одним каталогом даних, а також може бути корисним для вимкнення сервера.

18.3.1. Збої під час запуску сервера

Є кілька поширених причин, через які сервер може не запуститися. Щоб зрозуміти, чим викликаний збій, перегляньте файл журналу сервера або запустіть сервер вручну (не перенаправляючи його потоки стандартного виводу та помилок) і проаналізуйте повідомлення, що виводяться. Нижче ми розглянемо деякі з найчастіших повідомлень про помилки докладніше.

LOG: не може бути IPv4 socket: Address already in use HINT: Чи є інший postmaster already running on port 5432? If not, wait a few seconds and retry. FATAL: не можна створювати TCP/IP listen socket

Це зазвичай означає саме те, що написано: ви намагаєтеся запустити сервер на тому порту, на якому вже працює інший. Однак, якщо повідомлення ядра не Адреса вже використовується або подібне, можлива інша проблема. Наприклад, при спробі запустити сервер із номером зарезервованого порту будуть видані такі повідомлення:

$ postgres -p 666 LOG: якби не було IPv4 ліхтаря: Захищена знижена HINT: Чи є інший postmaster абовикористовується на port 666? If not, wait a few seconds and retry. FATAL: не можна створювати TCP/IP listen socket

Наступне повідомлення:

FATAL: не може створювати shared memory segment: Invalid argument DETAIL: Потрібна система call була shmget(key=5440001, size=4011376640, 03600).

може означати, що встановлений для вашого ядра граничний розмір пам'яті, що розділяється, занадто малий для робочої області, яку намагається створити PostgreSQL (в даному прикладі 4011376640 байт). Можливо також, що у вашому ядрі взагалі відсутня підтримка пам'яті, що розділяється, в стилі System-V. Як тимчасове рішення можна спробувати запустити сервер з меншою кількістю буферів (), але в результаті вам, швидше за все, доведеться переконфігурувати ядро ​​і збільшити допустимий розмір пам'яті, що розділяється. Ви також можете побачити це повідомлення при спробі запустити кілька серверів на одному комп'ютері, якщо запрошений ними обсяг пам'яті, що розділяється, в сумі перевищує цю межу.

Повідомлення:

FATAL: не можна створювати semaphores: Не простий робочий стіл на пристрої.

неозначає, що у вас закінчилося місце на диску. Це означає, що встановлене у вашому ядрі граничне число семафорів System V менше, ніж кількість семафорів, яке намагається створити PostgreSQL. Як і в попередньому випадку, можна спробувати обійти цю проблему, запустивши сервер з меншою кількістю допустимих підключень (max_connections), але врешті-решт вам доведеться збільшити цю межу в ядрі.

Якщо ви отримуєте помилку « illegal system call »(невірний системний виклик), то, найімовірніше, ваше ядро ​​зовсім не підтримує пам'ять або семафори, що розділяється. У цьому випадку вам залишається лише переконфігурувати ядро ​​та включити їхню підтримку.

Налаштування засобів IPC у стилі System V описується у .

18.3.2. Проблеми із підключеннями клієнтів

Хоча помилки підключень, можливі на стороні клієнта, досить різноманітні і залежать від додатків, але кілька проблем можуть бути пов'язані безпосередньо з тим, як був запущений сервер. Опис помилок, відмінних від наведених нижче, слід шукати в документації відповідної клієнтської програми.

Psql: можна не підключатися до сервера: З'єднання буде здійснено з сервером керування на комп'ютері "server.joe.com" і пристосування TCP/IP до 5432?

Це загальна проблема « я не можу знайти сервер і почати взаємодію з ним» . Наведене вище повідомлення свідчить про спробу встановити підключення через TCP/IP. Дуже часто це пояснюється тим, що сервер просто забули налаштувати для роботи по протоколу TCP/IP.

Крім того, при спробі встановити підключення до локального сервера через Unix-сокет можна отримати таке повідомлення:

Psql: можна не підключатися до сервера: Немає такого файлу або directory Це сервер керувати локально і пристосовувати зв'язки на Unix domain socket "/tmp/.s.PGSQL.5432"?

Шлях в останньому рядку допомагає зрозуміти, чи правильною адресою намагається підключитися клієнт. Якщо сервер насправді не приймає підключення за цією адресою, зазвичай видається повідомлення ядра Connection refused (У з'єднанні відмовлено) або No such file or directory (Немає такого файлу чи каталогу), наведене вище. (Важливо розуміти, що Connection refused у цьому контексті неозначає, що сервер отримав запит на підключення та відкинув його. У цьому випадку були б видані інші повідомлення, наприклад, показані в Розділі 20.4.) Інші повідомлення про помилки, наприклад, Connection timed out (Тайм-аут з'єднання) можуть сигналізувати про більш фундаментальні проблеми, наприклад, про порушення мережевих з'єднань.

Все привіт сьогодні хочу зробити невелику пам'ятку про основні команди PostgreSQL. Працювати з PosgreSQL можна як в інтерактивному режимі, так і командного рядка. Програма – psql. Я впевнений, що даний списоквиявиться дуже корисним і заощадить час на пошук по різних ресурсах. Нагадую, що це open-source проект, на основі СУБД Postgres, вийшла в 1986 році, вона розробляється всесвітньою групою розробників PGDG, по суті це 5-8 осіб, але незважаючи на це вона дуже інтенсивно розвивається, вводячи все нові функції та виправляючи старі баги та помилки.

Основні команди 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) – вихід із програми

Робота з PostgreSQL з командного рядка:

  • -c (або –command) – запуск команди SQL без виходу до інтерактивного режиму
  • -f file.sql - виконання команд із файлу file.sql
  • -l (або –list) – виводить список доступних базданих
  • -U (або –username) – вказуємо ім'я користувача (наприклад, postgres)
  • -W (або –password) – запрошення на введення пароля
  • -d dbname – підключення до БД dbname
  • -h – ім'я хоста (сервера)
  • -s – покроковий режим, тобто потрібно буде підтверджувати всі команди
  • –S – однорядковий режим, тобто перехід на новий рядокбуде виконувати запит (позбавляє від; в кінці конструкції SQL)
  • -V – версія PostgreSQL без входу до інтерактивного режиму

Приклади:

psql -U postgres -d dbname -c “CREATE TABLE my(some_id serial PRIMARY KEY, some_text text);” - Виконання команди в базі dbname.

psql -d dbname -H -c "SELECT * FROM my" -o my.html - виведення результату запиту в html-файл.

Утиліти (програми) 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

psql -U postgres -d mydb -f mydb

Я думаю, база даних postgresql тепер буде більш зрозуміла вам. Сподіваюся цей список команд PostgreSQL був для вас корисним.