SQL dökümünü PostgreSQL veritabanına aktar


451

Ana bilgisayarlar arasında geçiş yapıyoruz ve eskisi sitemizin PostgreSQL veritabanının SQL dökümünü sağladı.

Şimdi, bunu test etmek için yerel bir WAMP sunucusunda kurmaya çalışıyorum.

Tek sorun, nasıl kurduğum PostgreSQL 9 bu veritabanını almak için bir fikrim yok olmasıdır.

PgAdmin III'ü denedim ancak bir 'içe aktarma' işlevi bulamıyorum. Bu yüzden sadece SQL editörünü açtım ve dökümün içeriğini oraya yapıştırdım ve yürüttüm, tabloları oluşturuyor, ancak verileri içine koymaya çalıştığında bana hata veriyor.

ERROR:  syntax error at or near "t"
LINE 474: t 2011-05-24 16:45:01.768633 2011-05-24 16:45:01.768633 view...

The lines:
COPY tb_abilities (active, creation, modtime, id, lang, title, description) FROM stdin;
t   2011-05-24 16:45:01.768633  2011-05-24 16:45:01.768633  view    nl ...  

Ben de bunu komut istemiyle yapmaya çalıştım ama ihtiyacım olan komutu bulamıyorum.

Eğer yaparsam

psql mydatabase < C:/database/db-backup.sql;

Hatayı alıyorum

ERROR:  syntax error at or near "psql"
LINE 1: psql mydatabase < C:/database/db-backu...
        ^

Veritabanını içe aktarmanın en iyi yolu nedir?


Ben senin ilkine benzer bir hata vardı: ERROR: syntax error at or near "t". Sadece kısmi bir şemayı içe aktardığımı ve böylece CREATE TABLEkodun başlarında bir ifadenin başarısız olduğunu ortaya çıkardı. Bulmak için içe aktarmanın tam çıktısına bakın.
owensmartin

Yanıtlar:


732
psql databasename < data_base_dump

Aradığın komut bu.

Dikkat: databasenameİçe aktarmadan önce oluşturulmalıdır. Göz at PostgreSQL Dokümanlar Bölüm 23. Yedekleme ve Geri Yükleme .


1
Bu psql veritabanımı <C: \ veritabanı \ db-backup.sql denedim ama Geçersiz komut \ veritabanı hatası alıyorum. Ayrıca etrafında "" ile denedim.
dazz

23
@Dazz Bu komutu postgres komut isteminden değil, komut isteminizden (Başlat -> Çalıştır -> cmd) yapmanız gerekir.
Jacob

2
cmd'den çalıştırırsam, '' 'operatörü ileride kullanılmak üzere ayrılır.'
dazz

3
@Dazz: -fAnahtarı (veya --file) da kullanabilirsiniz
Grzegorz Szpetkowski

47
psql - kullanıcı adı = postgres veritabanıadı <data_base_dump.sql
Maxence

356

İşte aradığınız komut.

psql -h hostname -d databasename -U username -f file.sql

29
İyi, ama daha iyi "-L logfile.log" parametresini dosyaya çıktı günlüğe ekleyin.
zerologiko

2
"Girdi bir PostgreSQL özel biçimli dökümüdür. Bu dökümü bir veritabanına geri yüklemek için pg_restore komut satırı istemcisini kullanın."
Wajdan Ali

3
Ayrıca şunları da yapabilirsiniz:pg_restore -h hostname -d dbname -U username filename.sql
Fábio Araújo

114

Psql'de çalıştırmak istediğinize inanıyorum:

\i C:/database/db-backup.sql

Bunu kullanmak zorundaydı çünkü Emacs'ın eshell girişi yeniden yönlendirmeyi desteklemiyor. Teşekkürler.
duma

3
\ C <veritabanı_adı>
hkong

53

Bu benim için çalıştı:

sudo -u postgres psql db_name < 'file_path'

49

Bunun OP'nin durumu için çalışıp çalışmadığından emin değilim, ancak etkileşimli konsolda aşağıdaki komutu çalıştırmanın benim için en esnek çözüm olduğunu buldum:

\i 'path/to/file.sql'

Zaten doğru veritabanına bağlı olduğunuzdan emin olun. Bu komut, belirtilen dosyadaki tüm SQL komutlarını yürütür.


1
Bu çözüm benim için çalıştı ve en çok oy alan çözüm "stdin tty değil" hatası verdi.
김민준

Tam olarak aradığım şey - komut dosyasını psqlkomut satırının içinden yürütmenin bir yolu . Teşekkürler!
vatsug

Bunun için sana teşekkür etmek istedim. Doğru cevaba dahil edilmelidir.
PKHunter

bu doğrudur, Windows yolundaki eğik çizgileri kullanmayın!
Erdinç Ay

Windows için de çift yönlü eğik çizgilere ihtiyacınız var
CMAS

44

Oldukça iyi çalışıyor, komut satırında tüm argümanlar gerekli, -W şifre içindir

psql -h localhost -U user -W -d database_name -f path/to/file.sql

22

Sadece eğlenceler için, çöplüğünüz sıkıştırılmışsa,

gunzip -c filename.gz | psql dbname

Jacob'un belirttiği gibi, PostgreSQL belgeleri tüm bunları oldukça iyi açıklar.


7

Kullanırım:

cat /home/path/to/dump/file | psql -h localhost -U <user_name> -d <db_name>

Umarım bu birine yardımcı olur.


4

