我的目标是为数据库中的所有表转储表结构,而不包含任何内容。
我有一些包含保留关键字的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语句:
CREATE TABLE "mytable" (
);
除了新的一行之外,括号内没有任何内容。
在Ubuntu 16.04上,pg_dump版本为pg_dump (PostgreSQL) 9.5.8
。
这个问题影响了几个不同的表,这些表中的一个共同点是psql reserved words list上有以单词命名的列。也许对于为什么会发生这种情况还有另一种解释,所以我很想听听问题的其他理论。
虽然它会很好,但我无法更改表格中列的名称。
答案 0 :(得分:4)
强烈建议您不要将pg_dump
用于Redshift。请尝试使用UNLOAD
命令。
https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html