簡體   English   中英

使用 Play Framework Evolutions 更改 PostgreSql 中的 PRIMARY KEY CONSTRAINT

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM