2014-07-15 87 views
8

İçinde birden çok veritabanı bulunan bir postgresql db sunucum var. Bir create database deyimi dahil - -CREATE DATABASE komutunu eklemek için pg_dump -s nasıl alınır?

postgres=# \list 
           List of databases 
    Name  | Owner | Encoding | Collate | Ctype | Access privileges 
--------------+----------+-----------+---------+-------+----------------------- 
test1  | postgres | UTF8  | C  | C  | 
test2  | postgres | SQL_ASCII | C  | C  | 
test3  | postgres | SQL_ASCII | C  | C  | 
test4  | postgres | SQL_ASCII | C  | C  | 
template0 | postgres | SQL_ASCII | C  | C  | =c/postgres   + 
       |   |   |   |  | postgres=CTc/postgres 
template1 | postgres | SQL_ASCII | C  | C  | postgres=CTc/postgres+ 
       |   |   |   |  | =c/postgres 
(6 rows) 

Ben şema içeren bir döküm dosyası oluşturmak için bir yol gerekir ben dökümü çalışıyorum veritabanı için.

pg_dump -s -U postgres -d test1 > test1_only.sql 

sadece test1 veritabanı için şema oluşturacak, ancak create database komutu içermez:

Şimdiye kadar, bunu anladım.

pg_dumpall -s -U postgres > /schema_alldatabases.sql 

tüm veritabanları için şema dökümü olacak: Ben görünmesini create database komutunu elde edebildi tek yolu yapmak oldu. Ancak bu daha sonra tüm veritabanları için tüm şemaları içerir. Bu dosyayı yeniden yükleyeceğim sunucuda, zaten test3 ve test4'üm var ... ve şemalar farklı olduğundan, bunların üzerine yazmak istemiyorum.

pg_dump -s komutu CREATE DATABASE komutunu içerecek şekilde var mı? Veya, sadece pg_dumpall kullanmalı ve ne geri yüklediğimi kontrol etmeliyim? öyleyse, test1'i döküm dosyasından nasıl geri yükleyebileceğimi gösterebilir misiniz?

Teşekkürler.

cevap

10

kullanın --create veya -C seçenek

pg_dump --create -s -U postgres -d test1 > test1_only.sql 

veritabanını kendisini oluşturmak ve oluşturulan veritabanına bağlanmayı bir komutla çıkış başlayın. (Bu formun bir betiği ile, betiği çalıştırmadan önce hedef yüklemede hangi veritabanının bağlanacağının önemi yoktur.) - Temiz de belirtilirse, komut dosyası yeniden bağlantı kurmadan önce hedef veritabanını bırakır ve yeniden oluşturur.

http://www.postgresql.org/docs/current/static/app-pgdump.html