2010-08-19 2 views
17

Ben başka bir sabit diskten benim PostgreSQL veritabanı taşındı' yok"pg_dump ve psql'in -U postgres db_name içeren bir veri tabanı taşıma <... "HATA: ilişkisi 'sonuçlanır tablo_ismi kullanılarak

pg_dump -U postgres db_name > db_name.dump 

ve sonra her iki durumda da aynı şekilde db_name veritabanını oluşturdum.

"ERROR: relation "table1" does not exist" 

sorgusu:

select count(0) from table1 

ben var biliyorum ben JPA sorgusu (veya bir JDBC sorgusu) ile benim Java programını çalıştıracak yeni veritabanında bu hatayı alıyorum bağlantı çünkü bağlantı parametrelerinde şifreyi değiştirirsem bir hata alıyorum.

Yeni PostgresQL örneğindeki herhangi bir nedenle, tablo1'in içe aktarılan şemada bulunmadığını düşünüyor.

Ben myschema.table1

den

select count (0) Sonra izinleri hakkında şikayet

için sorguyu değiştirirseniz:

"ERROR: permission denied for schema myschema" 

Neden izinler farklı olurdu?

Tablo tablo1, myschema'da bulunmaktadır çünkü pgAdmin aracında görebiliyorum. Tüm satırlar yeni PostgresQL örneğine içe aktarıldı.

Java'dan bir sorgu yaptığımda pg_dump ve psql birleşimi bir sorun oluşturdu.

Bu sorunu çözmek için ne yapmam gerekiyor?

Şimdiden teşekkürler.

cevap

28

PostgreSQL'in aynı sürümüne mi taşınıyorsunuz? Pg_dump 8.3 ile bir dökümü yaparsanız ve Postgresql 8.4'te geri yüklemeye çalışırsanız sorunlar olabilir. Böyle kullanıcı ve gruplar (bunlar çöplükte eksik sanki bilmiyorum) olarak

Dökümü tüm genel nesneleri:

pg_dumpall -g -U postgres > globals.sql 

Döküm şema neyse, aynı sürümü aşağıdakileri deneyin olduğunu varsayarak veritabanının

pg_dump -Fp -s -v -f db-schema.sql -U postgres dbname 

dökümü içeriği: veritabanının

pg_dump -Fc -v -f full.dump -U postgres dbname 

Şimdi res yırttı.

psql -f globals.sql 
psql -f db-schema.sql dbname 
pg_restore -a -d dbname -Fc full.dump 

Bu benim 0.02 dolardır. Umarım yardımcı olur.

+0

8,3'ten 8,4'e geçiyorum. Daha kapsamlı yaklaşımınızı kullanabilmek için yedek senaryolarımı değiştireceğim. Cevap için teşekkürler. –

+1

Büyük veritabanı için ayrıntılı bayrağı (-v) pg_restore'a eklerim. 'pg_restore -a -v -d dbname -Fc full.dump' – green0range

+0

Şimdiye kadar pg_restore -a'ya gidecekseniz şemayı iki kez (düz metin ve sıkıştırılmış olarak) boşaltma noktası nedir? Neden pg_dump -Fc -a -v -f data.dump' değil? Ya da şema adımını tamamen atlayın ve sadece bir adımda ve diğer her şeyde de globals yapın mı? – Air

1

Veritabanı ayrıcalıklarını public CONNECT ve public ve postgres için şema imtiyazları = USAGE ve CREATE olarak değiştirerek çözebiliyordum.

Yedekleme komut dosyalarım, en azından 8.3'ten 8.4'e taşırken değil, ayrıcalıkları koruyamadı.

2

Bu sorunla karşılaştım. Sonra farkettim ki, postgis uzantısını yüklemeyi unuttum.

Kullandığınız uzantıları yüklemeyi unutmayın.

+0

Çok teşekkürler adamım. Saatlerce uğraştığım konu buydu. Postgis varlığını bile bilmiyordum, postgre dünyasında yeniyim. Sadece repodan postgis yüklü ve hepsi işe yaradı. –

İlgili konular