【背景】
L10N 测试时,为了减轻L10N 测试用例执行人员的数据出发成本,常常将DB的数据到给L10N team。这么做的前提是,DB层不涉及L10N的任何翻译,否则就不能这么干了。DB是postgre,因此自然而然的想到用pg_dump命令导出数据。
pg_dump 选项列表:
# pg_dump --help pg_dump dumps a database as a text file or to other formats. Usage: pg_dump [OPTION]... [DBNAME] General options: -f, --file=FILENAME output file or directory name -F, --format=c|d|t|p output file format (custom, directory, tar, plain text (default)) -v, --verbose verbose mode -V, --version output version information, then exit -Z, --compress=0-9 compression level for compressed formats --lock-wait-timeout=TIMEOUT fail after waiting TIMEOUT for a table lock -?, --help show this help, then exit Options controlling the output content: -a, --data-only dump only the data, not the schema -b, --blobs include large objects in dump -c, --clean clean (drop) database objects before recreating -C, --create include commands to create database in dump -E, --encoding=ENCODING dump the data in encoding ENCODING -n, --schema=SCHEMA dump the named schema(s) only -N, --exclude-schema=SCHEMA do NOT dump the named schema(s) -o, --oids include OIDs in dump -O, --no-owner skip restoration of object ownership in plain-text format -s, --schema-only dump only the schema, no data -S, --superuser=NAME superuser user name to use in plain-text format -t, --table=TABLE dump the named table(s) only -T, --exclude-table=TABLE do NOT dump the named table(s) -x, --no-privileges do not dump privileges (grant/revoke) --binary-upgrade for use by upgrade utilities only --column-inserts dump data as INSERT commands with column names --disable-dollar-quoting disable dollar quoting, use SQL standard quoting --disable-triggers disable triggers during data-only restore --exclude-table-data=TABLE do NOT dump data for the named table(s) --inserts dump data as INSERT commands, rather than COPY --no-security-labels do not dump security label assignments --no-tablespaces do not dump tablespace assignments --no-unlogged-table-data do not dump unlogged table data --quote-all-identifiers quote all identifiers, even if not key words --section=SECTION dump named section (pre-data, data, or post-data) --serializable-deferrable wait until the dump can run without anomalies --use-set-session-authorization use SET SESSION AUTHORIZATION commands instead of ALTER OWNER commands to set ownership Connection options: -h, --host=HOSTNAME database server host or socket directory -p, --port=PORT database server port number -U, --username=NAME connect as specified database user -w, --no-password never prompt for password -W, --password force password prompt (should happen automatically) --role=ROLENAME do SET ROLE before dump If no database name is supplied, then the PGDATABASE environment variable value is used. Report bugs to.
【问题】
用如下命令导出DB数据
# pg_dump ddei -U sa -a -f data.sql
# du -sh data.sql
1.7G data.sql
-a, --data-only dump only the data, not the schema
不合理啊,打开导出文件,发现除了要的数据外,还有如下内容,而且占了绝大部分:
--
-- Data for Name: BLOBS; Type: BLOBS; Schema: -; Owner:
--
SET search_path = pg_catalog;
BEGIN;
SELECT pg_catalog.lo_open('17765', 131072);
这个不是我们需要的,要将其滤掉,问题就解决了。 但是看遍了开头的help 信息, 只找到了如下选项跟blobs有关
-b, --blobs include large objects in dump
比较,之前的命令,我们并没有“-b” 选项。到此,问题应该清楚了,这个选项默认是生效的。如何关闭呢,显然简短的 help 信息是不够了。
求助官方文档 http://www.postgresql.org/docs/9.2/static/app-pgdump.html , 下面这句话很关键
Note: Non-schema objects such as blobs are not dumped when -n is specified. You can add blobs back to the dump with the --blobs switch.
果断加上“-n”
[root@ddei1268 ~]# pg_dump ddei -U sa -n public -f noBlobs.sql
[root@ddei1268 ~]# du -sh noBlobs.sql
760K noBlobs.sql