Nhập kết xuất SQL vào cơ sở dữ liệu PostgreSQL


451

Chúng tôi đang chuyển đổi máy chủ lưu trữ và máy chủ cũ cung cấp kết xuất SQL của cơ sở dữ liệu PostgreQuery của trang web của chúng tôi.

Bây giờ, tôi đang cố gắng thiết lập điều này trên máy chủ WAMP cục bộ để kiểm tra điều này.

Vấn đề duy nhất là tôi không có ý tưởng làm thế nào để nhập cơ sở dữ liệu này trong PostgreQuery 9 mà tôi đã thiết lập.

Tôi đã thử pgAdmin III nhưng dường như tôi không thể tìm thấy chức năng 'nhập'. Vì vậy, tôi chỉ cần mở trình soạn thảo SQL và dán nội dung của kết xuất ở đó và thực thi nó, nó tạo các bảng nhưng nó vẫn báo lỗi cho tôi khi nó cố gắng đưa dữ liệu vào đó.

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

Tôi cũng đã thử làm điều này với dấu nhắc lệnh nhưng tôi không thể tìm thấy lệnh mà tôi cần.

Nếu tôi làm

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

Tôi nhận được lỗi

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

Cách tốt nhất để nhập cơ sở dữ liệu là gì?


Tôi đã có một lỗi tương tự như lỗi đầu tiên của bạn : ERROR: syntax error at or near "t". Hóa ra tôi chỉ nhập một lược đồ một phần và do đó, một CREATE TABLEtuyên bố trước đó trong kịch bản đã thất bại. Xem qua toàn bộ đầu ra của nhập khẩu để tìm thấy nó.
owensmartin

Câu trả lời:


732
psql databasename < data_base_dump

Đó là lệnh bạn đang tìm kiếm.

Chú ý: databasenamephải được tạo trước khi nhập. Hãy xem Tài liệu PostgreSQL Chương 23. Sao lưu và khôi phục .


1
Tôi đã thử rằng psql mydatabase <C: \ database \ db-backup.sql nhưng tôi gặp lỗi Lệnh \ cơ sở dữ liệu không hợp lệ. Tôi cũng đã thử với "" xung quanh nó.
lóa mắt

23
@Dazz Bạn phải thực hiện lệnh này từ dấu nhắc lệnh của bạn (Bắt đầu -> Chạy -> cmd), không phải từ dấu nhắc postgres.
Jacob

2
nếu tôi chạy nó từ cmd, tôi nhận được toán tử '<' được dành riêng cho sử dụng trong tương lai. '
lóa mắt

3
@Dazz: Bạn cũng có thể sử dụng -fcông tắc (hoặc --file)
Grzegorz Szpetkowski

47
psql --username = postgres databasename <data_base_dump.sql
Maxence

356

Đây là lệnh bạn đang tìm kiếm.

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

29
Tốt, nhưng tốt hơn là thêm thông số "-L logfile.log" để ghi nhật ký đầu ra trên tệp.
zerologiko

2
nhận được điều này "Đầu vào là kết xuất định dạng tùy chỉnh PostgreSQL. Sử dụng máy khách dòng lệnh pg_restore để khôi phục kết xuất này vào cơ sở dữ liệu."
Wajdan Ali

3
Bạn cũng có thể:pg_restore -h hostname -d dbname -U username filename.sql
Fábio Araújo

114

Tôi tin rằng bạn muốn chạy trong psql:

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

Phải sử dụng điều này bởi vì eshell của Emacs không hỗ trợ chuyển hướng đầu vào. Cảm ơn.
duma

3
Hãy chắc chắn thay đổi cơ sở dữ liệu trước tiên với \ c <database_name>
hkong

53

Điều đó làm việc cho tôi:

sudo -u postgres psql db_name < 'file_path'

49

Tôi không chắc liệu điều này có hiệu quả với tình huống của OP hay không, nhưng tôi thấy rằng việc chạy lệnh sau trong bảng điều khiển tương tác là giải pháp linh hoạt nhất đối với tôi:

\i 'path/to/file.sql'

Chỉ cần đảm bảo rằng bạn đã kết nối với cơ sở dữ liệu chính xác. Lệnh này thực thi tất cả các lệnh SQL trong tệp đã chỉ định.


1
Giải pháp này hiệu quả với tôi trong khi giải pháp được bình chọn nhiều nhất mang lại lỗi "stdin không phải là lỗi".
김민준

Chỉ là những gì tôi đang tìm kiếm - một cách để thực thi tập lệnh từ bên trong psqldòng lệnh. Cảm ơn!
vatsug

Chỉ muốn cảm ơn bạn cho điều này. Nên được đưa vào câu trả lời đúng.
PKHunter

Điều này là chính xác, không sử dụng dấu gạch chéo ngược trong đường dẫn trong windows!
Erdinc Ay

còn đối với Windows, bạn cần các dấu gạch chéo hai lần
CMAS

44

Hoạt động khá tốt, trong dòng lệnh, tất cả các đối số được yêu cầu, -W là cho mật khẩu

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

22

Chỉ để giải trí, nếu bãi rác của bạn bị nén, bạn có thể làm một cái gì đó như

gunzip -c filename.gz | psql dbname

Như Jacob đã đề cập, các tài liệu PostgreSQL mô tả tất cả điều này khá tốt.


7

Tôi sử dụng:

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

Hy vọng điều này sẽ giúp được ai đó.


4

Bạn có thể làm điều đó trong pgadmin3. Thả (các) lược đồ mà bãi chứa của bạn chứa. Sau đó nhấp chuột phải vào cơ sở dữ liệu và chọn Khôi phục. Sau đó, bạn có thể duyệt tập tin kết xuất.


