【问题标题】:Table dump using pg_dump fails in AWS Redshift when table column includes reserved keyword当表列包含保留关键字时,AWS Redshift 中使用 pg_dump 的表转储失败
【发布时间】:2017-09-05 23:41:24
【问题描述】:

我的目标是转储数据库中所有表的表结构,没有任何内容。

我有一些包含保留关键字的 Redshift 表。如果我尝试转储它们,我会收到此错误:

pg_dump -sc --quote-all-identifiers -h example.com -p 5439 -d redacted -U redacted --table public.mytable > ./blah.txt
pg_dump: [archiver (db)] query failed: ERROR:  syntax error at or near "stdout"
LINE 1: ... "status", "date") TO stdout;
                                 ^
pg_dump: [archiver (db)] query was: COPY "public"."mytable" ("status", "date") TO stdout;

如果我尝试使用pg_dump -sc --quote-all-identifiers -h example.com -p 5439 -d redacted -U redacted --table public.mytable > ./blah.txt 仅导出表结构,则命令成功,但生成的文件包含此创建表语句:

CREATE TABLE "mytable" (
);

除了换行之外,括号内没有任何内容。

Ubuntu 16.04 上的 pg_dump 版本是 pg_dump (PostgreSQL) 9.5.8

该问题会影响几个不同的表,这些表的共同点之一是在 psql reserved words list 上使用单词命名的列。也许有另一种解释为什么会发生这种情况,所以我很想听听关于这个问题的替代理论。

虽然很好,但我无法更改表中列的名称。

【问题讨论】:

    标签: amazon-redshift


    【解决方案1】:

    强烈建议您不要将 pg_dump 用于 Redshift。请改用UNLOAD 命令。 https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html

    【讨论】:

    • 同意,UNLOAD 是使用 Redshift 的方式。
    • 感谢您的建议。我未能澄清我的目标实际上只是转储表结构以在开发环境中使用。我不想要任何数据,我只想要“CREATE TABLE ...”命令,这样我就可以拥有一个与生产相匹配的本地模式。 UNLOAD 似乎与该目的不符。我赞成你的回答,因为它确实在我澄清之前解决了这个问题。
    • 查看此视图​​,它为给定表生成完整的 Redshift DDL。其他视图可用于其他对象类型。 github.com/awslabs/amazon-redshift-utils/blob/master/src/…
    • 这是一个有趣的解决方案,我已经看到了。我驳回了它,因为我希望 pg_dump 解决方案会很快,但如果它不起作用,那么它就不值得了。我也会考虑切换到那个 awslabs 解决方案。
    猜你喜欢
    • 2021-01-30
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-27
    • 2021-09-07
    • 2017-08-23
    相关资源
    最近更新 更多