プロが教えるわが家の防犯対策術!

PostgreSQLの質問です。

元テーブルを新規テーブルに項目だけコピーしたいのですが、
primary key などの制約も同時にコピーする方法を教えて頂けないでしょうか?

下記で、空のテーブルをコピーできると思ったのですが、これでは制約はコピーされないようです。

CREATE TABLE tableName_temp AS SELECT * FROM tableName WHERE 1 = 0

また、後付で制約をつけるにも、CREATE TABLE時にしかつけることができないみたいです。

何かよい方法がありましたら、宜しくお願い致します。

A 回答 (1件)

>primary key などの制約も同時にコピーする方法



これは1個のSQLでは、できないようです。

>後付で制約をつけるにも、CREATE TABLE時にしかつけることができないみたい

これは誤解のようであり、alter tableで行なえます。

私の環境は、PostgreSQL 8.0.0ですが、試しにやってみました。

(1)表の定義
create table t1
(c1 int primary key,
c2 int,
c3 int);

(2)データ格納
insert into t1 values(1,11,111);
insert into t1 values(2,22,222);
insert into t1 values(3,33,333);

(3)表定義&データコピー
create table t2 as select * from t1;

(4)primary key追加
alter table t2 add primary key(c1);
    • good
    • 0
この回答へのお礼

調べている最中に、制約はCREATE TABLE時にしかつけることができないという項目を見つけてしまったので、そう解釈していたのですが違ったのですね

alter tableで無事行う事ができました。
ありがとうございました。

お礼日時:2007/07/02 09:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!