α=> CREATE DATABASE db1;
CREATE DATABASE
α=> \c db1
You are now connected to database "db1" as user "student".
α=> CREATE TABLE t1(n integer);
CREATE TABLE
α=> INSERT INTO t1 VALUES (1), (2), (3);
INSERT 0 3
α=> CREATE VIEW v1 AS SELECT * FROM t1;
CREATE VIEW
α=> CREATE DATABASE db2;
CREATE DATABASE
α=> \c db2
You are now connected to database "db2" as user "student".
α=> CREATE TABLE t2(n integer);
CREATE TABLE
α=> INSERT INTO t2 VALUES (1), (2), (3);
INSERT 0 3
α=> CREATE VIEW v2 AS SELECT * FROM t2;
CREATE VIEW
student$ pg_dumpall --clean --globals-only -U postgres -f /home/student/alpha_globals.sql
Здесь мы ограничимся теми базами данных, которые создали сами.
student$ pg_dump --jobs=2 --format=directory -d db1 -f /home/student/db1.directory
student$ pg_dump --jobs=2 --format=directory -d db2 -f /home/student/db2.directory
Сначала восстанавливаем глобальные объекты:
student$ psql -p 5433 -U postgres -f alpha_globals.sql
SET SET SET psql:alpha_globals.sql:16: ERROR: current user cannot be dropped psql:alpha_globals.sql:17: ERROR: role "student" cannot be dropped because some objects depend on it DETAIL: owner of database student psql:alpha_globals.sql:24: ERROR: role "postgres" already exists ALTER ROLE psql:alpha_globals.sql:26: ERROR: role "student" already exists ALTER ROLE psql:alpha_globals.sql:34: NOTICE: role "student" is already a member of role "pg_read_all_stats" GRANT ROLE
Затем восстанавливаем базы данных:
student$ pg_restore -p 5433 -d postgres --create --jobs=2 /home/student/db1.directory
pg_restore: [archiver (db)] Error while PROCESSING TOC: pg_restore: [archiver (db)] Error from TOC entry 2877; 0 0 COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; WARNING: errors ignored on restore: 1
student$ pg_restore -p 5433 -d postgres --create --jobs=2 /home/student/db2.directory
pg_restore: [archiver (db)] Error while PROCESSING TOC: pg_restore: [archiver (db)] Error from TOC entry 2877; 0 0 COMMENT EXTENSION plpgsql pg_restore: [archiver (db)] could not execute query: ERROR: must be owner of extension plpgsql Command was: COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; WARNING: errors ignored on restore: 1
Проверим:
student$ psql -p 5433
β=> \c db1
You are now connected to database "db1" as user "student".
β=> \d
List of relations Schema | Name | Type | Owner --------+------+-------+--------- public | t1 | table | student public | v1 | view | student (2 rows)
β=> \c db2
You are now connected to database "db2" as user "student".
β=> \d
List of relations Schema | Name | Type | Owner --------+------+-------+--------- public | t2 | table | student public | v2 | view | student (2 rows)
Например, можно установить отображение неопределенных значений, совпадающее с какими-либо даными:
α=> CREATE TABLE anticopy(s text);
CREATE TABLE
α=> INSERT INTO anticopy(s) VALUES ('N'), (NULL);
INSERT 0 2
α=> COPY anticopy TO stdout WITH (NULL 'N');
N N
Вывод двух разных значений теперь неотличим друг от друга.
Осторожнее с изменением формата по умолчанию!