Die Lösung von @Tometzky ist nicht ganz richtig, zumindest mit pg_dump
von 9.2 . Es erstellt die Tabelle im neuen Schema, aber pg_dump
Schema-qualifiziert ALTER TABLE ... OWNER TO
Anweisungen, also werden diese fehlschlagen:
postgres=# CREATE DATABASE demo;
\cCREATE DATABASE
postgres=# \c demo
You are now connected to database "demo" as user "postgres".
demo=# CREATE TABLE public.test ( dummy text );
CREATE TABLE
demo=# \d
List of relations
Schema | Name | Type | Owner
--------+------+-------+----------
public | test | table | postgres
(1 row)
demo=# \q
$
$ pg_dump -U postgres -f demo.sql demo
$ sed -i 's/^SET search_path = public, pg_catalog;$/SET search_path = testschema, pg_catalog;/' demo.sql
$ grep testschema demo.sql
SET search_path = testschema, pg_catalog;
$ dropdb -U postgres demo
$ createdb -U postgres demo
$ psql -U postgres -c 'CREATE SCHEMA testschema;' demo
CREATE SCHEMA
$ psql -U postgres -f demo.sql -v ON_ERROR_STOP=1 -v QUIET=1 demo
psql:demo.sql:40: ERROR: relation "public.test" does not exist
$ psql demo
demo=> \d testschema.test
Table "testschema.test"
Column | Type | Modifiers
--------+------+-----------
dummy | text |
Sie müssen auch den Dump bearbeiten, um die Schemaqualifizierung auf public.test
zu entfernen oder ändern Sie ihn in den neuen Schemanamen. sed
ist ein nützliches Werkzeug dafür.
Ich hätte schwören können, dass dies mit pg_dump -Fc -n public -f dump.dbbackup
richtig gemacht wurde dann pg_restore
in ein neues Schema, aber ich kann momentan nicht genau herausfinden, wie.
Update:Nein, es sieht aus wie sed
ist Ihre beste Wette. Siehe Ich möchte die Datenbank mit einem anderen Schema wiederherstellen