Postgres 数据库 pg_dump - 转储文件详细解释

汤姆

我用 pg_dump 创建了一个 postgres 数据库转储。我现在想知道为什么备份文件如此冗长。

a) 此配置的目的是什么:

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;

b) 为什么创建表如此冗长:

CREATE TABLE public.tag (
    id integer NOT NULL,
    name character varying(100) NOT NULL,
    description text
);

ALTER TABLE public.tag OWNER TO postgres;

CREATE SEQUENCE public.tag_id_seq
    AS integer
    START WITH 1
    INCREMENT BY 1
    NO MINVALUE
    NO MAXVALUE
    CACHE 1;

ALTER TABLE public.tag_id_seq OWNER TO postgres;
ALTER SEQUENCE public.tag_id_seq OWNED BY public.tag.id;
ALTER TABLE ONLY public.tag ALTER COLUMN id SET DEFAULT nextval('public.tag_id_seq'::regclass);

为什么不像我之前创建的那样:

CREATE TABLE tag (
  id SERIAL PRIMARY KEY, 
  name VARCHAR(100) NOT NULL,
  description TEXT
);

c) 为什么COPY ... FROM stdin;使用而不是INSERT INTO ... VALUES

COPY public.tag (id, name, description) FROM stdin;
1   vegetarian  No animals.
2   vegan   No animal products.
3   vegetable   
\.

SELECT pg_catalog.setval('public.tag_id_seq', 3, true);

ALTER TABLE ONLY public.tag
    ADD CONSTRAINT tag_pkey PRIMARY KEY (id);
阿德里安·克拉弗

我建议在这里花一些时间pg_dump与此同时:

a) 将数据库环境设置为与您从中转储的数据库兼容。也是一项安全功能,SELECT pg_catalog.set_config('search_path', '', false);请参阅此处的CVE-2018-1058了解更多信息。

b) 这是因为转储具有三部分“前数据、数据、后数据”。有关完整说明,请参阅上面的链接。默认情况下,它将转储所有三个,但将部分分开。它还允许触发器之类的东西在单独和稍后恢复时效果最佳,因此它们在输入数据时不会运行。

c)COPY比 快几个数量级INSERTS您可以指定 using INSERTS,但我建议您不要,除非您将数据移动到另一个无法识别的SQL 数据库COPY

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Postgres pg_dump每次都以不同的顺序转储数据库

如何将pg_dump文件还原到Postgres数据库

如何pg_dump RDS Postgres数据库?

Postgres pg_dump对生产数据库的影响

使用pg_dump转储数据库,忽略我们无权访问的表

PostgreSQL:在 Windows 上导入/恢复数据库转储(pg_dump 版本 9.6.5)

当端口5432被阻止时,来自远程服务器的pg_dump postgres数据库

Postgres pg_dump错误

恢复Postgres数据库转储

Postgresql-11:使用 pg_dump 为选择模式转储对象定义和数据

在不使用pg_dump的情况下将postgres数据库传输到另一台服务器

pg_dump与数据库的连接失败

Postgres,pg_dump版本不匹配

pg_dump,转储选项“ pre-data”,“ pre_data”中包含哪些“数据定义项”?

将postgres数据库转储导入本地应用

将数据库转储加载到postgres数据库中

pg_dump突然不转储所有表

pg_dump以约束的形式转储表模式

在没有 pg dump 的情况下恢复 Postgres 数据库?

Postgres pg_dump到Azure Blob存储

Postgres pg_dump缓存查找索引失败

使用postgres pg_dump命令时包含@的转义密码

来自Azure托管的Postgres服务器的pg_dump

Windows 上的 pg_dump 在转储文件中放置了无关的字符?

从postgres数据库制作JSON文件

无法使用pg_dump PostgreSQL备份Hypertable TimescaleDB数据库

pg_dump关于数据库抛出错误“共享内存不足”

pg_dump 一个没有 root 用户的数据库

如何仅在 heroku 上使用 postgres 转储恢复我的数据库数据