Impor SQL dump ke dalam database PostgreSQL

451

Kami mengganti host dan yang lama menyediakan SQL dump dari database PostgreSQL di situs kami.

Sekarang, saya mencoba untuk mengatur ini pada server WAMP lokal untuk menguji ini.

Satu-satunya masalah adalah saya tidak punya ide cara mengimpor database ini di PostgreSQL 9 yang telah saya atur.

Saya mencoba pgAdmin III tetapi sepertinya saya tidak dapat menemukan fungsi 'impor'. Jadi saya baru saja membuka editor SQL dan menempelkan isi dump di sana dan mengeksekusinya, itu menciptakan tabel tetapi itu terus memberi saya kesalahan ketika mencoba untuk memasukkan data di dalamnya.

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 ...  

Saya juga mencoba melakukan ini dengan command prompt tetapi saya tidak dapat menemukan perintah yang saya butuhkan.

Jika aku melakukan

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

Saya mendapatkan kesalahan

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

Apa cara terbaik untuk mengimpor basis data?

menyilaukan
sumber
Aku punya kesalahan yang mirip dengan yang pertama Anda: ERROR: syntax error at or near "t". Ternyata saya hanya mengimpor skema parsial dan dengan demikian CREATE TABLEpernyataan sebelumnya dalam skrip telah gagal. Lihat melalui hasil lengkap impor untuk menemukannya.
owensmartin

Jawaban:

732
psql databasename < data_base_dump

Itu perintah yang Anda cari.

Hati-hati: databasenameharus dibuat sebelum mengimpor. Lihat PostgreSQL Documents Bab 23. Cadangkan dan Kembalikan .

Yakub
sumber
1
Saya sudah mencoba psql mydatabase <C: \ database \ db-backup.sql tetapi saya mendapatkan error Invalid command \ database. Saya juga mencoba dengan "" di sekitarnya.
menyilaukan
23
@Dazz Anda harus melakukan perintah ini dari prompt perintah Anda (Mulai -> Jalankan -> cmd), bukan dari prompt postgres.
Jacob
2
jika saya menjalankannya dari cmd saya mendapatkan 'Operator' <'dicadangkan untuk penggunaan di masa mendatang.'
menyilaukan
3
@Dazz: Anda bisa menggunakan -fswitch (atau --file) juga
Grzegorz Szpetkowski
47
psql --username = postgres databasename <data_base_dump.sql
Maxence
356

Ini adalah perintah yang Anda cari.

psql -h hostname -d databasename -U username -f file.sql
Gabriel Ramirez
sumber
29
Bagus, tetapi lebih baik tambahkan juga param "-L logfile.log" untuk mencatat keluaran pada file.
zerologiko
2
mendapatkan ini "Inputnya adalah dump format kustom PostgreSQL. Gunakan klien baris perintah pg_restore untuk mengembalikan dump ini ke database."
Wajdan Ali
3
Anda juga dapat:pg_restore -h hostname -d dbname -U username filename.sql
Fábio Araújo
114

Saya percaya bahwa Anda ingin menjalankan dalam psql:

\i C:/database/db-backup.sql
Arran Ubels
sumber
Harus menggunakan ini karena ellell Emacs 'tidak mendukung pengalihan input. Terima kasih.
duma
3
Pastikan untuk mengubah ke database terlebih dahulu dengan \ c <database_name>
hkong
53

Itu berhasil bagi saya:

sudo -u postgres psql db_name < 'file_path'
ivanacorovic
sumber
49

Saya tidak yakin apakah ini berfungsi untuk situasi OP, tetapi saya menemukan bahwa menjalankan perintah berikut di konsol interaktif adalah solusi paling fleksibel bagi saya:

\i 'path/to/file.sql'

Pastikan Anda sudah terhubung ke database yang benar. Perintah ini mengeksekusi semua perintah SQL dalam file yang ditentukan.

rockusbacchus
sumber
1
Solusi ini bekerja untuk saya sementara solusi yang paling banyak dipilih menghasilkan kesalahan "stdin bukan tty".
김민준
Hanya apa yang saya cari - cara untuk mengeksekusi skrip dari dalam psqlbaris perintah. Terima kasih!
vatsug
Hanya ingin mengucapkan terima kasih untuk yang satu ini. Harus dimasukkan dalam jawaban yang benar.
PKHunter
ini benar, jangan gunakan garis miring di jalur di windows!
Erdinc Ay
juga untuk Windows, Anda memerlukan garis miring dua kali
CMAS
44

Bekerja cukup baik, di baris perintah, semua argumen diperlukan, -W adalah untuk kata sandi

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

Hanya untuk bersenang-senang, jika dump Anda dikompresi, Anda dapat melakukan sesuatu seperti

gunzip -c filename.gz | psql dbname

Seperti yang disebutkan Jacob, dokumen PostgreSQL menggambarkan semua ini dengan cukup baik.

alan
sumber
7

Saya menggunakan:

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

Semoga ini bisa membantu seseorang.

Vajira Lasantha
sumber
4

