有没有一种方法可以简化导出PostgreSQL模式?

5

当我在PostgreSQL中创建表时,使用的SQL如下:

CREATE TABLE domain (
    id serial,
    domain character varying(60) NOT NULL,
    banned boolean,
    created timestamp NOT NULL
);

然而,当我导出架构时,我会得到一个包含所有内容的未压缩版本,其中包括表的所有者和完整序列等废话。有没有什么方法可以获得至少不包含所有者部分的导出文件?

CREATE TABLE domain (
    id integer NOT NULL,
    domain character varying(60) NOT NULL,
    banned boolean,
    created timestamp without time zone NOT NULL
);

ALTER TABLE public.domain OWNER TO postgres;

CREATE SEQUENCE domain_id_seq
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO MINVALUE
    CACHE 1;

ALTER TABLE public.domain_id_seq OWNER TO postgres;
ALTER SEQUENCE domain_id_seq OWNED BY domain.id;
SELECT pg_catalog.setval('domain_id_seq', 3, true);

最重要的是,我希望能够将模式传递给其他人(可能甚至不使用PostgreSQL),而无需手动编辑文件并删除特定于我的数据库用户的部分。缩写也更容易阅读。

1个回答

4

类似这样的东西可以帮助你一部分:


pg_dump --schema-only       \
        --no-owner          \
        --no-privileges     \
        --table=$TABLE_NAME \
        $DATABASE_NAME

你仍然需要在顶部保留所有的SET...内容,而约束、序列和索引则在最后。

你可能需要调整输出结果

echo "\d $TABLENAME" | psql -d $DATABASE -U $USER

通过少量的脚本编写,您可以将它转换为想要的内容。 您也可以在系统表中进行查找以获取所需内容,但这可能比手动删除pg_dump的中间部分更费力。

谢谢,这应该能用。也许我可以建一个 Bash 脚本来运行导出操作,然后过滤 SQL 的内容... - Xeoncross

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