在Cloud SQL上使用pg_cron扩展



我正在尝试使用pg_cron在Postgres Cloud SQL实例的几个数据库上调度存储过程的调用。

不幸的是,pg_cron只能在postgres DB上创建

当我尝试在不同于postgres的数据库上使用pg_cron时,我得到这个消息:

CREATE EXTENSION pg_cron;

ERROR: can only create extension in database postgres
Detail: Jobs must be scheduled from the database configured in 
cron.database_name, since the pg_cron background worker reads job 
descriptions from this database. Hint: Add cron.database_name = 
'mydb' in postgresql.conf to use the current database. 
Where: PL/pgSQL function inline_code_block line 4 at RAISE 
Query = CREATE EXTENSION pg_cron;

…我不认为我有访问postgresql.conf在云SQL…还有别的办法吗?也许我可以使用postgres_fdw来实现我的目标?

谢谢你,

不需要编辑任何文件。你所要做的就是设置cloudsql.enable_pg_cron标志(参见指南),然后在postgres数据库中创建扩展。

你需要登录到postgres数据库,而不是一个你正在使用你的应用程序。对我来说,这只是用'postgres'代替我的应用程序数据库的名称,例如

psql -U<username> -h<host ip> -p<port> postgres

然后简单地运行create extension命令和cron。出现作业表。这是我几分钟前在cloudsql数据库中做的一个。我使用cloudsql代理访问远程db:

127.0.0.1:2345 admin@postgres=> create extension pg_cron;
CREATE EXTENSION
Time: 268.376 ms
127.0.0.1:2345 admin@postgres=> select * from cron.job;
jobid | schedule | command | nodename | nodeport | database | username | active | jobname 
-------+----------+---------+----------+----------+----------+----------+--------+---------
(0 rows)
Time: 157.447 ms

在设置调度时要注意指定正确的目标数据库,否则它会认为您希望作业在postgres数据库中运行。文档中有这个例子(但是很容易被忽略)

-- Vacuum every Sunday at 4:00am (GMT) in a database other than the one pg_cron is installed in
SELECT cron.schedule_in_database('weekly-vacuum', '0 4 * * 0', 'VACUUM', 'some_other_database');

…我不认为我有访问postgresql.conf在云SQL…

实际上有,你可以使用patch命令。

根据pg_cron文档,您需要更改配置文件中的两项内容:

  1. shared_preload_libraries = 'pg_cron'
  2. cron。database_name = 'another_table' #可选地修改pg_cron后台工作器期望创建元数据表的数据库

现在,根据gcloud

您需要在您的实例上设置两个标志:

gcloud sql instances patch [my_instance] --database-flags=cloudsql.enable_pg_cron=on,cron.database_name=[my_name]

小心,不要使用两次命令"patch"就像你会删除你的第一个设置一样。将所有更改放在一个命令

您可能还需要设置cron。postgresql.conf中的database_name(或CloudSQL中的flag)

cron。Database_name = mydatabase

相关内容

  • 没有找到相关文章

最新更新