PostgreSQL查询约束中允许值的列表?

Seanomlor

给定一个PostgreSQL表requests,该具有一个名为的列status和一个约束,如下所示:

ALTER TABLE requests ADD CONSTRAINT allowed_status_types
  CHECK (status IN (
    'pending', -- request has not been attempted
    'success', -- request succeeded
    'failure'  -- request failed
  ));

在这种情况下,psql我可以提取有关此约束的信息:

example-database=# \d requests
                                          Table "public.example-database"
        Column        |            Type             |                             Modifiers
----------------------+-----------------------------+-------------------------------------------------------------------
 id                   | integer                     | not null default nextval('requests_id_seq'::regclass)
 status               | character varying           | not null default 'pending'::character varying
 created_at           | timestamp without time zone | not null
 updated_at           | timestamp without time zone | not null

Indexes:
    "requests_pkey" PRIMARY KEY, btree (id)
Check constraints:
    "allowed_status_types" CHECK (status::text = ANY (ARRAY['pending'::character varying, 'success'::character varying, 'failure'::character varying]::text[]))

但是是否有可能编写一个专门返回allowed_status_types未决,成功,失败的查询?

能够在我的应用程序中记住此查询的结果,而不需要维护重复的副本,将是很棒的。

克林

您可以查询系统目录pg_constraint,例如:

select consrc
from pg_constraint
where conrelid = 'requests'::regclass
and consrc like '(status%';

                                  consrc                                   
---------------------------------------------------------------------------
 (status = ANY (ARRAY['pending'::text, 'success'::text, 'failure'::text]))
(1 row) 

使用以下函数解压缩字符串:

create or replace function get_check_values(str text)
returns setof text language plpgsql as $$
begin
    return query
        execute format (
            'select * from unnest(%s)',
            regexp_replace(str, '.*(ARRAY\[.*\]).*', '\1'));
end $$;

select get_check_values(consrc)
from pg_constraint
where conrelid = 'requests'::regclass
and consrc like '(status%';

 get_check_values 
------------------
 pending
 success
 failure
(3 rows)    

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

检查休眠中允许值的约束注释

来自分类Dev

在innodb中允许多个空值作为唯一约束的原因

来自分类Dev

在Peewee中允许空值

来自分类Dev

PostgreSQL。约束仅允许许多可能的值之一

来自分类Dev

在RegexRequestMatcher中允许查询字符串

来自分类Dev

在Oracle中允许来自SSRS的多个值

来自分类Dev

停止在表列中允许空值

来自分类Dev

仅在InputText字段中允许TypeAhead值

来自分类Dev

在ManyToOne反向实体中允许空值

来自分类Dev

如何防止在表中允许空值

来自分类Dev

在 API 路由中允许空值

来自分类Dev

如何在Haskell中允许一个约束暗示另一个约束?

来自分类Dev

MSSQL查询超出了PHP中允许的内存

来自分类Dev

如何在输入查询中允许宽大处理?

来自分类Dev

PostgreSQL检查约束,仅允许两个布尔值之一为真

来自分类Dev

PostgreSQL 问题、约束和查询

来自分类Dev

如何限制任务列表中允许输入的任务数量?

来自分类Dev

获取基于主机的身份验证中允许的主机列表

来自分类Dev

sklearn中的功能列表中允许的数据类型?

来自分类Dev

为什么在 for 循环中允许使用列表订阅?

来自分类Dev

perl6 / raku:如何限制变量中允许的值?

来自分类Dev

使用API平台在JSON中允许NULL值

来自分类Dev

无法在我的SQL脚本中允许空值

来自分类Dev

在 jquery ui 自动完成中允许空值

来自分类Dev

唯一约束在 Oracle 中允许一列为空

来自分类Dev

在PostgreSQL查询中传递库伦和值列表

来自分类Dev

列约束:仅允许增长值

来自分类Dev

如何仅在“ if”和“ while”语句中允许3个值以允许循环退出

来自分类Dev

PostgreSQL查询数组值