使用 pg _ dump 只从数据库中的一个表获取插入语句

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

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

这可能吗?

180285 次浏览

如版本 < 8.4.0

pg_dump -D -t <table> <database>

如果只需要 INSERT,那么在 -t之前添加 -a,而不需要首先设置表的 CREATETABLE 等。

Version > = 8.4.0

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

如果您想将插入输出到 。 sql文件中:

  1. cd到您想要 .sql文件所在的位置
  2. pg_dump --column-inserts --data-only --table=<table> <database> > my_dump.sql

请注意 > my_dump.sql命令。这将把所有内容放入一个名为 我的垃圾场的 sql 文件中

写一个我喜欢的剧本:

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


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

如果您正在使用远程访问,并希望转储所有数据库数据,您可以使用:

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

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

对于后12,这对我有效:

pg_dump -d <database> -t <table> > DATA.dump