- 締切済み
PostgreSQLで、元テーブルをコピーする時に制約も取得するには?
PostgreSQLの質問です。 元テーブルを新規テーブルに項目だけコピーしたいのですが、 primary key などの制約も同時にコピーする方法を教えて頂けないでしょうか? 下記で、空のテーブルをコピーできると思ったのですが、これでは制約はコピーされないようです。 CREATE TABLE tableName_temp AS SELECT * FROM tableName WHERE 1 = 0 また、後付で制約をつけるにも、CREATE TABLE時にしかつけることができないみたいです。 何かよい方法がありましたら、宜しくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- chukenkenkou
- ベストアンサー率43% (833/1926)
>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);
お礼
調べている最中に、制約はCREATE TABLE時にしかつけることができないという項目を見つけてしまったので、そう解釈していたのですが違ったのですね alter tableで無事行う事ができました。 ありがとうございました。