Anda bisa melakukannya di pgadmin3. Jatuhkan skema yang berisi tempat pembuangan Anda. Kemudian klik kanan pada database dan pilih Pulihkan. Kemudian Anda dapat mencari file dump.

Vanessa MacDougal
sumber
2
Tetapi tombol 'restore' tidak dapat diklik bahkan setelah memilih file .sql. Perangkat lunak ini sepertinya menginginkan beberapa jenis file lainnya - satu dengan format * .backup. Mengklik 'bantuan' pada kotak impor itu merujuk ke pg_restore - "... sebuah utilitas untuk memulihkan database PostgreSQL dari arsip yang dibuat oleh pg_dump dalam salah satu format teks yang tidak biasa." File sql yang dimaksud OP adalah format teks biasa.
JosephK
4

Saya perhatikan bahwa banyak contoh yang terlalu rumit untuk localhost di mana hanya pengguna postgres tanpa kata sandi dalam banyak kasus:

psql -d db_name -f dump.sql
Kiryl Plyashkevich
sumber
4

pastikan database yang ingin Anda impor dibuat, lalu Anda dapat mengimpor dump

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

Jika Anda ingin menimpa seluruh basis data, letakkan dulu basis data

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

dan kemudian membuatnya kembali dengan

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

Saya mencoba berbagai solusi untuk memulihkan cadangan postgres saya. Saya menemukan izin yang ditolak masalah pada MacOS, sepertinya tidak ada solusi yang berhasil.

Begini cara saya membuatnya bekerja:

Postgres hadir dengan Pgadmin4. Jika Anda menggunakan macOS Anda dapat menekan CMD+ SPACEdan mengetik pgadmin4untuk menjalankannya. Ini akan membuka tab browser di chrome.

Jika Anda mengalami kesalahan dalam menjalankan pgadmin4, coba killall pgAdmin4di terminal Anda, lalu coba lagi.


Langkah-langkah untuk mendapatkan pgadmin4 + backup / restore

1. Buat cadangan

Lakukan ini dengan mengklik kanan basis data -> "cadangan"

masukkan deskripsi gambar di sini

2. Beri nama file.

Seperti test12345. Klik cadangan. Ini menciptakan dump file biner, tidak dalam .sqlformat

masukkan deskripsi gambar di sini

3. Lihat di mana itu diunduh

Seharusnya ada sembulan di kanan bawah layar Anda. Klik halaman "selengkapnya" untuk melihat ke mana cadangan unduhan Anda

masukkan deskripsi gambar di sini

4. Temukan lokasi file yang diunduh

Dalam hal ini, itu /users/vincenttang

masukkan deskripsi gambar di sini

5. Kembalikan cadangan dari pgadmin

Dengan asumsi Anda melakukan langkah 1 hingga 4 dengan benar, Anda akan memiliki file biner yang dipulihkan. Mungkin suatu saat rekan kerja Anda ingin menggunakan file pemulihan di mesin lokal mereka. Telah mengatakan orang pergi ke pgadmin dan memulihkan

Lakukan ini dengan mengklik kanan basis data -> "restore"

masukkan deskripsi gambar di sini

6. Pilih pencari file

Pastikan untuk memilih lokasi file secara manual, JANGAN seret dan jatuhkan file ke bidang pengunggah di pgadmin. Karena Anda akan mengalami izin kesalahan. Alih-alih, cari file yang baru saja Anda buat:

masukkan deskripsi gambar di sini

7. Temukan file tersebut

Anda mungkin harus mengubah filter di kanan bawah ke "Semua file". Temukan file setelahnya, dari langkah 4. Sekarang tekan tombol "Pilih" kanan untuk mengonfirmasi

masukkan deskripsi gambar di sini

8. Kembalikan file tersebut

Anda akan melihat halaman ini lagi, dengan lokasi file dipilih. Silakan dan kembalikan

masukkan deskripsi gambar di sini

9. Sukses

Jika semuanya baik, kanan bawah akan memunculkan indikator yang menunjukkan pengembalian yang berhasil. Anda dapat menavigasi ke tabel Anda untuk melihat apakah data telah dipulihkan layak pada setiap tabel.

10. Jika tidak berhasil:

Jika langkah 9 gagal, coba hapus skema publik lama Anda di database Anda. Pergi ke "Alat Kueri"

masukkan deskripsi gambar di sini

Jalankan blok kode ini:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

masukkan deskripsi gambar di sini

Sekarang coba langkah 5 hingga 9 lagi, itu akan berhasil

Ringkasan

Ini adalah bagaimana saya harus membuat cadangan / memulihkan cadangan saya di Postgres, ketika saya memiliki masalah izin kesalahan dan tidak bisa masuk sebagai pengguna super. Atau atur kredensial untuk baca / tulis menggunakan chmodfolder. Alur kerja ini berfungsi untuk dump standar file biner "Custom" dari pgadmin. Saya berasumsi .sqldengan cara yang sama, tetapi saya belum mengujinya

Vincent Tang
sumber