2
Nhưng nút 'khôi phục' không thể nhấp được ngay cả sau khi chọn tệp .sql. Phần mềm này dường như muốn một số loại tệp khác - một loại có định dạng * .backup. Nhấp vào 'trợ giúp' trên hộp nhập đó đề cập đến pg_restore - "... một tiện ích để khôi phục cơ sở dữ liệu PostgreQuery từ kho lưu trữ được tạo bởi pg_dump ở một trong các định dạng văn bản không đơn giản." Tệp sql mà OP đề cập đến là định dạng văn bản thuần túy.
JosephK

4

đảm bảo cơ sở dữ liệu bạn muốn nhập vào được tạo, sau đó bạn có thể nhập kết xuất với

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

Nếu bạn muốn ghi đè lên toàn bộ cơ sở dữ liệu, trước tiên hãy bỏ cơ sở dữ liệu

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

và sau đó tạo lại nó với

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

3

Tôi nhận thấy rằng nhiều ví dụ được áp dụng quá mức cho localhost, nơi chỉ có người dùng postgres không có mật khẩu tồn tại trong nhiều trường hợp:

psql -d db_name -f dump.sql

2

Tôi đã thử nhiều giải pháp khác nhau để khôi phục lại bản sao lưu postgres của mình. Tôi đã chạy vào sự cho phép từ chối các vấn đề trên MacOS, dường như không có giải pháp nào hoạt động.

Đây là cách tôi làm cho nó hoạt động:

Postgres đi kèm với PGadmin4. Nếu bạn sử dụng macOS, bạn có thể nhấn CMD+ SPACEvà gõ pgadmin4để chạy nó. Điều này sẽ mở ra một tab trình duyệt bằng chrome.

Nếu bạn gặp phải lỗi khiến pgadmin4 hoạt động, hãy thử killall pgAdmin4trong thiết bị đầu cuối của bạn, sau đó thử lại.


Các bước để nhận pgadmin4 + sao lưu / khôi phục

1. Tạo bản sao lưu

Thực hiện việc này bằng cách bấm chuột phải vào cơ sở dữ liệu -> "sao lưu"

nhập mô tả hình ảnh ở đây

2. Đặt tên cho tệp.

Thích test12345. Nhấn vào sao lưu. Điều này tạo ra một kết xuất tệp nhị phân, nó không ở .sqlđịnh dạng

nhập mô tả hình ảnh ở đây

3. Xem nơi nó được tải xuống

Cần có một cửa sổ bật lên ở phía dưới màn hình của bạn. Nhấp vào trang "chi tiết hơn" để xem nơi sao lưu của bạn được tải xuống

nhập mô tả hình ảnh ở đây

4. Tìm vị trí của tệp đã tải xuống

Trong trường hợp này, nó /users/vincenttang

nhập mô tả hình ảnh ở đây

5. Khôi phục bản sao lưu từ pgadmin

Giả sử bạn đã thực hiện đúng các bước từ 1 đến 4, bạn sẽ có tệp nhị phân khôi phục. Sẽ có lúc đồng nghiệp của bạn muốn sử dụng tệp khôi phục của bạn trên máy cục bộ của họ. Đã nói người đi pgadmin và khôi phục

Thực hiện việc này bằng cách bấm chuột phải vào cơ sở dữ liệu -> "khôi phục"

nhập mô tả hình ảnh ở đây

6. Chọn công cụ tìm tập tin

Đảm bảo chọn vị trí tệp theo cách thủ công, KHÔNG kéo và thả tệp vào các trường tải lên trong pgadmin. Bởi vì bạn sẽ chạy vào các quyền lỗi. Thay vào đó, hãy tìm tệp bạn vừa tạo:

nhập mô tả hình ảnh ở đây

7. Tìm tập tin nói

Bạn có thể phải thay đổi bộ lọc ở dưới cùng thành "Tất cả các tệp". Tìm tệp sau đó, từ bước 4. Bây giờ nhấn nút "Chọn" phía dưới để xác nhận

nhập mô tả hình ảnh ở đây

8. Khôi phục tập tin đã nói

Bạn sẽ thấy trang này một lần nữa, với vị trí của tệp được chọn. Đi trước và khôi phục nó

nhập mô tả hình ảnh ở đây

9. Thành công

Nếu tất cả đều tốt, phía dưới bên phải sẽ bật lên một chỉ báo cho thấy khôi phục thành công. Bạn có thể điều hướng đến các bảng của mình để xem liệu dữ liệu đã được khôi phục phù hợp trên mỗi bảng chưa.

10. Nếu nó không thành công:

Nếu bước 9 không thành công, hãy thử xóa lược đồ công khai cũ trên cơ sở dữ liệu của bạn. Chuyển đến "Công cụ truy vấn"

nhập mô tả hình ảnh ở đây

Thực thi khối mã này:

DROP SCHEMA public CASCADE; CREATE SCHEMA public;

nhập mô tả hình ảnh ở đây

Bây giờ hãy thử các bước 5 đến 9 một lần nữa, nó sẽ hoạt động

Tóm lược

Đây là cách tôi phải sao lưu / khôi phục bản sao lưu của mình trên Postgres, khi tôi gặp vấn đề về quyền và không thể đăng nhập như một siêu người dùng. Hoặc đặt thông tin đăng nhập để đọc / ghi bằng chmodthư mục. Quy trình công việc này hoạt động đối với kết xuất tệp nhị phân mặc định của "Tùy chỉnh" từ pgadmin. Tôi giả sử .sqllà như vậy, nhưng tôi chưa thử

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.