【问题标题】:How do I dump a Google Cloud SQL for PostgreSQL DB to import back into a regular PostgreSQL DB?如何转储用于 PostgreSQL 数据库的 Google Cloud SQL 以导入回常规 PostgreSQL 数据库?
【发布时间】:2020-01-16 10:51:14
【问题描述】:

我正在尝试从 Google Cloud SQL (PostgreSQL) 实例导出我的数据,以便使用 pg_dumppg_restore 将其导入常规 Postgres DB:

pg_dump -h sql_proxy -F t --no-owner --no-acl > backup.tar
pg_restore backup.tar -c

但是,在运行 pg_restore 时,我收到以下错误:

pg_restore: [archiver (db)] 处理目录时出错:pg_restore: [archiver (db)] 来自 TOC 条目 197 的错误;第1259章 17010 postgres pg_restore: [archiver (db)] 无法执行查询:错误: 角色“postgres”不存在 命令是:ALTER TABLE public.xxx OWNER TO postgres;

pg_restore: [archiver (db)] 来自 TOC 条目 198 的错误; 1259 17017 桌子 xxy postgres pg_restore: [archiver (db)] 无法执行查询: 错误:角色“postgres”不存在 命令是:ALTER TABLE public.xxy OWNER TO postgres;

...

我尝试了几种不同的标志,但都没有成功。我发现了很多关于如何反向迁移的文章(从 PostgreSQL 迁移到 Google Cloud SQL for PostgreSQL),Google Cloud docs 仅描述了如何导出数据以再次导入 Cloud SQL DB。

对于如何避免上述错误以及如何以尽可能少的更改迁移数据库,我将不胜感激。

【问题讨论】:

    标签: postgresql google-cloud-platform google-cloud-sql


    【解决方案1】:

    您需要在要导入转储的实例中预先创建引用的角色。

    有两种方法可以实现:

    • 使用 pg_dumpall 代替 pg_dump 或
    • pg_dumpall --globals-only 然后恢复该转储(这将创建角色等)

    【讨论】:

    • 谢谢@steve。但是pg_dumpall 给了我这个错误:query failed: ERROR: permission denied for table pg_authid。有什么想法吗?
    • 嘿尼玛,我认为这可能会帮助您解决权限错误。看一看。 stackoverflow.com/questions/39329228/…
    • 我最终在目标数据库上手动创建了 postgres 角色,因为 Cloud SQL 似乎没有为用户提供使 pg_dumpall 工作所需的权限。
    • 嗨尼玛,如果你能找到解决方案,你能把它作为答案发布吗?它将使其更加明显,并在您找到解决方案时帮助遇到相同问题的人。谢谢!
    • 这个问题可能与这里有关:issuetracker.google.com/issues/148423505 问题是 CloudSQL 不允许将超级用户权限授予任何角色。这是您在执行pg_dumpallpg_dumpall --globals-only 时遇到错误的方式
    猜你喜欢
    • 1970-01-01
    • 2011-07-22
    • 2021-01-13
    • 2013-01-23
    • 2017-11-22
    • 1970-01-01
    • 2014-07-16
    • 1970-01-01
    相关资源
    最近更新 更多