You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Cosmos DB for PostgreSQL的pgcrypto扩展权限问题与Hasura迁移报错求助

在Azure Cosmos DB for PostgreSQL中使用pgcrypto扩展的解决方案

问题背景

我正在使用Azure Cosmos DB for PostgreSQL,默认的citus用户需要使用pgcrypto扩展,但当前没有足够权限。由于无法登录默认超级用户postgres,无法自行授予权限。官方文档显示pgcrypto是支持的扩展,但即便它已安装,我也无权限使用,这是否说明文档有误?

另外,我通过部署在Azure容器实例中的Hasura GraphQL构建数据库架构,环境变量传入的连接字符串为:

HASURA_GRAPHQL_DATABASE_URL="postgres://citus:mypassword@my-cosmos-pg-db.tkgkgkjgkjkj.postgres.cosmos.azure.com:5432/citus?sslmode=require"

执行Hasura迁移命令:

hasura migrate apply --endpoint http://my-hasura-engine.eastus.azurecontainer.io --admin-secret myadminsecret

出现报错:

{
  "error": "query execution failed",
  "path": "$",
  "code": "postgres-error",
  "internal": {
    "arguments": [],
    "error": {
      "description": null,
      "exec_status": "FatalError",
      "hint": null,
      "message": "must be owner of extension pgcrypto",
      "status_code": "42501"
    },
    "prepared": false,
    "statement": "SET check_function_bodies = false;\nCREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public;\nCOMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';\n"
  }
}

解决方案

1. 明确Azure Cosmos DB for PostgreSQL的扩展规则

官方文档没有错误,Azure Cosmos DB for PostgreSQL对扩展的管理有特殊逻辑:

  • pgcrypto属于平台预安装的扩展,默认已存在于实例中
  • citus用户拥有该扩展的使用权限,但没有创建/修改扩展的权限,因此无需手动执行CREATE EXTENSION

2. 修改Hasura迁移脚本

Hasura的迁移脚本尝试创建pgcrypto扩展,这在Azure Cosmos DB for PostgreSQL中是不必要且无权限执行的,需要调整:

  • 找到对应迁移文件(路径通常为migrations/<schema>/<version>.sql)
  • 删除或注释掉以下语句:
    CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public;
    COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions';
    
  • 保存后重新执行迁移命令

3. 验证扩展可用性

跳过创建步骤后,直接调用pgcrypto的函数(如crypt()、gen_salt())即可,citus用户默认具备这些函数的执行权限。

4. 特殊权限需求处理(非必要)

如果确实需要修改扩展的属性或获取更高权限,只能通过Azure门户/CLI提交支持请求,由Azure团队协助调整——用户无法直接访问超级用户postgres。

内容的提问来源于stack exchange,提问作者gabe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 15:56:59