내 컴퓨터가 고장 났지만 다행히 C : \ Program Files \ PostgreSQL 폴더를 백업했습니다.
이제 새 컴퓨터에서 작업 중이며 외부 디스크에 저장된 이전 Postgres 데이터베이스를 가져오고 싶습니다.
백업 폴더에있는 특정 데이터베이스의 스키마를 내보내고 싶습니다.
이 파일 PostgreSQL\8.3\data\global\pg_database
에는 데이터베이스 및 해당 OID에 대한 정보가 포함되어 있습니다. 예를 들면 :
"db1" 20012
"db2" 23456
“db1″의 스키마를 내보내고 싶습니다.
"PostgreSQL\8.3\data\base\20012"
많은 파일 [500 개 파일]이 포함 된 폴더에 “20012”라는 이름의 폴더 가 있습니다.
해당 데이터베이스의 스키마를 내보내는 방법이 있습니까?
모든 Postgresql 데이터베이스 파일은 외부 하드 디스크에 있으며 해당 데이터베이스의 스키마를 SQL 파일로 내보내고 해당 파일을 가져 와서 실행하고 동일한 정확한 데이터베이스를 로컬로 만들고 싶습니다.
답변
다음을 살펴보아야합니다 pg_dump
.
pg_dump -s databasename
스키마 만 stdout에 .sql로 덤프합니다.
Windows의 경우 pg_dump.exe
. 나는 Windows 시스템에 액세스 할 수 없지만 메모리에서 명령 인 것을 확신합니다. 도움이 당신에게도 효과가 있는지 확인하십시오.
답변
Linux 에서는 다음과 같이 할 수 있습니다.
pg_dump -U postgres -s postgres > exportFile.dmp
pg_dump.exe 와 동일하게 시도하지 않으면 Windows 에서도 작동 할 수 있습니다.
pg_dump.exe -U postgres -s postgres > exportFile.dmp
답변
데이터와 함께 특정 스키마를 내 보내야하는 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>.
답변
pg_dump -d <databasename> -h <hostname> -p <port> -n <schemaname> -f <location of the dump file>
해당 스키마에 액세스 할 수있는 충분한 권한이 있습니다. 특정 사용자로 백업하려면 해당 명령 앞에 사용자 이름을 추가하십시오.-U
답변
테이블 만들기 만 원하는 경우 다음을 수행 할 수 있습니다. pg_dump -s databasename | awk 'RS="";/CREATE TABLE[^;]*;/'
답변
들어 리눅스 : (데이터는 제외)
-
pg_dump -s -t tablename databasename > dump.sql
(데이터베이스의 특정 테이블) -
pg_dump -s databasename > dump.sql
(전체 데이터베이스)
답변
새 postgresql 서버를 설정하고 데이터 폴더를 외부 디스크의 파일로 바꿉니다.
그러면 해당 postgresql 서버를 시작하고 pg_dump를 사용하여 데이터를 검색 할 수 있습니다 (설명 된대로 스키마 전용의 경우 pg_dump -s).