2009-08-03 9 views

答えて

10

pgAdminをご覧ください。あなたが望むことを行う最も簡単な方法です。
テーブルを右クリックし、[スクリプト - 作成]をクリックします。

create table new (
    like old 
    including defaults 
    including constraints 
    including indexes 
); 

しかし、それはすべてをコピーしません。

+0

私は唯一のphpPgAdminへのアクセス権を持っています。私はサーバーを所有していません。 –

+0

十分に公正です。 phpPgAdmin:テーブルに移動し、エクスポートをクリックして、「構造のみ」を選択して、スクリプトを手に入れてください。 – ChssPly76

+0

私はこのインストールでバグでなければならないと確信しています。 :/ –

40

さて、あなたはSQLで得ることができる最も近いです。欠けている最も重要なものは、外部キーです。また、トリガもコピーされません。他のことについてはわかりません。また、例えば(他の場所で新しい古い変わります

pg_dump -s -t old databases | sed 's/old/new/g' | psql 

しかし、このような単純化は、sedのことを、注意してください:

もう一つの方法は、テーブル構造をダンプすることがダンプに名前だ変更し、再びそれをロードすることですテーブルの列に "is_scolded"という名前がある場合、 "is_scnewed"になります)。

質問は本当にむしろ、なぜ必要なのですか?さまざまな目的のために、私はさまざまなテクニックを使用するでしょう。

+0

注:PostgreSQL 8.3で 'including constraints'が動作しません。 – Ragnar123

+1

Postgres 9.3で魅力的に働いています。 – Ganapathy

+7

ベストアンサー。 「シリアル」値や他の列がシーケンスにデフォルト設定されている場合は、古いテーブルと同じシーケンスを使用することに注意してください。つまり、いずれかのテーブルにデータを挿入すると、両方のデータが増えます。 – sudo

23

シンプルなスキーマコピーでは、like節を使用します。

CREATE TABLE new_table_name (like old_table_name including all) 
5

どう

について
CREATE TABLE sample_table_copy AS (SELECT * FROM sample_table WHERE 1 = 2) 

postgresql.org answer

+1

残念ながら、これはキー、制約、またはデフォルトを保持しません。 – sudo

+1

'WHERE 1 = 2'を表現するより良い方法は、 'WHERE偽'またはWHERE句がまったくなく、代わりに 'LIMIT 0'となります。 –

関連する問題