PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да възстановите публична схема в друга схема

Решението на @Tometzky не е съвсем правилно, поне с pg_dump на 9.2 . Ще създаде таблицата в новата схема, но pg_dump schema-квалифицира ALTER TABLE ... OWNER TO изрази, така че те ще се провалят:

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 | 

Ще трябва също така да редактирате дъмпа, за да премахнете квалификацията на схемата на public.test или го променете с името на новата схема. sed е полезен инструмент за това.

Можех да се закълна, че правилният начин да направя това е с pg_dump -Fc -n public -f dump.dbbackup след това pg_restore в нова схема, но изглежда не мога да разбера точно как в момента.

Актуализация:Не, изглежда като sed е най-добрият ви залог. Вижте Искам да възстановя базата данни с различна схема



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на pt-pg-summary Percona Toolkit за PostgreSQL

  2. rails postgres ГРЕШКА:невалиден входен синтаксис за тип двойна точност

  3. Какъв е препоръчителният начин за криптиране на потребителски пароли в база данни?

  4. Postgres Left Join с условието къде

  5. Инсталирайте pdo за postgres Ubuntu