結論
/** 例えば schema_a.table_a をこんな風に作ったとする **/
CREATE TABLE schema_a.table_a AS
SELECT
row_number() over () AS rid,
B.foo AS b_foo,
B.bar AS b_bar,
~
FROM schema_b.table_b AS B
WHERE ~
GROUP BY ~
ORDER BY ~
;
/** 既存テーブルへの主キー制約の追加 **/
ALTER TABLE schema_a.table_a ADD PRIMARY KEY (rid);
余談
主キー制約の名称も自分でつけたい
/** 既存テーブルへの主キー制約の追加(名称指定) **/
ALTER TABLE schema_a.table_a
ADD CONSTRAINT pkey_table_a PRIMARY KEY (rid);
ADD PRIMARY KEY
が
ADD CONSTRAINT pkey_table_a PRIMARY KEY
に変わる
CONSTRAINT pkey_table_a が制約名を指定する箇所
CREATE TABLE AS ~ SELECT ~; するとカラムの型がbigint(int8)とかtextとかになる
カラムのデータ型をマメに指定したくなりますよね
先にCREATE TABLEしてから、INSERT INTO ~ SELECT ~した方がいいですね
参考
PostgreSQL 14.5文書 ALTER TABLE