[英]How do I create a function in PostgreSQL using evolutions in the Play framework?
[英]Change PRIMARY KEY CONSTRAINT in PostgreSql using Play Framework Evolutions
我需要使用 Scala 的Play Framework Evolutions將 PostgreSql 中的PRIMARY KEY CONSTRAINT
從單個鍵更改為復合鍵。 這篇Change Primary Key 的文章給了我一個良好的開端,所以我會改編他們的例子; 假設我的 db evolutions 1.sql
文件是:
-- !Ups
CREATE TABLE city (
city_id BIGSERIAL PRIMARY KEY,
group_id int,
"version" int
);
CREATE INDEX city__version ON city("version");
CREATE INDEX city__group_id ON city(group_id);
-- !Downs
DROP TABLE city;
我想更改PK
以包含另外 2 列,例如:
CREATE TABLE city (
city_id BIGSERIAL,
group_id int,
"version" int,
CONSTRAINT city_pk PRIMARY KEY (city_id, group_id, "version");
);
-- ...
我認為2.sql
文件應該如下所示:
-- !Ups
ALTER TABLE city
DROP COLUMN city_id,
ADD COLUMN city_id BIGSERIAL,
ADD CONSTRAINT city_pk PRIMARY KEY (city_id, group_id, "version");
-- !Downs
ALTER TABLE city
DROP CONSTRAINT city_pk,
DROP COLUMN city_id,
ADD COLUMN city_id BIGSERIAL PRIMARY KEY;
但是我想知道我是否需要先截斷表*,因為我要刪除一個重要的列......如果是這樣,我應該在ALTER TABLE
命令之前將TRUNCATE
命令包含到 evolution 文件中嗎? 否則,是否有另一種方法可以更改PRIMARY KEY
w/o DROP
+ ADD COLUMN
?
* 在我的用例上這樣做是可以的。
剛剛測試了我建議的更改並且它起作用了。 2.sql
文件和提示的一樣; 不需要先截斷表,原始數據被保留,包括city_id
:
-- !Ups
ALTER TABLE city
DROP COLUMN city_id,
ADD COLUMN city_id BIGSERIAL,
ADD CONSTRAINT city_pk PRIMARY KEY (city_id, group_id, "version");
-- !Downs
ALTER TABLE city
DROP CONSTRAINT city_pk,
DROP COLUMN city_id,
ADD COLUMN city_id BIGSERIAL PRIMARY KEY;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.