我正在寻找一种方法,使用PostgreSQL中的pg_dump从数据库中的一个特定表获取所有行作为INSERT语句。
例如,我有一个表A,我需要将表A中的所有行作为INSERT语句,并将这些语句转储到一个文件中。
这是否可行?
例如,我有一个表A,我需要将表A中的所有行作为INSERT语句,并将这些语句转储到一个文件中。
这是否可行?
如果版本小于8.4.0
pg_dump -D -t <table> <database>
如果你只想要INSERTs,而不需要CREATE TABLE等来设置表,请在-t之前添加-a。
版本>= 8.4.0
pg_dump --column-inserts --data-only --table=<table> <database>
如果你想将你的插入语句导出到一个.sql文件中:
cd
到你要放置.sql
文件的目录pg_dump --column-inserts --data-only --table=<表名> <数据库名> > my_dump.sql
请注意,该命令中的> my_dump.sql
部分将把所有内容放入名为my_dump的.sql文件中。
如果您正在使用远程访问并想要转储所有数据库数据,则可以使用以下命令:
pg_dump -a -h 您的主机名 -U 您的用户名 -W -Fc 您的数据库 > DATA.dump
它将创建一个包含所有数据库数据的转储文件,并使用以下命令:
pg_restore -a -h 您的主机名 -U 您的用户名 -W -Fc 您的数据库 < DATA.dump
将相同的数据插入到您的数据库中,前提是您具有相同的结构。
对于PostgreSQL 12,以下方法适用:
pg_dump -d <database> -t <table> > DATA.dump
#!/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
john
的 apple
数据库的数据导出到 backup.sql
,如下所示。*我的回答 解释了如何同时导出模式和数据。pg_dump -U john -a apple > backup.sql
或者:
pg_dump -U john --data-only apple > backup.sql
john
的 apple
数据库的数据仅导出到 backup.sql
文件中,并且只包含以下所示的列名的 INSERT
语句。pg_dump -U john -a --column-inserts apple > backup.sql
john
的 apple
数据库的数据仅导出到 backup.sql
文件中,只使用不包含列名的 INSERT
语句,如下所示:pg_dump -U john -a --inserts apple > backup.sql
person
和animal
的数据,这些表格位于用户(角色)john
的apple
数据库中,并将其保存到backup.sql
文件中,只包含以下所示的INSERT
语句的列名。*在一个命令中可以指定多个表格。pg_dump -U john -a --column-inserts -t person -t animal apple > backup.sql
或者:
pg_dump -U john -a --column-inserts --table=person --table=animal apple > backup.sql
或者:
pg_dump -U john -a --column-inserts --table person --table animal apple > backup.sql
john
的 apple
数据库中特定表 person
和 animal
的数据到 backup.sql
文件中,只包含以下所示的带有列名的 INSERT
语句:pg_dump -U john -a --column-inserts -t person -t animal apple > backup.sql
backup.sql
导入到用户(角色)john
的orange
数据库中,该命令必须用于导入非归档文件,如下所示。*您必须先创建orange
数据库和模式,否则会出现错误,我的回答解释了如何创建数据库,我的回答解释了如何导入模式和数据。psql -U john -f backup.sql orange
john
的apple
数据库中特定表person
和animal
的数据仅以INSERT
语句的形式导出并存档(-Fc
),并将其保存为backup.sql
文件。下面是列名的示例。*我的回答解释了如何导出和存档数据库。pg_dump -U john -Fc -a --column-inserts -t person -t animal apple > backup.sql
backup.sql
导入到用户(角色)john
的orange
数据库中,如下所示。*您必须创建orange
数据库和模式,否则会出现错误,my answer解释了如何创建数据库,my answer解释了如何导入存档文件。pg_restore -U john -d orange < backup.sql
-d
、-a
和-t
的短版本仍然存在。已经在 PG11 中进行了检查。 - demisxSELECT version();
来检查PostgreSQL版本。 - Tms91