Команда pg в linux

Обновлено: 06.07.2024

В данной инструкции рассмотрены варианты создания резервных копий и восстановления баз СУБД PostgreSQL.

Все команды, которые приводятся ниже, должны выполняться из командной строки. В Linux — это окно терминала, в Windows — командная строка (cmd.exe) с переходом в папку установки PostgreSQL.

Создание резервных копий

Базовая команда

pg_dump <параметры> <имя базы> > <файл, куда сохранить дамп>

pg_dump users > /tmp/users.dump

Пользователь и пароль

Если резервная копия выполняется не от учетной записи postgres, необходимо добавить опцию -U с указанием пользователя:

pg_dump -U dmosk -W users > /tmp/users.dump

* где dmosk — имя учетной записи; опция W потребует ввода пароля.

Сжатие данных

Для экономии дискового пространства или более быстрой передачи по сети можно сжать наш архив:

pg_dump users | gzip > users.dump.gz

Скрипт для автоматического резервного копирования

Рассмотрим 2 варианта написания скрипта для резервирования баз PostgreSQL. Первый вариант — запуск скрипта от пользователя root для резервирования одной базы. Второй — запуск от пользователя postgres для резервирования всех баз, созданных в СУБД.

Для начала, создадим каталог, в котором разместим скрипт, например:

Вариант 1. Запуск от пользователя root; одна база.

PGPASSWORD=password
export PGPASSWORD
pathB=/backup
dbUser=dbuser
database=db

find $pathB \( -name "*-1[^5].*" -o -name "*-[023]?.*" \) -ctime +61 -delete
pg_dump -U $dbUser $database | gzip > $pathB/pgsql_$(date "+%Y-%m-%d").sql.gz

* где password — пароль для подключения к postgresql; /backup — каталог, в котором будут храниться резервные копии; dbuser — имя учетной записи для подключения к БУБД; pathB — путь до каталога, где будут храниться резервные копии.
* данный скрипт сначала удалит все резервные копии, старше 61 дня, но оставит от 15-о числа как длительный архив. После при помощи утилиты pg_dump будет выполнено подключение и резервирование базы db. Пароль экспортируется в системную переменную на момент выполнения задачи.

Для запуска резервного копирования по расписанию, сохраняем скрипт в файл, например, /scripts/postgresql_dump.sh и создаем задание в планировщике:

3 0 * * * /scripts/postgresql_dump.sh

* наш скрипт будет запускаться каждый день в 03:00.

Вариант 2. Запуск от пользователя postgres; все базы.

find $pathB \( -name "*-1[^5].*" -o -name "*-[023]?.*" \) -ctime +61 -delete

* где /backup — каталог, в котором будут храниться резервные копии; pathB — путь до каталога, где будут храниться резервные копии.
* данный скрипт сначала удалит все резервные копии, старше 61 дня, но оставит от 15-о числа как длительный архив. После найдет все созданные в СУБД базы, кроме служебных и при помощи утилиты pg_dump будет выполнено резервирование каждой найденной базы. Пароль нам не нужен, так как по умолчанию, пользователь postgres имеет возможность подключаться к базе без пароля.

Необходимо убедиться, что у пользователя postgre будет разрешение на запись в каталог назначения, в нашем примере, /backup/postgres.

Зададим в качестве владельца файла, пользователя postgres:

chown postgres:postgres /scripts/postgresql_dump.sh

Для запуска резервного копирования по расписанию, сохраняем скрипт в файл, например, /scripts/postgresql_dump.sh и создаем задание в планировщике:

crontab -e -u postgres

* мы откроем на редактирование cron для пользователя postgres.

3 0 * * * /scripts/postgresql_dump.sh

* наш скрипт будет запускаться каждый день в 03:00.

Права и запуск

Разрешаем запуск скрипта, как исполняемого файла:

chmod +x /scripts/postgresql_dump.sh

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

. или от пользователя postgres:

su - postgres -c "/scripts/postgresql_dump.sh"

На удаленном сервере

Если сервер баз данных находится на другом сервере, просто добавляем опцию -h:

pg_dump -h 192.168.0.15 users > /tmp/users.dump

* необходимо убедиться, что сама СУБД разрешает удаленное подключение. Подробнее читайте инструкцию Как настроить удаленное подключение к PostgreSQL.

Дамп определенной таблицы

Запускается с опцией -t <table> или --table=<table>:

pg_dump -t students users > /tmp/students.dump

* где students — таблица; users — база данных.

Размещение каждой таблицы в отдельный файл

Также называется резервированием в каталог. Данный способ удобен при больших размерах базы или необходимости восстанавливать отдельные таблицы. Выполняется с ипользованием ключа -d:

pg_dump -d customers > /tmp/folder

