1. ホーム
  2. postgresql

[解決済み] Postgresの既存のカラムに'serial'を追加する

2022-05-18 11:21:38

質問

Postgres 9.0 データベースに、整数 ID フィールド (主キー) を持つ小さなテーブル (~30 行) があり、現在 1 から始まるユニークな連続整数を含んでいますが、これは 'serial' キーワードを使用して作成されていません。

今後、このテーブルへの挿入が、このフィールドが型として 'serial' を使用して作成されたかのように動作するように、このテーブルをどのように変更すればよいでしょうか。

どのように解決するのですか?

以下のコマンドを見てください(特にコメントされたブロック)。

DROP TABLE foo;
DROP TABLE bar;

CREATE TABLE foo (a int, b text);
CREATE TABLE bar (a serial, b text);

INSERT INTO foo (a, b) SELECT i, 'foo ' || i::text FROM generate_series(1, 5) i;
INSERT INTO bar (b) SELECT 'bar ' || i::text FROM generate_series(1, 5) i;

-- blocks of commands to turn foo into bar
CREATE SEQUENCE foo_a_seq;
ALTER TABLE foo ALTER COLUMN a SET DEFAULT nextval('foo_a_seq');
ALTER TABLE foo ALTER COLUMN a SET NOT NULL;
ALTER SEQUENCE foo_a_seq OWNED BY foo.a;    -- 8.2 or later

SELECT MAX(a) FROM foo;
SELECT setval('foo_a_seq', 5);  -- replace 5 by SELECT MAX result

INSERT INTO foo (b) VALUES('teste');
INSERT INTO bar (b) VALUES('teste');

SELECT * FROM foo;
SELECT * FROM bar;