COPY ~~~~ Создадим базу данных и таблицу в ней. => create database db; CREATE DATABASE => \c db You are now connected to database "db" as user "postgres". => create table t(id numeric, s text); CREATE TABLE => insert into t values (1, 'Hi there!'); INSERT 0 1 => insert into t values (2, ''); INSERT 0 1 => insert into t values (3, null); INSERT 0 1 ----------------------------------------------------------------------- => select * from t; id | s ----+----------- 1 | Hi there! 2 | 3 | (3 rows) ----------------------------------------------------------------------- Вот как выглядит таблица в выводе команды COPY: => copy t to stdout; 1 Hi there! 2 3 \N Обратим внимание на то, что пустая строка и null - разные значения, хотя выполняя select этого и не заметно. ----------------------------------------------------------------------- Аналогично можно вводить данные: => truncate table t; TRUNCATE TABLE => copy t from stdin; => 1 Hi there! => 2 => 3 \N => \. COPY 3 ----------------------------------------------------------------------- Проверим: => select * from t; id | s ----+----------- 1 | Hi there! 2 | 3 | (3 rows) => copy t to stdout; 1 Hi there! 2 3 \N ----------------------------------------------------------------------- PG_DUMP ~~~~~~~ Посмотрим на результат работы pg_dump в формате plain. Обратим внимание на команды установки расширения pg_crypto (оно было установлено в template1), а также на то, в каком виде сохранены данные из таблицы. ----------------------------------------------------------------------- pg_dump -d db -- -- PostgreSQL database dump -- SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; -- -- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog; -- -- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language'; -- -- Name: pgcrypto; Type: EXTENSION; Schema: -; Owner: -- CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public; -- -- Name: EXTENSION pgcrypto; Type: COMMENT; Schema: -; Owner: -- COMMENT ON EXTENSION pgcrypto IS 'cryptographic functions'; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: t; Type: TABLE; Schema: public; Owner: postgres; Tablespace: -- CREATE TABLE t ( id numeric, s text ); ALTER TABLE t OWNER TO postgres; -- -- Data for Name: t; Type: TABLE DATA; Schema: public; Owner: postgres -- COPY t (id, s) FROM stdin; 1 Hi there! 2 3 \N \. -- -- Name: public; Type: ACL; Schema: -; Owner: postgres -- REVOKE ALL ON SCHEMA public FROM PUBLIC; REVOKE ALL ON SCHEMA public FROM postgres; GRANT ALL ON SCHEMA public TO postgres; GRANT ALL ON SCHEMA public TO PUBLIC; -- -- PostgreSQL database dump complete -- ----------------------------------------------------------------------- Посмотрим на то, как выглядит оглавление резервной копии. Для этого требуется указать формат, отличный от plain. ----------------------------------------------------------------------- pg_dump --format custom -d db | pg_restore --list ; ; Archive created at Thu Jun 16 17:23:43 2016 ; dbname: db ; TOC Entries: 12 ; Compression: -1 ; Dump Version: 1.12-0 ; Format: CUSTOM ; Integer: 4 bytes ; Offset: 8 bytes ; Dumped from database version: 9.4.8 ; Dumped by pg_dump version: 9.4.8 ; ; ; Selected TOC Entries: ; 2067; 1262 24887 DATABASE - db postgres 7; 2615 2200 SCHEMA - public postgres 2068; 0 0 COMMENT - SCHEMA public postgres 2069; 0 0 ACL - public postgres 1; 3079 11895 EXTENSION - plpgsql 2070; 0 0 COMMENT - EXTENSION plpgsql 2; 3079 24678 EXTENSION - pgcrypto 2071; 0 0 COMMENT - EXTENSION pgcrypto 174; 1259 24888 TABLE public t postgres 2062; 0 24888 TABLE DATA public t postgres ----------------------------------------------------------------------- Можно попросить pg_restore сгенерировать команды для восстановления, например, только определения таблицы t: ----------------------------------------------------------------------- pg_dump --format custom -d db | pg_restore --table=t --schema-only -- -- PostgreSQL database dump -- SET statement_timeout = 0; SET lock_timeout = 0; SET client_encoding = 'UTF8'; SET standard_conforming_strings = on; SET check_function_bodies = false; SET client_min_messages = warning; SET search_path = public, pg_catalog; SET default_tablespace = ''; SET default_with_oids = false; -- -- Name: t; Type: TABLE; Schema: public; Owner: postgres; Tablespace: -- CREATE TABLE t ( id numeric, s text ); ALTER TABLE t OWNER TO postgres; -- -- PostgreSQL database dump complete -- Конец демонстрации. ----------------------------------------------------------------------- => \q