更改域中的 CHECK 约束
ALTERing a CHECK constraint in a DOMAIN
有没有办法修改 Postgres 13.4 中现有DOMAIN
约束的详细信息?
我一直在尝试并检查文档,并怀疑答案是:“否。DROP
约束(或域和约束?),然后重建它。”
这很尴尬,因为我有一些字段和函数已经使用了约束,所以我还需要 DROP
和 CREATE
一些级联的项目。我可以做到,但是有点牵强。
例如,我有一个像这样的简单域列表:
DROP DOMAIN IF EXISTS domains.user_name;
CREATE DOMAIN domains.user_name AS
citext
NOT NULL
CONSTRAINT user_name_legal_values
CHECK(
VALUE IN (
'postgres',
'dbadmin',
'user_bender',
'user_cleanup',
'user_domo_pull'
)
);
COMMENT ON DOMAIN domains.user_name IS
'Valid user_name role names.';
我想更改 CHECK
中的 VALUE IN
列表,方法是再插入一个名称:'user_analytics'
.
这是否可能在不删除和重建域、约束或两者的情况下实现?
如果不是,我可以执行级联删除和重建,并为将来设想 DOMAIN
不是处理此类事情的正确工具。我总是可以使用一个微小的查找 table 来代替。我只是喜欢 DOMAIN
,因为它使参数和列的意图更加清晰。
使用ALTER DOMAIN
。删除旧约束并添加新约束。您不能在一个命令中同时执行这两项操作(与 ALTER TABLE
不同):
ALTER DOMAIN user_name DROP CONSTRAINT user_name_legal_values;
ALTER DOMAIN user_name ADD CONSTRAINT user_name_legal_values CHECK(
VALUE IN (
'postgres',
'dbadmin',
'user_analytics',
'user_bender',
'user_cleanup',
'user_domo_pull'
));
ADD domain_constraint [ NOT VALID ]
This form adds a new constraint to a domain using the same syntax as
CREATE DOMAIN
. When a new constraint is added to a domain, all
columns using that domain will be checked against the newly added
constraint. [...]
由于您只允许一个附加值,因此现有列不会发生冲突。
有没有办法修改 Postgres 13.4 中现有DOMAIN
约束的详细信息?
我一直在尝试并检查文档,并怀疑答案是:“否。DROP
约束(或域和约束?),然后重建它。”
这很尴尬,因为我有一些字段和函数已经使用了约束,所以我还需要 DROP
和 CREATE
一些级联的项目。我可以做到,但是有点牵强。
例如,我有一个像这样的简单域列表:
DROP DOMAIN IF EXISTS domains.user_name;
CREATE DOMAIN domains.user_name AS
citext
NOT NULL
CONSTRAINT user_name_legal_values
CHECK(
VALUE IN (
'postgres',
'dbadmin',
'user_bender',
'user_cleanup',
'user_domo_pull'
)
);
COMMENT ON DOMAIN domains.user_name IS
'Valid user_name role names.';
我想更改 CHECK
中的 VALUE IN
列表,方法是再插入一个名称:'user_analytics'
.
这是否可能在不删除和重建域、约束或两者的情况下实现?
如果不是,我可以执行级联删除和重建,并为将来设想 DOMAIN
不是处理此类事情的正确工具。我总是可以使用一个微小的查找 table 来代替。我只是喜欢 DOMAIN
,因为它使参数和列的意图更加清晰。
使用ALTER DOMAIN
。删除旧约束并添加新约束。您不能在一个命令中同时执行这两项操作(与 ALTER TABLE
不同):
ALTER DOMAIN user_name DROP CONSTRAINT user_name_legal_values;
ALTER DOMAIN user_name ADD CONSTRAINT user_name_legal_values CHECK(
VALUE IN (
'postgres',
'dbadmin',
'user_analytics',
'user_bender',
'user_cleanup',
'user_domo_pull'
));
ADD domain_constraint [ NOT VALID ]
This form adds a new constraint to a domain using the same syntax as
CREATE DOMAIN
. When a new constraint is added to a domain, all columns using that domain will be checked against the newly added constraint. [...]
由于您只允许一个附加值,因此现有列不会发生冲突。