Mon ordinateur est tombé en panne mais heureusement j'ai sauvegardé Le dossier C:\Program Files\PostgreSQL.
Maintenant, je travaille sur un nouvel ordinateur et j'aimerais importer les anciennes bases de données Postgres stockées sur le disque externe.
J'aimerais exporter le schéma d'une base de données spécifique Qui se trouve dans le dossier de sauvegarde.
Le fichier PostgreSQL\8.3\data\global\pg_database
contient des informations sur les bases de données et leurs OID. par exemple:
"db1" 20012
"db2" 23456
Je voudrais exporter le schéma de "db1".
Il existe un dossier nommé "20012" dans le dossier "PostgreSQL\8.3\data\base\20012"
Qui contient beaucoup de fichiers [500 fichiers].
Est-il possible d'exporter le schéma de cette base de données?
Notez que tous les fichiers de base de données Postgresql sont situés Sur un disque dur externe et je voudrais exporter le schéma de cette base de données dans un fichier SQL, récupérer ce fichier, l’exécuter et créer localement la même base de données exacte.
Vous devriez jeter un oeil à pg_dump
:
pg_dump -s databasename
Dumpera uniquement le schéma sur stdout au format .sql.
Pour Windows, vous voudrez probablement appeler pg_dump.exe
. Je n'ai pas accès à une machine Windows mais je suis presque sûr de mémoire que c'est la commande. Voir si l'aide fonctionne pour vous aussi.
Dans Linux vous pouvez faire comme ça
pg_dump -U postgres -s postgres > exportFile.dmp
Peut-être que cela peut fonctionner dans Windows aussi, Sinon essayer la même chose avec pg_dump.exe
pg_dump.exe -U postgres -s postgres > exportFile.dmp
J'utilise Postgres 9.6 où je devais exporter un schéma particulier avec des données.
J'ai utilisé la commande suivante:
pg_dump.exe -U username -d databasename -n schemaname > C:\mylocation\mydumpfilename.dmp
Si vous ne voulez que le schéma sans données, utilisez le commutateur s
au lieu de n
Vous trouverez ci-dessous la liste des commutateurs 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 <[email protected]>.
Si vous voulez seulement créer des tables, alors vous pouvez faire pg_dump -s databasename | awk 'RS="";/CREATE TABLE[^;]*;/'
configurez un nouveau serveur postgresql et remplacez son dossier de données par les fichiers de votre disque externe.
Vous pourrez alors démarrer ce serveur postgresql et récupérer les données en utilisant pg_dump (pg_dump -s pour le schéma uniquement comme mentionné)
pg_dump -d <databasename> -h <hostname> -p <port> -n <schemaname> -f <location of the dump file>
Veuillez noter que vous disposez des privilèges suffisants pour accéder à ce schéma . Si vous souhaitez effectuer une sauvegarde en tant qu'utilisateur spécifique, ajoutez un nom d'utilisateur dans cette commande précédé de -U
Vous devriez utiliser quelque chose comme ceci pg_dump --schema=your_schema_name db1
, pour plus de détails, jetez un oeil ici