นำเข้าดัมพ์ SQL ลงในฐานข้อมูล PostgreSQL


451

เราสลับโฮสต์และโฮสต์เก่าให้ SQL dump ของฐานข้อมูล PostgreSQL ของเว็บไซต์ของเรา

ตอนนี้ฉันกำลังพยายามตั้งค่านี้บนเซิร์ฟเวอร์ WAMP ท้องถิ่นเพื่อทดสอบ

ปัญหาเดียวคือฉันไม่มีความคิดวิธีนำเข้าฐานข้อมูลนี้ใน PostgreSQL 9 ที่ฉันตั้งค่าไว้

ฉันลอง pgAdmin III แต่ดูเหมือนไม่พบฟังก์ชัน 'นำเข้า' ดังนั้นฉันเพิ่งเปิดตัวแก้ไข SQL และวางเนื้อหาของการถ่ายโอนข้อมูลที่นั่นและดำเนินการมันจะสร้างตาราง แต่มันทำให้ฉันมีข้อผิดพลาดเมื่อมันพยายามที่จะนำข้อมูลในนั้น

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

ฉันพยายามทำเช่นนี้ด้วยพรอมต์คำสั่ง แต่ฉันไม่พบคำสั่งที่ฉันต้องการ

ถ้าฉันทำ

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

ฉันได้รับข้อผิดพลาด

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

วิธีที่ดีที่สุดในการนำเข้าฐานข้อมูลคืออะไร


ฉันมีข้อผิดพลาดคล้ายกันกับข้อแรกของคุณ: ERROR: syntax error at or near "t". ปรากฎว่าฉันได้นำเข้าสคีมาเพียงบางส่วนและทำให้CREATE TABLEคำสั่งก่อนหน้าในสคริปต์ล้มเหลว ดูเอาต์พุตทั้งหมดของการนำเข้าเพื่อค้นหา
owensmartin

คำตอบ:


732
psql databasename < data_base_dump

นั่นคือคำสั่งที่คุณกำลังมองหา

ระวัง: databasenameต้องสร้างก่อนนำเข้า มีลักษณะที่เป็นPostgreSQL เอกสารบทที่ 23. Backup and Restore


1
ฉันได้ลอง psql mydatabase <C: \ database \ db-backup.sql แล้ว แต่ฉันพบข้อผิดพลาด command \ database ไม่ถูกต้อง ฉันลองด้วย "" รอบ ๆ
dazz

23
@Dazz คุณต้องทำคำสั่งนี้จากพรอมต์คำสั่งของคุณ (Start -> Run -> cmd) ไม่ใช่จากพรอมต์ postgres
จาค็อบ

2
ถ้าฉันเรียกใช้จาก cmd ฉันได้รับ 'ตัวดำเนินการ' <'ถูกสงวนไว้สำหรับใช้ในอนาคต'
dazz

3
@Dazz: คุณสามารถใช้-fสวิตช์ (หรือ--file) ด้วย
Grzegorz Szpetkowski

47
psql - ชื่อผู้ใช้ = postgres databasename <data_base_dump.sql
Maxence

356

นี่คือคำสั่งที่คุณกำลังมองหา

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

29
ดี แต่ยังดีกว่าผนวกพารามิเตอร์ "-L logfile.log" เพื่อบันทึกเอาต์พุตในไฟล์
zerologiko

2
รับสิ่งนี้ "อินพุตเป็นดัมพ์ของรูปแบบที่กำหนดเองของ PostgreSQL ใช้ไคลเอ็นต์บรรทัดคำสั่ง pg_restore เพื่อกู้คืนดัมพ์นี้ไปยังฐานข้อมูล"
Wajdan Ali

3
คุณยังสามารถ:pg_restore -h hostname -d dbname -U username filename.sql
FábioAraújo

114

ฉันเชื่อว่าคุณต้องการที่จะทำงานใน psql:

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

ต้องใช้สิ่งนี้เพราะ Emacs 'eshell ไม่สนับสนุนการเปลี่ยนเส้นทางอินพุต ขอบคุณ
duma

3
อย่าลืมเปลี่ยนเป็นฐานข้อมูลก่อนด้วย \ c <database_name>
hkong


49

ฉันไม่แน่ใจว่าสิ่งนี้ใช้ได้กับสถานการณ์ของ OP หรือไม่ แต่ฉันพบว่าการรันคำสั่งต่อไปนี้ในคอนโซลโต้ตอบเป็นโซลูชันที่ยืดหยุ่นที่สุดสำหรับฉัน:

