Copy PostgreSQL tablo (dizinler dahil)
PostgreSQL bir tablo var. Bazı verileri silmek istiyorum. Geçici bir tablo oluşturmak için gidiyordu, veri kopyalamak, dizinleri ve satır ihtiyacım silip yeniden oluşturun. Bu orijinal tablo veri kaynağı olduğu için özgün tablodan veri silmek, yapamam. Başka bir durumda X silme bağlı bazı sonuçlar yapmam gereken bir durumda, her zaman etrafında ve kullanılabilir olması için tüm orijinal veri lazım Yani Y. silmek gerekiyor.
Ancak ahmakça bir tablo oluşturun ve kopyalayın ve dizinleri yeniden oluşturmak için gibi görünüyor. İsim söylemek zaten oraya "bu tablo, yapı, veri ve dizinler dahil olmak üzere tamamen ayrı bir kopyasını istiyorum"?
Ne yazık ki PostgreSQL yok "X GİBİ .. TABLO ve İNDEKSLER OLUŞTURMAK'
CEVAP
Yeni PostgreSQL docs göre 8.3 beri ) kullanabilirsiniz "GİBİ DİZİNLER":
# 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)
Gördüğünüz gibi 8.3 üzerinde test ediyorum.
Şimdi, bu tablo yaratalım:
# 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
Ve bunu nasıl göründüğünü görmek:
# \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)
Şimdi yapısını kopyalayın:
# 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
Ve yapısını kontrol edin:
# \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)
Eğer sadece seçeneğiyle pg_dump kullanabilirsiniz öncesi 8.3, PostgreSQL kullanıyorsanız, "- t" 1 tablo belirtmek için, çöplükte tablo adını değiştirin ve tekrar doldurun:
=> 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
Ve şimdi tablo:
# \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)
Sadece PostgreSQL tablo adı ("ili...
PostgreSQL sorgu kullanarak güncelleşt...
Bu oluşturmak için nasıl "tablo&q...
Nasıl İsim / PostgreSQL tablo ve alt d...
Saklı fonksiyonlar PostgreSQL tablo ku...