* где /tmp/folder — путь до каталога, в котором разместяться файлы дампа для каждой таблицы.

Только схемы (структуры)

Для резервного копирования без данных (только таблицы и их структуры):

pg_dump --schema-only users > /tmp/users.schema.dump

Также, внутри каждой базы могут быть свои схемы с данными. Если нам нужно сделать дамп именно той схемы, которая внутри базы, используем ключ -n:

pg_dump --schema-only users -n production > /tmp/users.schema_production.dump

* в данном примере мы создадим дамп структуры базы данных users только для схемы production.

Или полный дамп с данными для схемы внутри базы данных:

pg_dump users -n production > /tmp/users.production.dump

Только данные

pg_dump --data-only users > /tmp/users.data.dump

Использование pgAdmin

Данный метод хорошо подойдет для компьютеров с Windows и для быстрого создания резервных копий из графического интерфейса.

Запускаем pgAdmin - подключаемся к серверу - кликаем правой кнопкой мыши по базе, для которой хотим сделать дамп - выбираем Резервная копия:

Выбираем операцию резервного копирования для базы Postgresql

В открывшемся окне выбираем путь для сохранения данных и настраиваемый формат:

Настраиваем путь для резервного копирования

При желании, можно изучить дополнительные параметры для резервного копирования:

Дополнительные опции

После нажимаем Резервная копия - ждем окончания процесса и кликаем по Завершено.

Не текстовые форматы дампа

Другие форматы позволяют делать частичное восстановление, работать в несколько потоков и сжимать данные.

НАЗВАНИЕ
pg - фильтр для просмотра файлов на экране

ОПИСАНИЕ
Команда pg позволяет просматривать файлы страницами, равными по размеру экрану. Если имена файлов не заданы или задан символ -, то просматривается стандартный ввод. После вывода очередной страницы следует приглашение. Если пользователь нажмет клавишу возврата каретки, то будет выведена очередная страница; остальные возможности перечислены ниже.

Эта команда отличается от других команд страничного просмотра тем, что позволяет возвращаться по тексту назад. Как это делается - описано ниже.

Для определения характеристик терминала команда pg просматривает базу данных terminfo(4) для типа терминала, заданного переменной окружения TERM. Если переменная TERM не определена, предполагается, что тип терминала - dumb.

Команды, допустимые когда pg делает паузу между страницами, можно разделить на три группы: команды продолжения просмотра, поиска и изменения режима просмотра.

Перед командами продолжения просмотра может задаваться адрес - число, возможно со знаком, показывающее, с какого места файла продолжать просмотр. Этот адрес, в зависимости от команды, интерпретируется в единицах либо страниц, либо строк. Адрес со знаком задает точку относительно текущей страницы или строки, а адрес без знака - относительно начала файла. Для каждой команды существует адрес по умолчанию, который используется при отсутствии явного задания.

Команды продолжения просмотра и значения их аргументов по умолчанию: (+1)перевод_строки Вывод на экран очередной страницы. Адрес задается в страницах.

(+1)l Если задан относительный адрес, моделируется дви жение по файлу на заданное количество строк. Если задан абсолютный адрес, экран заполняется начиная с указанной строки.

(+1)d или CTRL+D Перемещение на пол-экрана вперед или назад.

Следующие команды адреса не требуют. . или CTRL+L Повторный вывод текущей страницы текста.

$ Вывод последней полной страницы файла. Необходимо соблюдать осторожность, если ввод выполняется через канал.

Перейдем к командам, предназначенным для поиска по шаблонам. Можно использовать регулярные выражения, описанные в команде ed(1). Они должны обязательно заканчиваться символом перевода строки, даже если задана опция -n. i/шаблон/ Поиск вперед до i-го (по умолчанию i = 1) появления шаблона. Поиск начинается сразу после текущей страницы и продолжается до конца файла, без перехода в начало.

Поиск назад до i-го (по умолчанию i = 1) появления шаблона. Поиск начинается сразу перед текущей страницей и продолжается до начала файла, без перехода в конец. Обозначение ^ предусмотрено для терминалов Adds 100, которые некорректно манипулируют символом ?.

Обычно найденная строка оказывается вверху экрана. Добавление символов m или b к команде поиска приведет к тому, что найденная строка окажется в центре или внизу экрана. Для восстановления исходной ситуации можно использовать суффикс t.

Пользователь команды pg может модифицировать режим просмотра следующими командами: in Начать работу с i-м следующим файлом командной строки; i - число без знака, по умолчанию 1.

ip Начать работу с i-м предыдущим файлом командной строки; i - число без знака, по умолчанию 1.

iw Продвинуться по файлу на размер окна. Если i задано, то размер окна устанавливается равным i.

