使用pg_dump转储数据库,忽略我们无权访问的表

史蒂夫·本内特

我有一个脚本,pg_dump失败时显示如下消息:

pg_dump -h db1 --format plain --encoding UTF8 --schema=public --schema-only --no-owner me
pg_dump: [archiver (db)] query failed: ERROR:  permission denied for relation notmytable
pg_dump: [archiver (db)] query was: LOCK TABLE public.notmytable IN ACCESS SHARE MODE

这导致整个转储中止。

有没有一种方法可以:

  • 忽略用户不拥有的表?
  • 忽略错误?

我真的不希望这些表出现在转储中,所以即使我们可以访问它们,也不能完全解决问题。

(Postgres 9.6.3)

史蒂夫·本内特

似乎没有标准的方法可以执行此操作,但是使用该--exclude-table标志,我们可以使用一种解决方法:

export EXCLUDETABLE=$(psql -t -h $HOST -d $DBNAME -c "select '--exclude-table=' || string_agg(tablename,' --exclude-table=') FROM pg_catalog.pg_tables WHERE tableowner NOT LIKE 'myuser';" )

这将EXCLUDETABLE设置为 --exclude-table=foo --exclude-table=blah

现在我们将其传递给pg_dump

echo Excluding these tables from dump: $EXCLUDETABLE
pg_dump -h $HOST --format plain --encoding UTF8 --schema=public --schema-only --no-owner $EXCLUDETABLE $DBNAME > public-schema.sql 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Postgres 数据库 pg_dump - 转储文件详细解释

Postgres pg_dump每次都以不同的顺序转储数据库

PostgreSQL:在 Windows 上导入/恢复数据库转储(pg_dump 版本 9.6.5)

pg_dump突然不转储所有表

pg_dump以约束的形式转储表模式

Postgresql-11:使用 pg_dump 为选择模式转储对象定义和数据

无法使用pg_dump将表复制到另一个数据库

当表列包含保留关键字时,使用pg_dump的表转储在AWS Redshift中失败

如何pg_dump RDS Postgres数据库?

pg_dump与数据库的连接失败

Postgres pg_dump对生产数据库的影响

无法使用pg_dump PostgreSQL备份Hypertable TimescaleDB数据库

数据库播种 这是我们使用的原因

pg_dump,转储选项“ pre-data”,“ pre_data”中包含哪些“数据定义项”?

如何仅在 heroku 上使用 postgres 转储恢复我的数据库数据

无法使用其他用户名从pg_dump恢复psql数据库

如果数据库太忙,使用pg_dump进行的备份会导致服务器中断吗?

如何使用Qt转储SQLite数据库表(使用BLOB类型)?

我们如何使用未存储在任何地方的密码访问数据库

将表作为bash脚本中的选项进行转储以转储postgresql数据库

使用Python sqlite3 API的表,数据库模式,转储等的列表

我可以使用mysql(不是mysqldump)转储数据库吗?

我们可以在PostgreSQL中更改单个表或数据库的数据目录吗

我们可以在WAN上访问Microsoft SQL Server数据库吗?

当端口5432被阻止时,来自远程服务器的pg_dump postgres数据库

pg_dump关于数据库抛出错误“共享内存不足”

如何将pg_dump文件还原到Postgres数据库

pg_dump 一个没有 root 用户的数据库

如何使用ant转储MySQL数据库?