使用pg_dump仅从数据库中的一个表中获取插入语句


121

我正在寻找一种在PostgreSQL中INSERT使用的方法来从数据库中的特定表中获取所有行作为语句pg_dump

例如,我有表A,表AI中的所有行都需要作为INSERT语句,它还应该将这些语句转储到文件中。

这可能吗?

Answers:


229

如果版本<8.4.0

pg_dump -D -t <table> <database>

添加-a-t,如果你只想要插入,而不CREATE TABLE等来设置表摆在首位。

版本> = 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 2010年

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

考虑到您具有相同的结构,将相同的数据插入数据库

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.