如何在Postgresql中删除一个非常具体的表(public.pg_ts_parser与pg_catalog.pg_ts_parser)?

时间:2015-09-05 21:26:10

标签: postgresql

我在将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_parserpg_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

不知道该怎么做。

1 个答案:

答案 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

The documentation:

  

此外,您必须编写类似-t sch.tab的内容来选择一个表格   特定模式,而不是-n sch -t tab的旧语言。