\i 'path/to/file.sql'

เพียงตรวจสอบให้แน่ใจว่าคุณเชื่อมต่อกับฐานข้อมูลที่ถูกต้องแล้ว คำสั่งนี้เรียกใช้งานคำสั่ง SQL ทั้งหมดในไฟล์ที่ระบุ


1
วิธีนี้ใช้ได้ผลกับฉันในขณะที่วิธีแก้ปัญหาที่ได้รับคะแนนมากที่สุดคือ "stdin ไม่ใช่ข้อผิดพลาด"
김민준

สิ่งที่ฉันกำลังมองหา - วิธีการรันสคริปต์จากภายในpsqlบรรทัดคำสั่ง ขอบคุณ!
vatsug

แค่อยากจะขอบคุณสำหรับสิ่งนี้ ควรรวมอยู่ในคำตอบที่ถูกต้อง
PKHunter

สิ่งนี้ถูกต้องอย่าใช้แบ็กสแลชในพา ธ ใน windows!
Erdinc Ay

เช่นเดียวกับ Windows คุณต้องมีเครื่องหมายทับสองข้าง
CMAS

44

ใช้งานได้ดีในบรรทัดคำสั่งอาร์กิวเมนต์ทั้งหมดจำเป็นต้องมี -W สำหรับรหัสผ่าน

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

22

เพียงเพื่อ funsies ถ้าการถ่ายโอนข้อมูลของคุณถูกบีบอัดคุณสามารถทำสิ่งที่ชอบ

gunzip -c filename.gz | psql dbname

ดังที่ยาโคบกล่าวถึงเอกสาร PostgreSQLอธิบายทั้งหมดนี้ค่อนข้างดี



4

คุณสามารถทำได้ใน pgadmin3 วางสคีมาที่การถ่ายโอนข้อมูลของคุณมีอยู่ จากนั้นคลิกขวาที่ฐานข้อมูลและเลือกเรียกคืน จากนั้นคุณสามารถเรียกดูไฟล์ดัมพ์


2
แต่ปุ่ม 'กู้คืน' จะไม่สามารถคลิกได้แม้หลังจากเลือกไฟล์. sql ซอฟต์แวร์นี้ต้องการไฟล์ชนิดอื่น - อันที่มีรูปแบบ * .backup การคลิก 'ช่วย' ในกล่องนำเข้านั้นหมายถึง pg_restore - "... ยูทิลิตี้สำหรับการกู้คืนฐานข้อมูล PostgreSQL จากไฟล์เก็บถาวรที่สร้างโดย pg_dump ในรูปแบบที่ไม่ใช่ข้อความธรรมดา" ไฟล์ sql ที่ OP อ้างถึงเป็นรูปแบบข้อความล้วน
JosephK

4

ฉันสังเกตเห็นว่ามีตัวอย่างมากมายที่ซับซ้อนสำหรับ localhost ที่เพิ่งโพสต์ผู้ใช้โดยไม่ใช้รหัสผ่านในหลายกรณี:

psql -d db_name -f dump.sql

4

ตรวจสอบให้แน่ใจว่าสร้างฐานข้อมูลที่คุณต้องการนำเข้าจากนั้นคุณสามารถนำเข้าดัมพ์ด้วย

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

หากคุณต้องการเขียนทับฐานข้อมูลทั้งหมดให้ปล่อยฐานข้อมูลก่อน

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

แล้วสร้างขึ้นใหม่ด้วย

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

2

ฉันลองวิธีแก้ไขปัญหาที่แตกต่างกันมากมายสำหรับการกู้คืนข้อมูลสำรอง postgres ของฉัน ฉันพบปัญหาในการปฏิเสธ MacOS ไม่มีสิทธิ์ดูเหมือนว่าจะทำงานได้

นี่คือวิธีที่ฉันได้มันไปทำงาน:

Postgres มาพร้อมกับ Pgadmin4 หากคุณใช้ macOS คุณสามารถกดCMD+ SPACEและพิมพ์pgadmin4เพื่อเรียกใช้ สิ่งนี้จะเปิดแท็บเบราว์เซอร์ใน Chrome

หากคุณพบข้อผิดพลาดในการทำให้ pgadmin4 ทำงานให้ลองใช้killall pgAdmin4เทอร์มินัลแล้วลองอีกครั้ง


ขั้นตอนในการรับ pgadmin4 + backup / restore

