如何将现有列转换为外键?

Use*_*ame 6 postgresql foreign-keys

我有两个桌子。

a看起来像这样-第一行是列名,都包含字符:

id |  tractce   | someString
1  |  "0011900" | "Label here"
Run Code Online (Sandbox Code Playgroud)

b

id | tractFIPS
1  | "0011900"
Run Code Online (Sandbox Code Playgroud)

如何转换a.tractce为外键列引用b.id

因此,它是:

id |  tractce | someString
1  |  1       | "Label here"
Run Code Online (Sandbox Code Playgroud)

dba*_*jtr 6

只要表中没有任何恶意数据,这就会添加约束:

ALTER TABLE TableName
ADD CONSTRAINT fk_Name
FOREIGN KEY (ColumnName) 
REFERENCES TableName(ColumnName);
Run Code Online (Sandbox Code Playgroud)


a_h*_*ame 5

你不能一步做到这一点。您需要先添加一个可以保存 table 主键的新列b,然后更新 table a,然后添加外键并删除旧列:

alter table a add b_id int;

update a
   set b_id = b.id
from b 
where a.tractce = b.tractfips;


alter table a drop column tractce;
alter table a add constraint fk_a_b foreign key (b_id) references b;
Run Code Online (Sandbox Code Playgroud)

在线示例:http : //rextester.com/LPWNHK59722