New PostgreSQL (depuis 8.3 selon docs) peut utiliser ":" Y COMPRIS LES INDICES
# select version();
version
-------------------------------------------------------------------------------------------------
PostgreSQL 8.3.7 on x86_64-pc-linux-gnu, compiled by GCC cc (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu3)
(1 row)
Comme vous pouvez le voir Je suis en train de tester sur 8.3.
Maintenant, nous allons créer la table:
# create table x1 (id serial primary key, x text unique);
NOTICE: CREATE TABLE will create implicit sequence "x1_id_seq" for serial column "x1.id"
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "x1_pkey" for table "x1"
NOTICE: CREATE TABLE/UNIQUE will create implicit index "x1_x_key" for table "x1"
CREATE TABLE
Et voir à quoi il ressemble:
# \d x1
Table "public.x1"
Column | Type | Modifiers
--------+---------+-------------------------------------------------
id | integer | not null default nextval('x1_id_seq'::regclass)
x | text |
Indexes:
"x1_pkey" PRIMARY KEY, btree (id)
"x1_x_key" UNIQUE, btree (x)
Maintenant, nous pouvons copier la structure:
# create table x2 (like x1 INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES);
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "x2_pkey" for table "x2"
NOTICE: CREATE TABLE/UNIQUE will create implicit index "x2_x_key" for table "x2"
CREATE TABLE
et vérifier la structure:
# \d x2
Table "public.x2"
Column | Type | Modifiers
--------+---------+-------------------------------------------------
id | integer | not null default nextval('x1_id_seq'::regclass)
x | text |
Indexes:
"x2_pkey" PRIMARY KEY, btree (id)
"x2_x_key" UNIQUE, btree (x)
Si vous utilisez PostgreSQL pré-8.3, vous pouvez simplement utiliser pg_dump avec l'option "-t" pour spécifier 1 table, nom de la table de changement de décharge, et le charger à nouveau:
=> pg_dump -t x2 | sed 's/x2/x3/g' | psql
SET
SET
SET
SET
SET
SET
SET
SET
CREATE TABLE
ALTER TABLE
ALTER TABLE
ALTER TABLE
Et maintenant la table est:
# \d x3
Table "public.x3"
Column | Type | Modifiers
--------+---------+-------------------------------------------------
id | integer | not null default nextval('x1_id_seq'::regclass)
x | text |
Indexes:
"x3_pkey" PRIMARY KEY, btree (id)
"x3_x_key" UNIQUE, btree (x)
Il n'y a pas "INCLUDING INDEXES" dans postgres. – Rory
Quelle version utilisez-vous? Lisez le dernier document, il est là – WolfmanDragon
avec pg9.X, en utilisant "INCLUDING CONSTRAINTS" (pas "INCLUANT INDEXES") la séquence de clé primaire sera partagée entre les deux tables (!). –