我是 postgres 新手,现在尝试为我们正在开发的应用程序设置外部数据库。
尝试1:
我使用我们的应用程序初始化本地 postgres 数据库,然后立即运行 pg_dump
pg_dump -Fc -h localhost -U postgres postgres
没有错误,但内容被转储到标准输入
尝试2:
我使用免费的 Azure 帐户创建了一个数据库,使用我们的应用程序初始化 azure postgres 数据库,然后立即运行相同的 pg_dump 命令,然后出现错误
pg_dump:错误:查询失败:错误:查询将受到表“job”的行级安全策略的影响 pg_dump:详细信息:查询是:COPY cron.job(jobid,schedule,command,nodename,nodeport,database,username,active,jobname)TO stdout
需要您提供一些意见,如何解决行级安全问题?谢谢
欢迎享受托管数据库的乐趣。您的数据库不相同,因为在托管数据库上
postgres
不是超级用户:您永远不会在托管 PostgreSQL 数据库上获得超级用户帐户。
现在,由于您正在开发该应用程序,您应该知道它使用行级安全性。如果数据库用户不能免除行级安全性,
pg_dump
将拒绝操作,因为这会导致转储不完整且可能不一致。超级用户始终可以使用,因为他们自动免除行级安全性。
您必须使用设置了
BYPASSRLS
属性的用户。除非行级别安全性为 ENFORCE
d,否则您还可以使用拥有表的用户,因为默认情况下表所有者不受行级别安全性的约束。
Pg_dump 执行,排除 CRON 相关表 -T "cron.*"。