小编Ale*_*eto的帖子

在 PostgreSQL 中,是否有类型安全的 first() 聚合函数?

完整问题重写

我正在寻找 First() 聚合函数。

在这里,我发现了一些几乎有效的东西:

CREATE OR REPLACE FUNCTION public.first_agg ( anyelement, anyelement )
RETURNS anyelement LANGUAGE sql IMMUTABLE STRICT AS $$
        SELECT $1;
$$;

-- And then wrap an aggregate around it
CREATE AGGREGATE public.first (
        sfunc    = public.first_agg,
        basetype = anyelement,
        stype    = anyelement
);
Run Code Online (Sandbox Code Playgroud)

问题是当 varchar(n) 列通过 first() 函数时,它会被转换为简单的 varchar(没有大小)。尝试在函数中将查询返回为 RETURNS SETOF anyelement,我收到以下错误:

错误:查询的结构与函数结果类型 Estado de SQL:42804 不匹配:返回的类型字符变化与第 2 列中的预期类型字符变化(40) 不匹配。上下文:PL/pgSQL 函数 vsr_table_at_time(anyelement,timestamp without time zone ) 第 31 行在 RETURN QUERY

在同一个 wiki 页面中,有一个指向该函数 …

postgresql aggregate functions greatest-n-per-group

25
推荐指数
3
解决办法
3万
查看次数

如何创建表... LIKE 没有 NOT NULL 约束?

我正在尝试使用一些动态 SQL 在函数内重新创建表的结构。

EXECUTE 'CREATE TABLE ' || my_table_name || '_bk' ||
    ' (like ' || _my_table_name || ')';
Run Code Online (Sandbox Code Playgroud)

这将类似于:

CREATE TABLE my_table_bk
(like my_table);
Run Code Online (Sandbox Code Playgroud)

但我需要放弃所有约束。使用EXCLUDING CONSTRAINTS类似的选项,它仍然复制NOT NULL约束(文档证实了这一行为):

CREATE TABLE my_table_bk
(like my_table EXCLUDING CONSTRAINTS);
Run Code Online (Sandbox Code Playgroud)

问题是,如何在没有 NOT NULL 约束的情况下重新创建表结构,或者删除表中的所有 NOT NULL 约束?

postgresql

12
推荐指数
2
解决办法
3万
查看次数