如何在PostgreSQL中导出数据库的模式?

我的电脑坏了,但幸运的是我备份了文件夹C:\ Program Files \ PostgreSQL。

现在我正在一台新计算机上工作,我想导入存储在外部磁盘中的以前的Postgres数据库。

我想导出位于备份文件夹中的特定数据库的模式。

PostgreSQL\8.3\data\global\pg_database包含有关数据库及其OID的信息; 例如:

 "db1" 20012 "db2" 23456 

我想导出“db1”的模式。

文件夹"PostgreSQL\8.3\data\base\20012"中有一个名为“20012”的文件夹,其中包含大量文件[500个文件]。

有没有办法导出该数据库的架构?

请注意,所有Postgresql数据库文件都位于外部硬盘上,我想将该数据库的模式导出到SQL文件中,取出该文件,运行它并在本地创build相同的数据库。

可以这样做吗?

你应该看看pg_dump

 pg_dump -s databasename 

只会将模式转储为标准输出为.sql。

对于Windows,您可能需要调用pg_dump.exe 。 我没有访问Windows机器,但我很确定从内存这是命令。 看看你的帮助是否也适合你。

Linux中,你可以这样做

 pg_dump -U postgres -s postgres > exportFile.dmp 

也许它也可以在Windows中工作,如果不尝试与pg_dump.exe相同

 pg_dump.exe -U postgres -s postgres > exportFile.dmp 

如果你只想创build表,那么你可以做pg_dump -s databasename | awk 'RS="";/CREATE TABLE[^;]*;/' pg_dump -s databasename | awk 'RS="";/CREATE TABLE[^;]*;/'

设置一个新的postgresql服务器并将其数据文件夹replace为外部磁盘上的文件。

然后,您将能够启动该postgresql服务器并使用pg_dump检索数据(pg_dump -s仅用于架构,如前所述)

我正在运行Postgres 9.6,我不得不导出一个特定的模式和数据。

我使用了下面的命令:

 pg_dump.exe -U username -d databasename -n schemaname > C:\mylocation\mydumpfilename.dmp 

如果只需要没有数据的模式,请使用开关s而不是n

下面是pg_dump开关列表:

 C:\Program Files\PostgreSQL\9.6\bin>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)) -j, --jobs=NUM use this many parallel jobs to dump -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 --enable-row-security enable row security (dump only content user has access to) --exclude-table-data=TABLE do NOT dump data for the named table(s) --if-exists use IF EXISTS when dropping objects --inserts dump data as INSERT commands, rather than COPY --no-security-labels do not dump security label assignments --no-synchronized-snapshots do not use synchronized snapshots in parallel jobs --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 --snapshot=SNAPSHOT use given snapshot for the dump --strict-names require table and/or schema include patterns to match at least one entity each --use-set-session-authorization use SET SESSION AUTHORIZATION commands instead of ALTER OWNER commands to set ownership Connection options: -d, --dbname=DBNAME database to dump -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 <pgsql-bugs@postgresql.org>.