Mein Computer ist ausgefallen, aber glücklicherweise habe ich den Ordner C:\Programme\PostgreSQL gesichert.
Jetzt arbeite ich auf einem neuen Computer und möchte die vorherigen Postgres-Datenbanken importieren, die auf der externen Festplatte gespeichert sind.
Ich möchte das Schema einer bestimmten Datenbank exportieren, die sich im Sicherungsordner befindet.
Die Datei PostgreSQL\8.3\data\global\pg_database
enthält Informationen über Datenbanken und ihre OIDs zum Beispiel:
"db1" 20012
"db2" 23456
Ich möchte das Schema von "db1" exportieren.
Im Ordner "PostgreSQL\8.3\data\base\20012"
Befindet sich ein Ordner mit dem Namen "20012", der viele Dateien [500 Dateien] enthält.
Gibt es eine Möglichkeit, das Schema dieser Datenbank zu exportieren?
Beachten Sie, dass sich alle Postgresql-Datenbankdateien auf einer externen Festplatte Befinden. Ich möchte das Schema dieser Datenbank in eine SQL-Datei exportieren, diese Datei verwenden, ausführen und dieselbe exakte Datenbank lokal erstellen.
Sie sollten sich pg_dump
ansehen:
pg_dump -s databasename
Gibt nur das Schema als .sql an stdout aus.
Für Windows möchten Sie wahrscheinlich pg_dump.exe
aufrufen. Ich habe keinen Zugriff auf einen Windows-Computer, aber ich bin mir ziemlich sicher, dass dies der Befehl ist. Sehen Sie, ob die Hilfe auch für Sie funktioniert.
In Linux können Sie dies tun
pg_dump -U postgres -s postgres > exportFile.dmp
Vielleicht kann es auch unter Windows funktionieren, Falls nicht, versuchen Sie es auch mit pg_dump.exe .
pg_dump.exe -U postgres -s postgres > exportFile.dmp
Ich verwende Postgres 9.6, wo ich ein bestimmtes Schema zusammen mit Daten exportieren musste.
Ich habe den folgenden Befehl verwendet:
pg_dump.exe -U username -d databasename -n schemaname > C:\mylocation\mydumpfilename.dmp
Wenn Sie nur das Schema ohne Daten benötigen, verwenden Sie den Schalter s
anstelle von n
Im Folgenden finden Sie die pg_dump-Schalterliste:
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 <[email protected]>.
Wenn Sie nur die Tabellen erstellen möchten, können Sie pg_dump -s databasename | awk 'RS="";/CREATE TABLE[^;]*;/'
richten Sie einen neuen Postgresql-Server ein und ersetzen Sie den Datenordner durch die Dateien von Ihrer externen Festplatte.
Sie können dann den Postgresql-Server starten und die Daten mit pg_dump abrufen (pg_dump -s für das Schema-only, wie erwähnt).
pg_dump -d <databasename> -h <hostname> -p <port> -n <schemaname> -f <location of the dump file>
Bitte beachten Sie, dass Sie über ausreichende Berechtigungen zum Zugriff auf dieses Schema verfügen. Wenn Sie ein Backup als bestimmten Benutzer erstellen möchten, fügen Sie in diesem Befehl einen Benutzernamen ein, der mit -U
vorangestellt ist
Sie sollten so etwas wie diesen pg_dump --schema=your_schema_name db1
verwenden, für Details sehen Sie hier