s файл Сохранить входную информацию в заданном файле. Сохраняется только текущий просматриваемый файл. Пробел между s и файлом необязателен. Эта команда должна заканчиваться символом перевода строки, даже если задана опция -n.

h Вывести справку о доступных командах.

q или Q Закончить просмотр файлов.

!команда Команда передается интерпретатору, имя которого представляет собой значение переменной окружения SHELL. Если она недоступна, то выбирается интерпретатор по умолчанию. Эта команда должна всегда заканчиваться символом перевода строки, даже если задана опция -n.

В процессе вывода на терминал пользователь может в любой момент нажать клавиши завершения или прерывания [см. stty(1)]. В результате этого вывод будет прекращен и появится приглашение. После этого пользователь может ввести одну из вышеперечисленных команд обычным образом. К сожалению, при этом теряется часть текста, т.к. символы, находящиеся в выходной очереди к терминалу, при появлении сигнала завершения пропадают. Если стандартный вывод назначен не на терминал, то команда pg действует точно так же, как cat(1), за исключением того, что заголовок выводится перед каждым файлом (если их несколько).

ПРИМЕР
Примером использования команды pg может служить чтение новостей:

СМ. ТАКЖЕ
ed(1), grep(1).
terminfo(4) в Справочнике программиста.

СЮРПРИЗЫ
Если позиции табуляции установлены не через восемь, возможны нежелательные эффекты.

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

3.10. Основные команды

В этом подразделе описываются команды системы UNIX, необходимые для доступа к файлам и для их использования. В табл. 4 перечислены основные команды.

Таблица 4
Основные команды

3.10.1. Команды cat, pg, pr - распечатать содержимое файла

В системе UNIX существует три команды для распечатки содержимого файлов: cat, pg, pr. Команда cat выводит содержимое файла на экран терминала или, если вы укажете, в другой файл или новую команду.

Команда pg особенно полезна, если вы хотите прочитать содержимое большого файла, т.к. она отображает текст файла постранично.

Команда pr форматирует указанные файлы и отображает на терминал или направляет вывод на печать.

3.10.1.1. Команда cat

Команда cat отображает содержимое файла или файлов. Например, предположим, вы находитесь в справочнике letters и вы хотите отобразить содержимое файла johnson. Введите команду cat johnson и на экране появится следующая информация:

Чтобы отобразить содержимое двух или более файлов, перечислите имена этих файлов в командной строке. Например, чтобы распечатать содержимое файлов johnson и sanders, введите команду:

Команда cat прочитает файлы johnson и sanders и распечатает их содержимое на терминале.

3.10.1.2. Команда pg

Команда pg позволяет вам распечатывать содержимое файла(ов) на терминал. После того, как pg отобразит страницу текста, она напечатает подсказку "двоеточие" (:), которая служит сигналом ввода вашей инструкции. Возможной инструкцией может быть запрос вывода следующей страницы содержимого файла, либо запрос на поиск указанного символа по образцу. В табл. 5 приведены допустимые инструкции команды pg.

Таблица 5
Инструкции команды pg

Примечание. Некоторые команды могут быть введены с цифрой впереди. Например:

Команда pg особенно полезна, если вы читаете большой файл или серию файлов, т.к. пауза после каждой страницы дает возможность для анализа информации. Размер отображаемой страницы зависит от типа терминала. Например, терминал способен отображать 24 строки; значит страница текста определяется 23 строки плюс одна строка для двоеточия.

Если файл имеет менее 23 строки, то длина страницы будет равна числу строк в файле плюс одна строка (для двоеточия).

Например, чтобы отобразить содержимое файла outline из справочника draft, введите комнаду:

Первая страница текста появится на экране. Так как в файле больше строк, чем поместилось на одной странице, то внизу экрана появится двоеточие. Когда вы будете готовы читать текст дальше, нажмите клавишу <RETURN> и pg напечатает следующую страницу текста.

Экран будет выглядеть следующим образом: Когда весь файл будет прочитан, в последней строке появится:

Подсказка : (двоеточие) предлагает вам ввести новую команду.

Если вы в ответ на подсказку : нажмете клавишу <RETURN>, то вновь появится подсказка. Вы можете воспользоваться одной из ранее перечисленных допустимых команд.

  • сколько строк печатать;
  • сколько колонок печатать;
  • как очистить экран;
  • как высветить подсказку или другие слова;
  • как стереть текущую строку.

Чтобы определить тип терминала, присвойте код вашего терминала переменной TERM в файле .profile (см. разд. 9).

В команде pg могут применяться все допустимые ключи.

3.10.1.3. Команда pr

Команда pr используется для форматирования и печати содержимого файла. Она формарует заголовки, количество страниц и печатает файл на экране терминала.

