pg_dumpを使用して、データベース内の1つのテーブルからのみ挿入ステートメントを取得する


121

PostgreSQL INSERTを使用pg_dumpして、データベース内の特定の1つのテーブルからすべての行をステートメントとして取得する方法を探しています。

たとえば、テーブルAとテーブルAIのすべての行がINSERTステートメントとして必要であり、それらのステートメントをファイルにダンプする必要があります。

これは可能ですか?

回答:


229

バージョン<8.4.0の場合

pg_dump -D -t <table> <database>

最初にCREATE TABLEなどを使用せずにINSERTのみが必要な場合は-a、その前に追加し-tます。

バージョン> = 8.4.0

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

58
-dおよび-DオプションはPostgreSQL 8.4から削除されました(8.4.0リリースノートを参照)。「長い」名前を使用する必要があります:pg_dump --column-inserts --data-only --table = <table> <database>
Matthew Wood

1
-d-a、と-t短いバージョンでは、しかし、まだ存在しています。PG11で確認。
demisx

--inserts別のオプションです。復元はわずかに速くなりますが、列の順序の変更を許容できません
Andy

34

挿入を.sqlファイルにダンプする場合:

  1. cdファイリングしたい場所.sql
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

> my_dump.sqlコマンドに注意してください。これはすべてをmy_dumpという名前のSQLファイルに入れます


2

私はそのようなものをスクリプトに入れます:

#!/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

リモートアクセスを使用していて、すべてのデータベースデータをダンプしたい場合に備えて、以下を使用できます。

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

すべてのデータベースデータを使用してダンプを作成し、使用する

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

同じ構造であることを考慮して、データベースに同じデータを挿入する

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.