SORU
13 EKİM 2008, PAZARTESİ


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
3 Temmuz 2009, Cuma


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)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kndx

    kndx

    11 Mart 2006
  • makemebad35

    makemebad35

    17 NİSAN 2006
  • VitalyzdTv

    VitalyzdTv

    7 AĞUSTOS 2011