尝试从 Azure Postgres 数据库备份时 pg_dump 失败错误:查询将受到表“job”的行级安全策略的影响

问题描述 投票:0回答:3

我是 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

需要您提供一些意见,如何解决行级安全问题?谢谢

postgresql azure
3个回答
6
投票

欢迎享受托管数据库的乐趣。您的数据库不相同,因为在托管数据库上

postgres
不是超级用户:您永远不会在托管 PostgreSQL 数据库上获得超级用户帐户。

现在,由于您正在开发该应用程序,您应该知道它使用行级安全性。如果数据库用户不能免除行级安全性,

pg_dump
将拒绝操作,因为这会导致转储不完整且可能不一致。超级用户始终可以使用,因为他们自动免除行级安全性。

您必须使用设置了

BYPASSRLS
属性的用户。除非行级别安全性为
ENFORCE
d,否则您还可以使用拥有表的用户,因为默认情况下表所有者不受行级别安全性的约束。


0
投票

您从转储中排除表....在 pg_dump 命令中添加参数 -T 表名。

另外,为什么要转储 Postgres DB? Postgres DB 是默认数据库,只有超级用户才能转储 Postgres DB 中的对象,除非该对象属于您的用户。 根据 PaaS 环境的设计,您无法转储 Postgres 数据库,因为它是默认数据库。不建议使用 Postgres 数据库,因为每个用户都可以访问该数据库” 推荐的方法是创建单独的用户数据库来存储数据。 作为解决方法,您可以备份 Postgres 数据库中的每个表。 您可以在这里找到更多信息


0
投票

Pg_dump 执行,排除 CRON 相关表 -T "cron.*"。

© www.soinside.com 2019 - 2024. All rights reserved.