我正在编写一个迁移脚本来删除在不同环境中具有不同名称的约束
放弃此约束:
ALTER TABLE ONLY custom_data
ADD CONSTRAINT fk_rails_d86d725d64
FOREIGN KEY (custom_id) REFERENCES customs(id);
我想做这样的事情:(但它不起作用)
alter table custom_data
drop constraint (
SELECT CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = 'custom_data'
AND COLUMN_NAME = 'custom_id')
还有另一种方法可以改写以上它可能有用吗?或者有人可以帮助我理解为什么以上不起作用?
也尝试使用do
,但它也不起作用。当我检查时,约束仍然存在。
do $$
declare c_name text;
begin
select constraint_name into c_name
from information_schema.key_column_usage
where table_name = 'custom_data' and
column_name = 'custom_id';
execute format ('alter table custom_data drop constraint %I', c_name);
end;
$$;
如果运行select语句,
SELECT CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE TABLE_NAME = 'custom_data'
AND COLUMN_NAME = 'custom_id'
有时结果是,
| constraint_name
_|____________________
1| fk_rails_d86d725d64
但有时结果是,
| constraint_name
_|____________________
1|
运行大查询以获取约束并将其删除时,
有时结果是,
Empty query string
但有时结果是,
Name | Value
_____________|___________
Query | do
Updated Rows | 0
Finish time | Tue Mar 21...
现在它开始对我来说似乎是一个糟糕的空白问题......
这也会受到已经拥有索引的列的影响吗?
CREATE INDEX index_custom_data_on_custom_id ON custom_data USING btree (custom_id);
答案 0 :(得分:0)
<强>解决方案:强>
变化:
select constraint_name
from information_schema.key_column_usage
where table_name = 'custom_data' and
column_name = 'custom_id';
要:
select constraint_name
from information_schema.key_column_usage
where table_name = 'custom_data' and column_name = 'custom_id';
我猜这是一个空白问题。赞赏评论中的所有帮助。