如果不存在,则创建聚合

Ste*_*ris 6 postgresql

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

CREATE AGGREGATE array_agg_mult(anyarray) (
    SFUNC = array_cat,
    STYPE = anyarray,
    INITCOND = '{}'
);
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*ick 7

你可以简单地DROP AGGREGATE IF EXISTS array_agg_mult(anyarray);在你之前CREATE AGGREGATE

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

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


lda*_*v1s 5

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

似乎也有效。