我在将Postgresql 9.2数据库升级到9.4时遇到问题。我遇到的问题是我有这些表与升级不兼容:
public.pg_ts_dict.dict_init
public.pg_ts_dict.dict_lexize
public.pg_ts_parser.prs_start
public.pg_ts_parser.prs_nexttoken
public.pg_ts_parser.prs_end
public.pg_ts_parser.prs_headline
public.pg_ts_parser.prs_lextype
Postgresql说我应该删除这些表,升级应该有效。我目前正试图弄清楚如何做到这一点。
Postgresql有pg_catalog.pg_ts_parser
和pg_catalog.pg_ts_dict
。这些是系统目录,绝对不能删除,我也不想删除。我想删除public.pg_ts_*
表。
更具体地说,我想转储表,升级数据库,然后还原public.pg_ts_parser and public.pg_ts_dict
。但是,每次我尝试转储或删除表时,它都默认为系统目录。我不想要的。如何指定这些确切的表格?感谢您提前提供任何帮助。
------- ------ EDIT
以下是我为了转储表而运行的命令。
pg_dump -Fc -t public.pg_ts_dict -t public.pg_ts_parser > file.dump
pg_dump: No matching tables were found
这是一个变体
pg_dump -Fc -t pg_ts_dict -t pg_ts_parser > file.dump
第二个变体包含系统目录pg_ts_dict和解析器的转储,而不是公共版本。但是,它非常混乱,因为file.dump的内容包含@ signs和^符号中的这些代码行。
DROP TABLE pg_catalog.pg_ts_dict;
^@^@^@pg_catalog^@^@^@^@^@^@^H^@^@^@postgres^@^D^@^@^@true^A^A^@^@^@^C^@^@^@^@^@^@^@^@^@ ^G^@^@^@^@^@^@^@^@^A^@^@^@0^@^A^@^@^@0^@
^@^@^@pg_ts_dict^@^C^@^@^@ACL^@^A^@^@^@^@<86>^@^@^@REVOKE ALL ON TABLE pg_ts_dict FROM PUBLIC;
REVOKE ALL ON TABLE pg_ts_dict FROM postgres;
GRANT SELECT ON TABLE pg_ts_dict TO PUBLIC;
^@^@^@^@^@^A^A^@^@^@^@
^@^@^@pg_catalog^A^A^@^@^@^@^H^@^@^@postgres^@^E^@^@^@false^@^B^@^@^@54^A^A^@^@^@^C^@^@^@^@^@^@^@^@^@7^@^@^@^@^@^@^@^@^@^D^@^@^@1259^@^D^@^@^@3601^@^L^@^@^@pg_ts_parser^@^E^@^@^@TABLE^@^B^@^@^@^@ö^@^@^@CREATE TABLE pg_ts_parser (
prsname name NOT NULL,
prsnamespace oid NOT NULL,
prsstart regproc NOT NULL,
prstoken regproc NOT NULL,
prsend regproc NOT NULL,
prsheadline regproc NOT NULL,
prslextype regproc NOT NULL
不知道该怎么做。
答案 0 :(得分:0)
您的通话应该按原样运作:
pg_dump -Fc -t public.pg_ts_dict -t public.pg_ts_parser > file.dump
您可以使用通配符包含以pg_ts_
开头的所有表格。
pg_dump -Fc -t 'public.pg_ts_*' > file.dump
在Linux shell上,您可能需要额外的引号。 (Related question on dba.SE.)删除Windows中的引号。
为了清楚地说明,您可以明确地从pg_catalog
中排除相同的表格。通常情况下,不是必要的,但在您的情况下似乎有些异常。
pg_dump -Fc -t 'public.pg_ts_*' -T 'pg_catalog.pg_ts_*' > file.dump
此外,您必须编写类似
-t sch.tab
的内容来选择一个表格 特定模式,而不是-n sch -t tab
的旧语言。