如果不存在,则创建聚合

时间:2016-06-02 22:55:38

标签: postgresql

在我的sql脚本中我想用最后一个查询返回一些记录。对于该查询,我使用聚合:

CREATE AGGREGATE array_agg_mult(anyarray) (
    SFUNC = array_cat,
    STYPE = anyarray,
    INITCOND = '{}'
);

因此,如果我两次调用脚本,我必须在最后删除聚合。但是脚本应该以自定义sql查询结束。有没有办法说出类似CREATE OR REPLACE的内容?

2 个答案:

答案 0 :(得分:7)

您可以在DROP AGGREGATE IF EXISTS array_agg_mult(anyarray);

之前CREATE AGGREGATE

请注意,如果您更改参数/签名,这可能会引发错误,因此如果您这样做,则需要进行调整。

手动参考: https://www.postgresql.org/docs/current/static/sql-dropaggregate.html

答案 1 :(得分:1)

DO $$ BEGIN
CREATE AGGREGATE array_agg_mult(anyarray) (
    SFUNC = array_cat,
    STYPE = anyarray,
    INITCOND = '{}'
);
EXCEPTION
    WHEN duplicate_function THEN NULL;
END $$;

似乎也能正常工作。