Sử dụng pg_dump để chỉ nhận các câu lệnh chèn từ một bảng trong cơ sở dữ liệu


121

Tôi đang tìm cách lấy tất cả các hàng dưới dạng INSERTcâu lệnh từ một bảng cụ thể trong cơ sở dữ liệu bằng pg_dumpPostgreSQL.

Ví dụ: tôi có bảng A và tất cả các hàng trong bảng AI cần là INSERTcâu lệnh, nó cũng sẽ kết xuất các câu lệnh đó vào một tệp.

Điều này có khả thi không?

Câu trả lời:


229

nếu phiên bản <8.4.0

pg_dump -D -t <table> <database>

Thêm vào -atrước -tnếu bạn chỉ muốn CHÈN, không có TẠO BẢNG, v.v. để thiết lập bảng ngay từ đầu.

phiên bản> = 8.4.0

pg_dump --column-inserts --data-only --table=<table> <database>

58
Các tùy chọn -d và -D đã bị xóa khỏi PostgreSQL 8.4 (xem ghi chú phát hành 8.4.0). Bây giờ bạn phải sử dụng tên "dài": pg_dump --column-insert --data-only --table = <table> <database>
Matthew Wood

1
Tuy nhiên -d, các phiên bản -a, và -tngắn vẫn còn tồn tại. Kiểm tra bằng PG11.
demisx

--insertslà một lựa chọn khác; nó khôi phục nhanh hơn một chút nhưng không thể chịu được các thay đổi thứ tự cột
Andy

34

Nếu bạn muốn DUMP phần chèn của mình vào tệp .sql :

  1. cdđến vị trí bạn muốn gửi .sqlhồ sơ
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

Lưu ý > my_dump.sqllệnh. Điều này sẽ đưa mọi thứ vào một tệp sql có tên my_dump


2

Đưa vào một kịch bản mà tôi thích như thế này:

#!/bin/bash
set -o xtrace # remove me after debug
TABLE=charge_unit
DB_NAME=prod_sit_entities_db

BASE_DIR=/var/backups/someDir
LOCATION="${BASE_DIR}/myApp_$(date +%Y%m%d_%H%M%S)"
FNAME="${LOCATION}_${DB_NAME}_${TABLE}.sql"

# Create backups directory if not exists
if [[ ! -e $BASE_DIR ]];then
|       mkdir $BASE_DIR
|       chown -R postgres:postgres $BASE_DIR
fi

sudo -H -u postgres pg_dump --column-inserts --data-only --table=$TABLE $DB_NAME > $FNAME
sudo gzip $FNAME

1

chỉ trong trường hợp bạn đang sử dụng truy cập từ xa và muốn kết xuất tất cả dữ liệu cơ sở dữ liệu, bạn có thể sử dụng:

pg_dump -a -h your_host -U your_user -W -Fc your_database > DATA.dump

nó sẽ tạo ra một kết xuất với tất cả dữ liệu cơ sở dữ liệu và sử dụng

pg_restore -a -h your_host -U your_user -W -Fc your_database < DATA.dump

để chèn cùng một dữ liệu vào cơ sở dữ liệu của bạn vì bạn có cùng cấu trúc

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.