我创建了一个 PostgresQL 表,但我在其中一列上添加了一个未命名的检查约束:
CREATE TABLE FOO
(
id serial primary key,
price_range smallint CHECK (price_range > 0),
url varchar(255)
);
Run Code Online (Sandbox Code Playgroud)
现在我想删除这个约束,但我不知道如何。典型的 ALTER TABLE...DROP CONSTRAINT... 需要一个,constraint_name
但我没有。
我知道这里有一个答案,但是当我尝试按照那里的答案确定检查约束的名称时:
SELECT *
FROM information_schema.constraint_table_usage
WHERE table_name = 'your_table'
Run Code Online (Sandbox Code Playgroud)
我得到的只是一个约束,它的constraint_name
条目是foo pkey
指主键约束,而不是我对price
列的检查。所以这个答案对我没有帮助,除非我遗漏了什么。
如何在不丢失任何数据的情况下删除此约束?
谢谢!
Nic*_*nes 11
无论您是否指定,约束都有一个名称。
从 psql 中,\d foo
将列出所有表约束,以及它们自动分配的名称。
您还可以通过直接查询目录表来找到这些:
SELECT conname
FROM pg_constraint
WHERE
conrelid = 'foo'::regclass AND
contype = 'c'
Run Code Online (Sandbox Code Playgroud)
如有必要,表名可以是模式限定的(例如'public.foo'::regclass
)。
contype = 'c'
将其过滤到CHECK
约束条件;此处contype
记录了其他约束类型的值。
归档时间: |
|
查看次数: |
6895 次 |
最近记录: |