pg_dump排除函数

3
我使用以下命令创建了pg_dump -
pg_dump -U postgres -d db -n public \
   --exclude-table-data 'exclude_table_*' \
   --exclude-table-data 'another_set_of_tables_to_exclude*' > dump.sql

这个命令排除了我需要排除的表,但并没有卸载public架构中的任何函数。为什么它没有卸载函数,如何让它卸载函数呢?

更新

这是一个物化视图的定义:

CREATE MATERIALIZED VIEW public.attending AS
SELECT (split_part((ct.id)::text, '-'::text, 1))::bigint AS 
attending_physician,
split_part((ct.id)::text, '-'::text, 2) AS business,
(split_part((ct.id)::text, '-'::text, 3))::bigint AS organization,
split_part((ct.id)::text, '-'::text, 4) AS county,
ct.id,
ct."qtr-0",
ct."qtr-1",
ct."qtr-2",
ct."qtr-3",
ct."qtr-4",
ct."qtr-5",
ct."qtr-6",
ct."qtr-7",
ct."qtr-8" 
FROM crosstab('SELECT attending_practitioner || ''-'' || business || ''-'' || organization || ''-'' || county AS id, period, COALESCE(admits, 0) 
FROM   calc ORDER  BY 1, 2 DESC'::text, 'SELECT year || ''q'' || quarter FROM calc_trend ORDER BY 1 DESC limit 9'::text) ct(id character varying(32), "qtr-0" integer, "qtr-1" integer, "qtr-2" integer, "qtr-3" integer, "qtr-4" integer, "qtr-5" integer, "qtr-6" integer, "qtr-7" integer, "qtr-8" integer);
1个回答

3

应该将函数(和所有其他对象)转储到public架构中。

未转储的函数是作为扩展的一部分的函数,例如您的crosstab。这些对象不会被单独转储,它们包含在CREATE EXTENSION中。

不幸的是,扩展不会随架构转储一起转储(它们属于数据库)。

在恢复转储之前,您应该在目标数据库上手动创建这些扩展:

CREATE EXTENSION crosstab;

我已经更新了我的问题,并附上了材料视图的定义。 - Aaron
就像我所怀疑的那样。我已经扩展了答案。 - Laurenz Albe
那么,crosstab是视图作者编写的自定义内容吗? - Aaron
crosstab 是 PostgreSQL 中“contrib”模块附带的一个扩展。 - Laurenz Albe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接