如何创建 cron 作业来运行 postgres SQL 函数?

发布于 2024-12-10 15:38:24 字数 235 浏览 1 评论 0原文

我假设我需要做的就是:

  1. 创建一个 sql 文件,例如 nameofsqlfile.sql 内容:

    perform proc_my_sql_funtion();

  2. 将其作为 cron 作业执行。

但是,我不知道需要编写哪些命令才能将此 cron 作业作为指定主机、端口、数据库、用户和用户的 postgres 函数执行。他的密码……?

I assume that all I need to do is to:

  1. Create an sql file e.g. nameofsqlfile.sql contents:

    perform proc_my_sql_funtion();

  2. Execute this as a cron job.

However, I don't know the commands that I'd need to write to get this cron job executed as a postgres function for a specified host,port,database, user & his password...?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

著墨染雨君画夕 2024-12-17 15:38:24

您只需将 cronjob 视为在指定时间或日期运行 shell 命令即可。

因此,您的首要任务是弄清楚如何运行 shell 命令。

psql --host host.example.com --port 12345 --dbname nameofdatabase --username postgres < my.sql

然后你可以将其添加到你的 crontab 中(我建议你使用 crontab -e 以避免破坏东西)

# runs your command at 00:00 every day
#
# min hour wday month mday command-to-run
    0    0    *     *    * psql --host host.example.com --port 12345 --dbname nameofdatabase < my.sql

You just need to think of cronjob as running a shell command at a specified time or day.

So your first job is to work out how to run your shell command.

psql --host host.example.com --port 12345 --dbname nameofdatabase --username postgres < my.sql

You can then just add this to your crontab (I recommend you use crontab -e to avoid breaking things)

# runs your command at 00:00 every day
#
# min hour wday month mday command-to-run
    0    0    *     *    * psql --host host.example.com --port 12345 --dbname nameofdatabase < my.sql
橘虞初梦 2024-12-17 15:38:24

在大多数情况下,您可以将所有 sql 源放入 shell“此处文档”中。这里文档的好处是 shell 的 ${MY_VAR} 即使在单引号内也会扩展,例如:

#!/bin/sh

THE_DATABASE=personnel
MY_TABLE=employee
THE_DATE_VARIABLE_NAME=hire_date
THE_MONTH=10
THE_DAY=01

psql ${THE_DATABASE} <<THE_END
  SELECT COUNT(*) FROM ${MY_TABLE}
  WHERE ${THE_DATE_VARIABLE_NAME} >= '2011-${THE_MONTH}-${THE_DAY}'::DATE
THE_END

YMMV

In most cases you can put all of the sql source in a shell 'here document'. The nice thing about here documents is that the shell's ${MY_VAR} are expanded even within single quotes, e.g:

#!/bin/sh

THE_DATABASE=personnel
MY_TABLE=employee
THE_DATE_VARIABLE_NAME=hire_date
THE_MONTH=10
THE_DAY=01

psql ${THE_DATABASE} <<THE_END
  SELECT COUNT(*) FROM ${MY_TABLE}
  WHERE ${THE_DATE_VARIABLE_NAME} >= '2011-${THE_MONTH}-${THE_DAY}'::DATE
THE_END

YMMV

行至春深 2024-12-17 15:38:24

检查这个

http://archives.postgresql.org/pgsql-admin/2000 -10/msg00026.php

http://www.dbforums.com/postgresql/340741-cron-jobs -postgresql.html

或者您可以创建一个 bash 脚本来包含您的编码并从 crontab 调用它

Check this

http://archives.postgresql.org/pgsql-admin/2000-10/msg00026.php
and
http://www.dbforums.com/postgresql/340741-cron-jobs-postgresql.html

or you can just create a bash script to include your coding and call it from crontab

ぶ宁プ宁ぶ 2024-12-17 15:38:24

对于 Postgresql 10 及更高版本,您可以使用 pg_cron。正如其 README.md 中所述,

pg_cron 是一个用于 PostgreSQL(10 或更高版本)的基于 cron 的简单作业调度程序,它作为扩展在数据库内运行。它使用与常规 cron 相同的语法,但它允许您直接从数据库安排 PostgreSQL 命令:

For Postgresql 10 and above you can use pg_cron. As stated in its README.md,

pg_cron is a simple cron-based job scheduler for PostgreSQL (10 or higher) that runs inside the database as an extension. It uses the same syntax as regular cron, but it allows you to schedule PostgreSQL commands directly from the database:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文