powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вызов командной строки из plpgsql
11 сообщений из 11, страница 1 из 1
Вызов командной строки из plpgsql
    #40081108
alex407
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!

Не смог найти как выполнять командную строку из plpgsql. Конкретно интересует pg_dump и pg_restore.
Нашел только вариант с COPY ... FROM PROGRAM.
Это единственный правильный вариант?
...
Рейтинг: 0 / 0
Вызов командной строки из plpgsql
    #40081149
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex407
Привет!
Не смог найти как выполнять командную строку из plpgsql.

месье знает толк в извращениях
...
Рейтинг: 0 / 0
Вызов командной строки из plpgsql
    #40081167
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex407
Привет!

Не смог найти как выполнять командную строку из plpgsql. Конкретно интересует pg_dump и pg_restore.
Нашел только вариант с COPY ... FROM PROGRAM.
Это единственный правильный вариант?


Только copy from program
это единственный вариант
но в 99% случаев если вам такое надо вы делаете что то ОЧЕНЬ НЕ ТО на уровне архитектуры.
Не надо так.

А уж тем более не надо так оформлять вызовы pg_dump/pg_restore.

pl/pgsql не для этого.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Вызов командной строки из plpgsql
    #40081186
alex407
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, что тут поделаешь, если то, что есть на некоторых СУБД (BACKUP DATABASE, RESTORE DATABASE), тут можно сделать только с помощью извращений.
У меня задача, сделать бекап, восстановить его на том же сервере под другим именем, сделать кое-что с данными и забекапить это в нужно место. Делать все это надо к удаленного компа.
Тривиальная задача в том же MSSQL.
...
Рейтинг: 0 / 0
Вызов командной строки из plpgsql
    #40081200
gav21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex407
Ну, что тут поделаешь, если то, что есть на некоторых СУБД (BACKUP DATABASE, RESTORE DATABASE), тут можно сделать только с помощью извращений.
У меня задача, сделать бекап, восстановить его на том же сервере под другим именем, сделать кое-что с данными и забекапить это в нужно место. Делать все это надо к удаленного компа.
Тривиальная задача в том же MSSQL.


Что мешает использовать pg_dump\pg_restore\psql с удаленного компа?

>У меня задача, сделать бекап, восстановить его на том же сервере под другим именем,
pg_dump -h host1 -d mydb1 | psql -h host1 -d mydb2

>сделать кое-что с данными и забекапить это в нужно место
pg_dump -h host1 -d mydb1 | ssh username@mystorage "cat > /tmp/dump.sql"
...
Рейтинг: 0 / 0
Вызов командной строки из plpgsql
    #40081221
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex407
Ну, что тут поделаешь, если то, что есть на некоторых СУБД (BACKUP DATABASE, RESTORE DATABASE), тут можно сделать только с помощью извращений.
У меня задача, сделать бекап, восстановить его на том же сервере под другим именем, сделать кое-что с данными и забекапить это в нужно место. Делать все это надо к удаленного компа.
Тривиальная задача в том же MSSQL.


ssh на сервер с базой и делаем всё что надо (правильный путь).
или спокойно себе pg_dump на свой хост и оттуда pg_restore (странный и кривоватый путь но тоже можно пока база маленькая).
А вот то что вы хотите - это неправильный путь.

--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
Вызов командной строки из plpgsql
    #40081332
alex407
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gav21

Что мешает использовать pg_dump\pg_restore\psql с удаленного компа?

Потому что в этом случает будет гнаться траффик туда-обратно. Если база большая, а канал медленный - это может быть очень долго.

Мне нужно все это делать из своего приложения без дополнительной настройки клиента и сервера и использования стороннего софта. Это не разовая задача и не для одного конкретного сервера.

Может это "неправильный путь", но пока, кажется, единственный.
...
Рейтинг: 0 / 0
Вызов командной строки из plpgsql
    #40081415
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alex407,

через дблинк не проще будет сделать?
...
Рейтинг: 0 / 0
Вызов командной строки из plpgsql
    #40081422
uGNot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alex407
gav21

Что мешает использовать pg_dump\pg_restore\psql с удаленного компа?
Мне нужно все это делать из своего приложения без дополнительной настройки клиента и сервера и использования стороннего софта. Это не разовая задача и не для одного конкретного сервера.
Очень специфичная задача - прямиком из задачника по дистанционной проктологии.

Попробуйте расширение PL/sh
...
Рейтинг: 0 / 0
Вызов командной строки из plpgsql
    #40081443
Фотография mefman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
uGNot
alex407
пропущено...
Мне нужно все это делать из своего приложения без дополнительной настройки клиента и сервера и использования стороннего софта. Это не разовая задача и не для одного конкретного сервера.
Очень специфичная задача - прямиком из задачника по дистанционной проктологии.

Попробуйте расширение PL/sh

pl/python тоже можно
...
Рейтинг: 0 / 0
Вызов командной строки из plpgsql
    #40087649
alex_nur
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как вариант, своя утилита на C, которая будет вызываться функцией с PostgreSQL.

Пример получить текущий hostname из PostgreSQL: https://wiki.postgresql.org/wiki/Pg_gethostname

Перезапуск СУБД:
Создаем файл aaa.c, внутри которого что-то типа:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
int status = system("sudo systemctl restart postgresql-11");
printf("статус: %d\n", status); // статус, отличный от 0 говорит об ошибке запуска внешней программы.
return status;
}

Далее
$ gcc aaa.c
$ ./a.out
Если сделать по аналогии с примером hostname выше это позволит перезагружать СУБД запустив функцию в СУБД.
Только команда будет выполнена от имени того же пользователя, от которого запущен процесс postgresql. Если это пользователь ОС postgres, нужно позаботиться о том, что из под него эта команда отработает без лишних вопросов:
# su - postgres
$ sudo systemctl restart postgresql-11
Если будет выдан запрос пароля на использование sudo (у меня для postgres в ОС вообще запрещен вход в систему и у него нет пароля), то нужно разрешить конкретную команду после sudo для пользователя/группы postgres без запроса паролей в /etc/sudoers:

%postgres ALL=NOPASSWD: /bin/systemctl restart postgresql-11
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Вызов командной строки из plpgsql
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]