Postgres:如果不存在则添加约束
·
问题:Postgres:如果不存在则添加约束
Postgres 有没有办法说ALTER TABLE foo ADD CONSTRAINT bar ...
如果约束已经存在,它将忽略该命令,以便它不会引发错误?
解答
这可能会有所帮助,尽管它可能有点肮脏:
create or replace function create_constraint_if_not_exists (
t_name text, c_name text, constraint_sql text
)
returns void AS
$$
begin
-- Look for our constraint
if not exists (select constraint_name
from information_schema.constraint_column_usage
where table_name = t_name and constraint_name = c_name) then
execute constraint_sql;
end if;
end;
$$ language 'plpgsql'
然后调用:
SELECT create_constraint_if_not_exists(
'foo',
'bar',
'ALTER TABLE foo ADD CONSTRAINT bar CHECK (foobies < 100);')
更新:
根据下面的Webmut 的回答建议:
ALTER TABLE foo DROP CONSTRAINT IF EXISTS bar;
ALTER TABLE foo ADD CONSTRAINT bar ...;
这在您的开发数据库中可能没问题,或者您知道可以在维护窗口中关闭依赖此数据库的应用程序。
但是,如果这是一个活跃的任务关键型 24x7 生产环境,您真的不想像这样随意放弃约束。即使只有几毫秒,也有一个短暂的窗口,您不再执行约束,这可能会让错误的值溜走。这可能会产生意想不到的后果,在未来的某个时候导致相当大的业务成本。
更多推荐
所有评论(0)