Pgadmin3 içinde yapabilirsiniz. Dökümünüzün içerdiği şemaları bırakın. Ardından veritabanına sağ tıklayın ve Geri Yükle'yi seçin. Ardından döküm dosyasına göz atabilirsiniz.


2
Ancak .sql dosyasını seçtikten sonra bile 'geri yükle' düğmesi tıklanamaz. Bu yazılım başka bir tür dosya istiyor gibi görünüyor - biri * .backup formatında. Bu içe aktarma kutusundaki 'yardım'ı tıklamak pg_restore - "... düz metin olmayan biçimlerden birinde pg_dump tarafından oluşturulan bir arşivden PostgreSQL veritabanını geri yüklemek için kullanılan bir yardımcı programdır." OP'nin başvurduğu sql dosyası düz metin biçimidir.
JosephK

4

Ben birçok örnek parola olmadan kullanıcı postgres birçok durumda var olduğu localhost için aşırı karmaşık olduğunu fark ettim:

psql -d db_name -f dump.sql

4

içe aktarmak istediğiniz veritabanının oluşturulduğundan emin olun, ardından dökümü

sudo -u postgres -i psql testdatabase < db-structure.sql

Tüm veritabanının üzerine yazmak istiyorsanız, önce veritabanını bırakın

# be sure you drop the right database !!!
#sudo -u postgres -i psql -c "drop database testdatabase;"

ve daha sonra

sudo -u postgres -i psql -c "create database testdatabase;"

2

Postgres yedeklememi geri yüklemek için birçok farklı çözüm denedim. MacOS'ta izin verilmeyen sorunları kabul ettim, hiçbir çözüm işe yaramadı.

İşte bu şekilde çalıştım:

Postgres Pgadmin4 ile birlikte gelir. MacOS kullanıyorsanız, CMD+ tuşuna basıp çalıştırmak için SPACEyazabilirsiniz pgadmin4. Bu, Chrome'da bir tarayıcı sekmesi açar.

Pgadmin4'ü çalıştırırken hatalarla killall pgAdmin4karşılaşırsanız, terminalinizde deneyin ve ardından tekrar deneyin.


Pgadmin4 + yedekleme / geri yükleme adımları

1. Yedeği oluşturun

Bunu veritabanını sağ tıklatarak yapın -> "yedekleme"

resim açıklamasını buraya girin

2. Dosyaya bir ad verin.

Gibi test12345. Yedekle'yi tıklayın. Bu bir ikili dosya dökümü oluşturur, bir .sqlbiçimde değildir

resim açıklamasını buraya girin

3. Nereden indirildiğine bakın

Ekranınızın sağ alt köşesinde bir açılır pencere olmalıdır. Yedeklemenizin nereye indirildiğini görmek için "daha fazla ayrıntı" sayfasını tıklayın

resim açıklamasını buraya girin

4. İndirilen dosyanın konumunu bulun

Bu durumda, /users/vincenttang

resim açıklamasını buraya girin

5. Yedeklemeyi pgadmin'den geri yükleyin

1 ile 4 arasındaki adımları doğru yaptığınızı varsayarsak, bir geri yükleme ikili dosyasına sahip olursunuz. İş arkadaşınızın geri yükleme dosyanızı yerel makinelerinde kullanmak istediği bir zaman gelebilir. Dedi ki kişi pgadmin'e gidip geri döndü mü

Bunu veritabanını sağ tıklatarak yapın -> "geri yükle"

resim açıklamasını buraya girin

6. Dosya bulucuyu seçin

Dosya konumunu manuel olarak seçtiğinizden emin olun, pgadmin'deki yükleyici alanlarına dosya sürükleyip BIRAKMAYIN. Çünkü hata izinleriyle karşılaşacaksınız. Bunun yerine, az önce oluşturduğunuz dosyayı bulun:

resim açıklamasını buraya girin

7. Adı geçen dosyayı bul

Filtreyi en altta "Tüm dosyalar" olarak değiştirmeniz gerekebilir. Daha sonra, 4. adımdan itibaren dosyayı bulun. Şimdi onaylamak için sağ alttaki "Seç" düğmesine basın

resim açıklamasını buraya girin

8. Adı geçen dosyayı geri yükle

Dosyanın konumu seçiliyken bu sayfayı tekrar göreceksiniz. Devam et ve geri yükle

resim açıklamasını buraya girin

9. Başarı

Her şey yolundaysa, sağ altta başarılı bir geri yüklemeyi gösteren bir gösterge açılır. Verilerin her tabloda düzgün bir şekilde geri yüklenip yüklenmediğini görmek için tablolarınıza gidebilirsiniz.

10. Başarılı olamadıysa:

9. adımın başarısız olması durumunda, veritabanınızdaki eski genel şemanızı silmeyi deneyin. "Sorgu Aracı" na gidin

resim açıklamasını buraya girin

Bu kod bloğunu yürütün:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

resim açıklamasını buraya girin

Şimdi 5. ila 9. adımları tekrar deneyin.

özet

Hata izni sorunları vardı ve bir süper kullanıcı olarak giriş yapamadığım zaman Postgres yedeklememi yedeklemek / geri yüklemek zorunda kaldım. Veya chmodklasörleri kullanarak okuma / yazma için kimlik bilgilerini ayarlayın . Bu iş akışı pgadmin'den "Custom" ikili dosya dökümü varsayılanı için çalışır. .sqlAynı şekilde olduğunu varsayıyorum , ancak henüz test etmedim

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.