在云SQL上使用pg_cron扩展

qmelpv7a  于 2022-09-21  发布在  PostgreSQL
关注(0)|答案(2)|浏览(118)

我正在尝试使用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;

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

谢谢,

f3temu5u

f3temu5u1#

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

你需要登录到Postgres数据库,而不是你正在为应用程序使用的数据库。对我来说,这只是将我的应用程序数据库的名称替换为‘postgres’。

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

然后,只需运行CREATE EXTENSION命令,就会出现cron.job表。这是我几分钟前在我们的Cloudsql数据库中执行的一项操作。我正在使用CloudSQL代理访问远程数据库:

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数据库中运行

xzv2uavs

xzv2uavs2#

。。我不认为我有权访问Cloud SQL中的postgresql.conf...

实际上是有的,您可以使用patch命令。

根据pg_cron doc,您需要在conf文件中更改两项内容:

1.共享预加载库=‘pg_cron’
1.cron.database_name=‘Another_TABLE’#optionnaly更改pg_cron后台工作程序希望在其中创建其元数据表的数据库

现在,根据gcloud

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

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

小心,不要两次使用命令“patch”,因为这样会删除第一个设置。将所有更改放在一个命令中

相关问题