有沒有辦法修改DOMAINPostgres 13.4 中現有約束的詳細資訊?
我一直在嘗試并檢查檔案,并懷疑答案是:“不。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.';
我想通過再插入一個名稱來更改 中的VALUE IN串列CHECK:'user_analytics'。
在不洗掉和重建域、約束或兩者的情況下,這可能嗎?
如果不是,我可以進行級聯洗掉和重建,并考慮未來這DOMAIN不是處理此類事情的正確工具。我總是可以使用一個小的查找表來代替。我只是喜歡DOMAIN它使引數和列意圖更清晰。
uj5u.com熱心網友回復:
使用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 ]此表單使用與
CREATE DOMAIN. 將新約束添加到域時,將根據新添加的約束檢查使用該域的所有列。[...]
由于您只允許附加值,因此現有列不會發生沖突。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/351392.html
標籤:PostgreSQL 约束 目录 查看 sql域
上一篇:如何在Matlab中將fminsearch與forloop一起使用?
下一篇:Illuminate\Database\QueryException帶有訊息“SQLSTATE[42P01]:未定義表:7錯誤:關系“聯系人”不存在