Если вы не выберете ни один из допустимых ключей, то команда pr сформирует вывод в одну колонку, страница будет содержать 66 строк и тексту будет предшествовать короткий заголовок. Заголовок состоит из 5 строк: две пустые строки, строка, содержащая дату, время, имя файла и номер строницы и далее две пустые строки.

Команда pr часто используется с командой lp для получения копии текста на бумаге в том виде, в каком он был введен в файл.

Например, чтобы проанализировать содержимое файла johnson, введите команду: На экране будет следующая информация:

Пустые строки после последней строки символов в файле pr добавляет к выводу, так что каждая страница содержит в общем 66 строк. Если вы работаете с видеотерминалом, который имеет 24 строки, то все 66 строк отформатированного текста без пауз распечатаются на экране. Это означает, что первые 42 строки невозможно будет прочитать, т.к. вы не можете вернуть экран или два назад.

В этом случае воспользуйтесь:
^s - для прерывания потока выводимого на терминал
и
^q - для продолжения вывода на экран.

Каналы помогают объединять две или более команд одновременно и запускать их последовательно. Вы можете использовать мощные команды, которые могут мгновенно выполнять сложные задачи.

Давайте разберемся в этом на примере.

Когда вы используете команду cat для просмотра файла, который занимает несколько страниц, приглашение быстро переходит к последней странице файла, и вы не видите содержимое в середине.

cat filename | less

Иллюстрация прояснила бы это:

komandi-Grep-Sort

Вместо «меньше» можно также использовать.

cat Filename | pg

cat Filename | pg

И вы можете просмотреть файл в удобоваримых битах и ​​прокрутить вниз, просто нажав клавишу ввода.

prosmotret-file

Предположим, вы хотите найти конкретную информацию по почтовому индексу из текстового файла.

Вы можете вручную просмотреть содержимое, чтобы отследить информацию. Лучшим вариантом является использование команды grep. Он просканирует документ для получения необходимой информации и представит результат в желаемом формате.

Синтаксис:

Посмотрим на это в действии:

komanda-grep

Здесь команда grep провела поиск в файле «sample» по строке «Apple» и «Eat».

С этой командой можно использовать следующие параметры.

Вариант Функция
-v Показывает все строки, которые не соответствуют искомой строке
-c Отображает только количество совпадающих строк
-n Показывает соответствующую строку и ее номер
-i Учитывать оба регистра (верхний и нижний)
-l Показывает только имя файла со строкой

Используя параметр «i», grep отфильтровал строку «a» (без учета регистра) из всех строк.

iltr-stroki-a

Команда sort

Эта команда помогает отсортировать содержимое файла по алфавиту.

Синтаксис этой команды:

Рассмотрим содержимое файла.

soderzhimoe-fila

Использование команды сортировки

ispolzovanie-komandi-sortirovki

У этой команды также есть расширения , и они перечислены ниже.

Вариант Функция
Обратная сортировка
-n Сортировка численно
-f Сортировка без учета регистра

Пример ниже показывает обратную сортировку содержимого в файле «abc».

Linux / Unix конвейеры, команда Grep & Sort

Что такое фильтр?

В Linux есть множество команд фильтрации, таких как awk, grep, sed, spell и wc. Фильтр принимает входные данные от одной команды, выполняет некоторую обработку и выдает выходные данные.

filtr

Давайте разберемся в этом на примере.

file-sample

Мы хотим выделить только те строки, которые не содержат символа «а», но результат должен быть в обратном порядке.

Вся работа с PostgreSQL осуществляется под пользователем postgres.

Основные команды PostgreSQL в интерактивном режиме:

Работа с 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 -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, в сжатом виде

Создание бекапа базы mydb, в виде обычного текстового файла, включая команду для создания БД

Создание бекапа базы mydb, в сжатом виде, с таблицами которые содержат в имени payments

Дамп данных только одной, конкретной таблицы. Если нужно создать резервную копию нескольких таблиц, то имена этих таблиц перечисляются с помощью ключа -t для каждой таблицы.

Создание резервной копии с сжатием в 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 — выходной формат дампа, custom, tar, или plain text.
  • -t, —table=TABLE — указываем определенную таблицу для дампа.
  • -v, —verbose — вывод подробной информации.
  • -D, —attribute-inserts — дамп используя команду INSERT с списком имен свойств.

Бекап всех баз данных используя команду pg_dumpall.

Восстановление таблиц из резервных копий (бэкапов):

psql — восстановление бекапов, которые хранятся в обычном текстовом файле (plain text);
pg_restore — восстановление сжатых бекапов (tar);

Восстановление всего бекапа с игнорированием ошибок

Восстановление всего бекапа с остановкой на первой ошибке

Для восстановления из tar-арихива нам понадобиться сначала создать базу с помощью CREATE DATABASE mydb; (если при создании бекапа не была указана опция -C) и восстановить

Читайте также: