【问题标题】:pg_dump excluded functionspg_dump 排除函数
【发布时间】:2019-12-26 03:32:09
【问题描述】:

我使用以下命令创建了一个 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);

【问题讨论】:

    标签: postgresql pg-dump


    【解决方案1】:

    它应该在public 模式中转储函数(和所有其他对象)。

    不转储的函数是扩展的一部分,例如您的情况下的crosstab。此类对象不会单独转储,它们包含在CREATE EXTENSION 中。

    不幸的是,扩展并没有随模式转储一起转储(它们属于数据库)。

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

    CREATE EXTENSION crosstab;
    

    【讨论】:

    • 我已经用 mat view 的定义更新了我的问题。
    • 就像我怀疑的那样。我已经扩展了答案。
    • 那么,crosstab 是视图作者写的自定义东西吗?
    • crosstab 是 PostgreSQL 在“contrib”模块中附带的扩展。
    猜你喜欢
    • 1970-01-01
    • 2019-01-26
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多