Я хотел бы вызывать хранимую процедуру на регулярной основе. На Oracle я бы создал для этого работу. Я обнаружил, что Postgresql может хорошо имитировать это с помощью внешнего инструмента (cron и т. Д.) И PgAgent.
Знаете ли вы о «внутренней» альтернативе, в которой не использовался бы внешний инструмент?
- Я хочу избежать проблем безопасности с паролем, хранящимся в командной строке pgAgent.
- Я хочу избежать любой дополнительной конфигурации системы для сокрытия пароля (
~/.pgpass
).
Postgresql 8.3
Linux RedHat 64bit
postgresql
jobs
scheduled-tasks
Stephan
источник
источник
Ответы:
Даже если вы работали с готовым к выпуску (на момент написания статьи) PostgreSQL 10 или текущим PostgreSQL 9.6, а не старым выпуском, как 8.3, встроенного планировщика задач по-прежнему нет.
Требуется что-то вроде PgAgent или внешних заданий cron, удобного обходного пути нет.
Функция фоновых рабочих функций, представленная в 9.3, должна позволить перенести такой инструмент, как PgAgent, в ядро PostgreSQL в более позднем выпуске, но это еще не сделано. Даже на 9.3 вам все равно придется запускать cron или pgagent.
Несколько человек работают над фоновыми планировщиками, работающими на основе, и есть некоторые исправления, которые должны предоставить средства, чтобы помочь с этим. Но в PostgreSQL 10 все еще нет хорошего качества, широко распространенного планировщика, и большинство людей используют планировщик задач cron / ms / и т. Д.
Пожалуйста, взгляните также на политику версий ; вы используете устаревшую и неподдерживаемую версию.
источник
Please take a look at the version policy
Обновление Postgresql не вариант.standard_conforming_strings
иbytea_output
.Начиная с PostgreSQL 9.5, вы можете использовать расширение pg_cron , которое загружается как общая библиотека в PostgreSQL.
После настройки создать вакансию довольно просто:
Это запустит команду удаления в соответствии с указанным расписанием cron. Вы также можете использовать
@reboot
для планирования задания при перезапуске сервера, и pg_cron автоматически запустит выполнение заданий, если вы включите горячее резервирование.Вместо использования .pgpass вы можете предоставить локальный доступ для пользователя cron в pg_hba.conf.
источник
Вы действительно, действительно не хотите этого делать. Postgres - это не операционная система, это сервер базы данных. Даже если база данных поддерживает выполнение запланированных задач, не стоит злоупотреблять этой базой данных.
Если вы обеспокоены тем, что не хотите устанавливать пароль и другие материалы, это легко решить. Вместо этого установите локальное соединение с сокетом Unix, используя доверительную или идентификационную аутентификацию , запустите ваш cronjob от имени этого пользователя.
В стандартной конфигурации postgres обычно настраивает системного пользователя
postgres
для запуска сервера db, и этот системный пользователь обычно уже настроен заранее, поэтому он может подключаться к локальному серверу с помощью доверительной аутентификации при подключении через локальный сокет unix. Вы можете запустить свой cronjob от имени пользователя системы postgres, подключиться к локальному сокету и затем поменять роль, если не хотите, чтобы хранимая процедура выполнялась с привилегиями суперпользователя.В настройках по умолчанию вы можете просто сделать это:
В редакторе добавьте в запись crontab примерно так:
и в вашем файле /path/to/run_stored_procedure.sh вы просто используете psql для вызова процедуры ваших магазинов
источник