sql >> Databáze >  >> RDS >> PostgreSQL

Jak obnovit veřejné schéma do jiného schématu

@Tometzkyho řešení není úplně správné, alespoň s 9.2 pg_dump . Vytvoří tabulku v novém schématu, ale pg_dump schéma-kvalifikuje ALTER TABLE ... OWNER TO příkazy, takže ty selžou:

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 | 

Budete také muset upravit výpis, abyste odstranili kvalifikaci schématu na public.test nebo jej změňte na nový název schématu. sed je k tomu užitečný nástroj.

Mohl jsem přísahat, že správný způsob, jak to udělat, byl pomocí pg_dump -Fc -n public -f dump.dbbackup poté pg_restore do nového schématu, ale nezdá se mi, že bych teď přesně zjistil jak.

Aktualizace:Ne, vypadá to jako sed je vaše nejlepší sázka. Viz Chci obnovit databázi s jiným schématem



  1. Vložit více řádků s PDO

  2. Proč je připojení k serveru MySQL tak pomalé?

  3. SQL:Odstraňte duplikáty

  4. Jak pomocí psql zobrazím seznam rozšíření nainstalovaných v databázi?