Postgres pg_dump --section = pre-data включает ограничения CHECK, хотя в документации сказано иное? - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь использовать pg_dump --section=pre-data для подавления ограничений CHECK в выводе pg_dump, но я обнаружил, что он все равно включает ограничения CHECK. Вот шаги, которые я выполнил сначала в psql:

CREATE DATABASE test_pre_data_check_db;
\connect test_pre_data_check_db
CREATE TABLE the_table (the_column INT CONSTRAINT the_check CHECK (the_column > 0));

А затем в оболочке:

$ pg_dump --section=pre-data -d test_pre_data_check_db
--
-- PostgreSQL database dump
--

-- Dumped from database version 12.1
-- Dumped by pg_dump version 12.1

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

SET default_tablespace = '';

SET default_table_access_method = heap;

--
-- Name: the_table; Type: TABLE; Schema: public; Owner: acolombi
--

CREATE TABLE public.the_table (
    the_column integer,
    CONSTRAINT the_check CHECK ((the_column > 0))
);


ALTER TABLE public.the_table OWNER TO acolombi;

--
-- PostgreSQL database dump complete
--

Это ошибка в pg_dump или я делаю это неправильно?

Соответствующая документация из Postgres:

- section = sectionname

Выгрузить только указанный раздел. Имя раздела может быть до данных, данных или пост-данных. Этот параметр можно указать несколько раз, чтобы выбрать несколько разделов. По умолчанию выгружаются все разделы.

Раздел данных содержит фактические данные таблицы, содержимое больших объектов и значения последовательности. Элементы пост-данных включают определения индексов, триггеров, правил и ограничений, отличных от проверенных ограничений. Элементы предварительных данных включают все другие элементы определения данных.

https://www.postgresql.org/docs/current/app-pgdump.html

1 Ответ

1 голос
/ 14 июля 2020

Ваша цитата содержит ответ:

--section=sectionname

Раздел данных содержит фактические данные таблицы, содержимое больших объектов и значения последовательности. Элементы пост-данных включают определения индексов, триггеров, правил и ограничений, кроме проверенных ограничений. Элементы предварительных данных включают в себя все другие элементы определения данных.

Это означает, что проверенные ограничения проверки находятся в разделе предварительных данных, что вы и наблюдаете.

Это имеет смысл: большинство ограничений находятся в разделе пост-данных, потому что они либо быстрее создаются после загрузки данных (первичные ключи), либо во избежание нарушений ограничений во время загрузки раздела данных (внешние ключи). Проверочные ограничения не попадают ни в одну из категорий, так как они могут зависеть только от самой строки таблицы.

...