在 Azure 灵活 PostgreSQL 上安装 pg_cron

我正在尝试为 Azure PostgreSQL 灵活服务器安装 pg-cron 扩展。根据此处找到的文档: https://learn.microsoft.com/en-us/azure/postgresql/flexible-server/concepts-extensions#postgres-13-extensions pg_cron 是可用的扩展,但是当我尝试安装它时:

create schema cron_pg;
CREATE EXTENSION pg_cron SCHEMA cron_pg;

我得到的是:

SQL Error [0A000]: ERROR: extension "pg_cron" is not allow-listed for "azure_pg_admin" users in Azure Database for PostgreSQL
  Hint: to see the full allow list of extensions, please run: "show azure.extensions;"

执行时:

show azure.extensions;

pg_cron 丢失:

address_standardizer,address_standardizer_data_us,amcheck,bloom,btree_gin,btree_gist,citext,cube,dblink,dict_int,dict_xsyn,earthdistance,fuzzystrmatch,hstore,intagg,intarray,isn,lo,ltree,pageinspect,pg_buffercache,pg_freespacemap,pg_partman,pg_prewarm,pg_stat_statements,pg_trgm,pg_visibility,pgaudit,pgcrypto,pgrowlocks,pglogical,pgstattuple,plpgsql,postgis,postgis_sfcgal,postgis_tiger_geocoder,postgis_topology,postgres_fdw,sslinfo,tablefunc,tsm_system_rows,tsm_system_time,unaccent,uuid-ossp,lo,postgis_raster

我究竟做错了什么?

stack overflow Installation of pg_cron on Azure Flexible PostgeSQL
原文答案
author avatar

接受的答案

您可以通过更新作业表中的 database 列作业来告诉 pg_cron 在另一个数据库中运行作业。

例如:

UPDATE cron.job SET database = 'wordpress' WHERE jobname = 'wordpress-job';

答案:

作者头像

似乎 pg_cron 扩展已经默认启用,默认情况下,在默认的“postgres”数据库中。我没有看到这个的原因是因为我没有使用默认的“postgres”数据库。我创建了自己连接的数据库。这实际上并不能解决我的问题,因为我无法从 pg_cron 跨数据库执行作业......

作者头像

很晚了,但是当我搜索相同的问题但使用 pg_trgm 扩展时,这个问题出现了。经过一番环顾后,最终意识到您只需要更新数据库设置即可。

转到 Azure 门户中的数据库,然后转到服务器参数并搜索 azure.extensions 参数。然后您可以单击列表并启用/禁用所需的扩展(PG_CRON 可用),服务器将在保存时重新启动,然后您将能够启用数据库中的扩展。