暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL学习笔记(9)之逻辑备份还原

北重楼 2021-04-02
887

PostgreSQL对于数据备份,提供了物理备份和逻辑备份2种解决方案

先看逻辑备份

pg_dump(备份) 

把PostgreSQL数据库抽取为一个脚本文件或其他归档文件

常用参数

-F c 

备份为二进制格式,压缩存储.并且可被pg_restore用于精细还原

-F p 

备份为文本,大库不推荐


pg_dump恢复(还原)

方法1:

psql dbname -U username < bakfile

方法2:

pg_restore

– pg_restore [option] ... [filename]

– pg_restore -d dbname bakfile 

二进制格式的备份只能使用pg_restore来还原,可以指定还原的表,编辑TOC文件,定制还原的顺序,表, 索引等。

文本格式的备份还原, 直接使用用户连接到对应的数据库执行备份文本即可,例如psql dbname -f bak.sql


演示

先准备数据

    create database db1;
    \c db1
    CREATE TABLE TAB_TABLEDUMP (ID INT );
    INSERT INTO TAB_TABLEDUMP VALUES (1);
    INSERT INTO TAB_TABLEDUMP VALUES (2);
    INSERT INTO TAB_TABLEDUMP VALUES (3);

    查看数据

    备份数据为sql文件

      #把一个数据库db1转储到一个SQL脚本文件, #简单语法,可结合选项灵活备份
      pg_dump db1 -f db1.sql

      查看备份的脚本文件

        --
        -- PostgreSQL database dump
        --


        -- Dumped from database version 13.0
        -- Dumped by pg_dump version 13.0


        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: tab_tabledump; Type: TABLE; Schema: public; Owner: postgres
        --


        CREATE TABLE public.tab_tabledump (
        id integer
        );




        ALTER TABLE public.tab_tabledump OWNER TO postgres;


        --
        -- Data for Name: tab_tabledump; Type: TABLE DATA; Schema: public; Owner: postgres
        --


        COPY public.tab_tabledump (id) FROM stdin;
        1
        2
        3
        \.


        --
        -- PostgreSQL database dump complete
        --




        还原数据

        将备份的脚本数据还原到数据库db2

          create database db2;
          psql -Upostgres -d db2 -f db1.sql

          其他用法

            备份数据为二进制文件
            pg_dump -Fc db1 -f db1.dump
            还原数据
            pg_restore -d db3 db1.dump
            要转储一个数据库到一个目录格式的归档:
            $ pg_dump -Fd mydb -f dumpdir
            要用 5 个并行的工作者任务转储一个数据库到一个目录格式的归档:
            $ pg_dump -Fd mydb -j 5 -f dumpdir
            把一个归档文件重新装载到同一个数据库(该归档正是从这个数据库中转储得来)中,丢掉
            那个数据库中的当前内容:
            $ pg_restore -d postgres --clean --create db.dump
            要转储一个名为mytab的表:
            $ pg_dump -t mytab mydb > db.sql
            要转储detroit模式中名称以emp开始的所有表,排除名为employee_log的表:
            $ pg_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql
            要转储名称以east或者west开始并且以gsm结束的所有模式,排除名称包含词test的任何模
            式:
            $ pg_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql
            同样,用正则表达式记号法来合并开关:
            $ pg_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql
            要转储除了名称以ts_开头的表之外的所有数据库对象:
            1752
            pg_dump
            $ pg_dump -T 'ts_*' mydb > db.sql
            要在-t和相关开关中指定一个大写形式或混合大小写形式的名称,你需要双引用该名称,否
            则它会被折叠到小写形式(见模式(Pattern))。但是双引号对于 shell 是特殊的,所以
            反过来它们必须被引用。因此,要转储一个有混合大小写名称的表,你需要类似这样的东
            西:
            $ pg_dump -t "\"MixedCaseName\"" mydb > mytab.sql

            生产环境通常会采取自动定时备份的方式去进行数据备份


            文章转载自北重楼,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论