PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak przywrócić publiczny schemat do innego schematu?

Rozwiązanie @Tometzky'ego nie jest do końca właściwe, przynajmniej z pg_dump 9.2 . Utworzy tabelę w nowym schemacie, ale pg_dump schema-kwalifikuje ALTER TABLE ... OWNER TO oświadczenia, więc te zakończą się niepowodzeniem:

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 | 

Będziesz także musiał edytować zrzut, aby usunąć kwalifikację schematu na public.test lub zmień go na nową nazwę schematu. sed jest do tego przydatnym narzędziem.

Mogłem przysiąc, że prawidłowy sposób to zrobienie tego za pomocą pg_dump -Fc -n public -f dump.dbbackup następnie pg_restore w nowy schemat, ale nie mogę teraz dokładnie określić, jak.

Aktualizacja:Nie, wygląda jak sed to twój najlepszy zakład. Zobacz Chcę przywrócić bazę danych z innym schematem



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Scalanie wartości JSONB w PostgreSQL?

  2. Izolacja transakcji PostgreSQL PRZECZYTAJ NIEZAKOŃCZONY

  3. Kolejność według daty, dodaj datę przed i datę po postgresql z podzapytanie

  4. Jak połączyć na zewnątrz dwie tabele (główną i podrzędną wiele do jednego), aby uzyskać tylko JEDEN element z drugiej tabeli?

  5. Ewolucja tolerancji błędów w PostgreSQL