1. สร้างการสำรองข้อมูล

ทำได้โดยคลิกขวาที่ฐานข้อมูล -> "สำรอง"

ป้อนคำอธิบายรูปภาพที่นี่

2. ตั้งชื่อไฟล์

กดtest12345ไลค์ คลิกสำรองข้อมูล สิ่งนี้สร้างดัมพ์ไฟล์ไบนารีไม่ใช่ใน.sqlรูปแบบ

ป้อนคำอธิบายรูปภาพที่นี่

3. ดูว่ามันดาวน์โหลดที่ไหน

ควรมีป๊อปอัพที่ด้านล่างของหน้าจอของคุณ คลิกหน้า "รายละเอียดเพิ่มเติม" เพื่อดูว่าข้อมูลสำรองของคุณดาวน์โหลดไปที่ใด

ป้อนคำอธิบายรูปภาพที่นี่

4. ค้นหาตำแหน่งของไฟล์ที่ดาวน์โหลด

ในกรณีนี้มันเป็น /users/vincenttang

ป้อนคำอธิบายรูปภาพที่นี่

5. กู้คืนข้อมูลสำรองจาก pgadmin

สมมติว่าคุณทำตามขั้นตอนที่ 1 ถึง 4 อย่างถูกต้องคุณจะมีไฟล์ไบนารีกู้คืน อาจมีบางครั้งที่เพื่อนร่วมงานของคุณต้องการใช้ไฟล์กู้คืนในเครื่องของพวกเขา ได้กล่าวว่าคนไป pgadmin และเรียกคืน

ทำได้โดยคลิกขวาที่ฐานข้อมูล -> "กู้คืน"

ป้อนคำอธิบายรูปภาพที่นี่

6. เลือกค้นหาไฟล์

อย่าลืมเลือกตำแหน่งไฟล์ด้วยตัวเองอย่าลากและวางไฟล์ลงในช่องอัพโหลดใน pgadmin เพราะคุณจะพบข้อผิดพลาดในการอนุญาต ค้นหาไฟล์ที่คุณเพิ่งสร้างขึ้นแทน:

ป้อนคำอธิบายรูปภาพที่นี่

7. ค้นหาไฟล์ดังกล่าว

คุณอาจต้องเปลี่ยนตัวกรองที่ด้านล่างเป็น "ไฟล์ทั้งหมด" ค้นหาไฟล์หลังจากนั้นจากขั้นตอนที่ 4 ตอนนี้กดปุ่ม "เลือก" ที่ด้านล่างเพื่อยืนยัน

ป้อนคำอธิบายรูปภาพที่นี่

8. กู้คืนไฟล์ดังกล่าว

คุณจะเห็นหน้านี้อีกครั้งโดยเลือกตำแหน่งของไฟล์ ไปข้างหน้าและเรียกคืน

ป้อนคำอธิบายรูปภาพที่นี่

9. สำเร็จ

หากทุกอย่างดีด้านล่างขวาควรป๊อปอัพตัวบ่งชี้ที่แสดงว่าการกู้คืนสำเร็จ คุณสามารถนำทางไปยังตารางของคุณเพื่อดูว่าข้อมูลได้รับการกู้คืนที่เหมาะสมในแต่ละตารางหรือไม่

10. ถ้าไม่สำเร็จ:

หากขั้นตอนที่ 9 ล้มเหลวลองลบสคีมาเก่าของคุณในฐานข้อมูลของคุณ ไปที่ "เครื่องมือค้นหา"

ป้อนคำอธิบายรูปภาพที่นี่

ดำเนินการบล็อกรหัสนี้:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้ลองขั้นตอนที่ 5 ถึง 9 อีกครั้งมันควรจะได้ผล

สรุป

นี่คือวิธีที่ฉันต้องสำรอง / กู้คืนการสำรองข้อมูลของฉันใน Postgres เมื่อฉันมีปัญหาการอนุญาตข้อผิดพลาดและไม่สามารถเข้าสู่ระบบในฐานะ superuser หรือตั้งค่าข้อมูลรับรองสำหรับการอ่าน / เขียนโดยใช้chmodสำหรับโฟลเดอร์ เวิร์กโฟลว์นี้ทำงานสำหรับการถ่ายโอนข้อมูลไฟล์ไบนารีเริ่มต้นเป็น "กำหนดเอง" จาก pgadmin ฉันถือว่า.sqlเป็นวิธีเดียวกัน แต่ฉันยังไม่ได้ทดสอบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.