gpt4 book ai didi

sql - Postgresql - 将外键更改为另一列

转载 作者:行者123 更新时间:2023-11-29 13:32:37 27 4
gpt4 key购买 nike

我有两个表:

create table test1 (
oldPrimaryKey varchar(100) primary key,
someText varchar(100)
)

create table test2 (
someText varchar(100),
oldPrimaryKey varchar(100) references test1(oldPrimaryKey)
)

我需要将 oldPrimaryKey 更改为新的,所以我这样做:

  1. 放弃旧的 key :

    • 改变表test1删除约束test1_pkey;
    • 改变表test2删除约束test2_oldprimarykey_fkey;
  2. 创建新列:

    • 更改表 test1 添加列 newPrimaryKey bigint;
  3. 使用顺序填充它:
    • 创建序列 add_id_seq 以 1 递增 1 缓存 1 开始;
    • 更新测试 1 设置 newPrimaryKey = nextval('add_id_seq');
  4. 将“newPrimaryKey”列更改为主键:
    • 改变表test1 添加约束keyName 主键(newPrimaryKey);

现在我有这样的东西:

CREATE TABLE test1
(
oldprimarykey character varying(100) NOT NULL,
sometext character varying(100),
newprimarykey bigint NOT NULL,
CONSTRAINT keyname PRIMARY KEY (newprimarykey)
)

CREATE TABLE test2
(
sometext character varying(100),
oldprimarykey character varying(100),
CONSTRAINT test2_oldprimarykey_fkey FOREIGN KEY (oldprimarykey)
REFERENCES test1 (oldprimarykey) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)

我不知道现在该做什么(一些脚本?)。我需要将表 test2oldprimarykey 中的值更改为表 test1newprimarykey 中的相应值。

如果太乱我尽量举个正常数据的例子:

来自 table1 的行(oldprimarykey、sometext、newprimarykey):

  1. test@test.com, ‘一些文本’, 1
  2. test2@test.com,“更多文本”,2

来自表 2 的对应行(sometext,oldprimarykey):

  1. “一些文本”,test@test.com
  2. ‘文本文本’, test2test.com

我想将 table2 中的电子邮件地址更改为 table1 中相应的 int。

最佳答案

应该这样做:

update test2
set newprimarykey = t1.newprimarykey
from test1 t1
where t1.oldprimarykey = test2.oldprimarykey;

SQLFiddle 示例:http://sqlfiddle.com/#!15/e558a/1

关于sql - Postgresql - 将外键更改为另一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20077716/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com