喜欢:
UPDATE table SET ID=10 WHERE ID=5;
但是,它会将更改级联到每个引用此表的其他表的更改?
我想这样做,因为我需要从具有大多数相同表的另一个数据库导入数据,但是ID不同.因此,如果ID与旧数据库匹配,则更容易正确导入数据.
假设你有这两个表:create table referenced (ID integer primary key);create table referencer (a integer references referenced (ID));
引用的表引用器引用表:
=> \d referencer table "public.referencer" Column | Type | ModifIErs --------+---------+----------- a | integer | Foreign-key constraints: "referencer_a_fkey" FOREIGN KEY (a) REFERENCES referenced(ID)
然后在两者中插入一个值:
insert into referenced values (1);insert into referencer values (1);select *from referenced rd inner join referencer rr on rd.ID = rr.a; ID | a ----+--- 1 | 1
现在您要更改对更新级联的引用:
alter table referencer drop constraint referencer_a_fkey,add foreign key (a) references referenced (ID) on update cascade;
并更新它:
update referenced set ID = 2;select *from referenced rd inner join referencer rr on rd.ID = rr.a; ID | a ----+--- 2 | 2
现在,如果已更新的ID已存在,则在引用的表主键中将出现另一个问题.但这会产生另一个问题.
UPDATE
这很危险,所以首先备份数据库.必须以超级用户身份完成:
update pg_constraintset confupdtype = 'c'where conname in ( select c.conname from pg_constraint c inner join pg_class referenced on referenced.oID = c.confrelID where referenced.relname = 'referenced' and c.contype = 'f');
它会将引用表上的所有外键约束更改为更新级联
总结以上是内存溢出为你收集整理的PostgreSQL – 正确更改表行的ID全部内容,希望文章能够帮你解决PostgreSQL – 正确更改表行的ID所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)