zoukankan      html  css  js  c++  java
  • postgresql 常规操作以及检查备份

    一、建表时,复制源表的信息
    test=#
    test=# d test.t1
    Table "test.t1"
    Column | Type | Collation | Nullable | Default
    --------+---------+-----------+----------+---------
    col1 | integer | | |
    col2 | integer | | |
    col3 | integer | | |
    Indexes:
    "test_t1_unq" UNIQUE CONSTRAINT, btree (col1)

    test=# create table test.t2 (like test.t1 including all);
    CREATE TABLE

    test=# d test.t2;
    Table "test.t2"
    Column | Type | Collation | Nullable | Default
    --------+---------+-----------+----------+---------
    col1 | integer | | |
    col2 | integer | | |
    col3 | integer | | |
    Indexes:
    "t2_col1_key" UNIQUE CONSTRAINT, btree (col1)


    其中,including选项包括以下:
    including defaults
    including constraints
    including indexes
    including storages
    including commits
    including all

    其中including all 是吧所有属性复制过去。


    二、pgsql修改字段跟oracle以及MySQL不一样;

    test=# d blog
    Table "pgsql.blog"
    Column | Type | Collation | Nullable | Default
    ---------+---------+-----------+----------+---------
    id | integer | | |
    title | text | | |
    content | text | | |

    alter table blog alter column id set not null;

    test=# alter table blog rename column id to blog_id;
    ALTER TABLE
    test=# d blog
    Table "pgsql.blog"
    Column | Type | Collation | Nullable | Default
    ---------+---------+-----------+----------+---------
    blog_id | integer | | not null |
    title | text | | |
    content | text | | |

    三、表继承及分区表
    test=# insert into persons values ('haha',30,'f');
    INSERT 0 1

    create table students ( class_no int) inherits (persons);

    test=# insert into students values ('bb',20,'f',2);
    INSERT 0 1

    test=# select * from persons;
    name | age | sex
    ------+-----+-----
    haha | 30 | f
    bb | 20 | f
    (2 rows)

    test=#
    test=#
    test=#
    test=# select * from only persons;
    name | age | sex
    ------+-----+-----
    haha | 30 | f
    (1 row)

    test=#
    test=#
    test=# select * from students;
    name | age | sex | class_no
    ------+-----+-----+----------
    bb | 20 | f | 2
    (1 row)

    四、查看PGSQL的锁。
    select * from pg_locks;

    查看当前会话的PID;

    select pg_backend_pid();

    查看当前会话:
    select * from pg_stat_activity;
    select pid,usename,client_addr,client_hostname,client_port from pg_stat_activity;


    五、参数修改

    5.1 重新读取配置文件

    pg_ctl reload

    5.2 查看当前实例状态

    pg_ctl status

    5.3 杀进程
    查看当前的进程:也可以通过查看锁
    select pg_backend_pid();
    pg_backend_pid
    ----------------
    1564

    杀进程:
    pg_ctl kill INT 1564

    5.3 需要执行清理过程:

    postgres --single -D /pgsql11data/ postgres --数据库启动到单用户下

    backend> vacuum full ;

    5.4配置参数

    所有的配置项都是大小写不敏感的。

    六、备份
    PG提供物理备份和逻辑备份
    物理备份:WAL热备份
    逻辑备份:pg_dump,pg_dumpall,恢复时pg_restore

    1、备份test 数据库
    pg_dump test >testdb.sql 跟MySQL一样,生成的是sql文件

    比如我把test数据库恢复成testbak数据库
    create database testbak encoding UTF8;
    [pgsql@node2 ~]$ psql testbak < /home/pgsql/test.sql
    SET
    SET
    SET
    SET
    SET
    set_config
    ------------

    (1 row)

    跟mysql 很类似。


    也可以指定格式的备份成*.dmp文件

    [pgsql@node2 ~]$ pg_dump -Fc -Upgsql test > testpgsql.dmp

    恢复

    create database test encoding UTF8;

    [pgsql@node2 ~]$ pg_restore -d test testpgsql.dmp


    2.想备份psql模式下所有表,但是不包括test2
    test=# d+
    List of relations
    Schema | Name | Type | Owner | Size | Description
    --------+--------------+----------+-------+------------+-------------
    pgsql | blog | table | pgsql | 8192 bytes |
    pgsql | persons | table | pgsql | 8192 bytes |
    pgsql | students | table | pgsql | 8192 bytes |
    pgsql | test_view | view | pgsql | 0 bytes |
    pgsql | testtab01 | table | pgsql | 211 MB |
    public | capitals | table | pgsql | 8192 bytes |
    public | cities | table | pgsql | 8192 bytes |
    public | duty | table | pgsql | 16 kB |
    public | example | table | pgsql | 0 bytes |
    public | non_capitals | table | pgsql | 8192 bytes |
    public | products | table | pgsql | 8192 bytes |
    public | t | table | pgsql | 0 bytes |
    public | t1 | table | pgsql | 16 kB |
    public | t2 | table | pgsql | 16 kB |
    public | t_id_seq | sequence | pgsql | 8192 bytes |
    public | test1 | table | pgsql | 20 MB |
    public | test2 | table | pgsql | 8192 bytes |
    public | weather | table | pgsql | 8192 bytes |
    (18 rows)

    [pgsql@node2 ~]$ pg_dump -t 'pgsql.t*' -T psql.t2 test > pgsqltest.sql

    备份所有数据库test 对象,不包括duty
    [pgsql@node2 ~]$ pg_dump -T 'pgsql.duty' test > noduty.sql

    在192.168.211.152 上备份,恢复到 192.168.211.154:
    test=# create database hl;
    CREATE DATABASE

    [pgsql@node2 ~]$ pg_dump -h 192.168.211.152 -Upgsql test -Fc > remote_test.dmp
    [pgsql@node2 ~]$ ls -lh
    total 445M
    -rw------- 1 pgsql pgsql 854 Apr 13 23:52 logfile
    -rw-rw-r-- 1 pgsql pgsql 80M Jun 12 23:16 noduty.sql
    -rw-rw-r-- 1 pgsql pgsql 75M Jun 12 23:14 pgsqltest.sql
    -rw-rw-r-- 1 pgsql pgsql 106M Jun 12 23:26 remote_test.dmp
    -rw-rw-r-- 1 pgsql pgsql 106M Jun 12 23:06 testpgsql.dmp
    -rw-rw-r-- 1 pgsql pgsql 80M Jun 12 22:54 test.sql

    testbak=# create database test;
    CREATE DATABASE
    [pgsql@node2 ~]$ pg_restore -h 192.168.211.152 -Upgsql -C -d test remote_test.dmp
    -c, --clean clean (drop) database objects before recreating
    -C, --create create the target database

    最后,要讲备份的 remote_test.dmp的数据重新加载到一个不是新建的不同名称的数据库 remote中,可以使用下面命令:

    createdb -T template0 remote;
    pg_restore -d remote remote_test.dmp

    从template0而不是template1 创建数据库,确保干净,没有使用-C,而是直接恢复到remote数据库上。

    七、PGSQL 常规操作

    select version(); --查看版本
    select pg_postmaster_start_time(); --查看数据库启动时间
    select pg_conf_load_time(); --查看配置文件的时间
    show timezone; --查看数据库时区
    select user;
    select current_user;
    select session_user;
    select current_catalog,current_database();
    select inet_client_addr(),inet_client_port(); --查看session客户端登录IP,端口
    inet_client_addr | inet_client_port
    ------------------+------------------
    192.168.211.152 | 36891

    select inet_server_addr(),inet_server_port(); --查看数据库服务器登录IP,端口
    inet_server_addr | inet_server_port
    ------------------+------------------
    192.168.211.152 | 5432

    select pg_backend_pid(); 查看当前session的后台服务器进程的PID

    show shared_buffers; --查看共享buffer
    select current_setting('shared_buffers'); --查看当前shared_buffers
    select pg_xlogfile_name(pg_current_xlog_location()); --查看当前正在写的WAL文件

    select pg_is_in_backup(),pg_backup_start_time(); --查看实例是否正在做基础备份
    select pg_is_in_recovery(); --查看实例时hot standby 状态还是正常数据库状态

    select pg_database_size('test'),pg_size_pretty(pg_database_size('test')); --查看test数据库大小(显示会慢)

    select pg_size_pretty(pg_relation_size('test1')); --查看连接数据库test1表的大小(不包括索引)
    select pg_size_pretty(pg_total_relation_size('test1')); --查看连接数据库test1表的大小(包括索引)
    select pg_size_pretty(pg_indexes_size('test1')); --查看表test1上索引的大小

    select pg_size_pretty(pg_tablespace_size('test')); 查看test表空间的使用大小
    select pg_relation_filepath('test1'); --查看test1表空间对应的数据文件

    八、系统维护常用命令
    修改配置文件postgresql.conf后,生效的两种方式:
    1.pg_ctl reload
    2.select pg_reload_conf();
    能生效的不需要重启服务器。
    切换日志文件
    select pg_rotate_logfile();
    切换WAL日志文件
    select pg_switch_xlog(); --貌似有问题 或者checkpoint;

    3.取消正在执行的长时间的SQL方法
    pg_cancel_backend(pid):取消正在执行的SQL
    pg_terminate_backend(pid):终止一个后台服务进程,同时释放此后台服务进程的资源。

    select pid ,datname,usename,query_start,query from pg_stat_activity; --查看运行的SQL
    select pg_cancel_backend(pid); 如果取消不了,用这一句取消:select pg_terminate_backend(28184);

  • 相关阅读:
    Dev 控件笔记1 repositoryItemLookUpEdit 控件
    装饰账务管理
    Tiptop ERP 采购运费一键分摊
    笔记:两数互相交换,不使用第三方变量
    .net core3.0 webapi搭建(一)
    【笔记】冒泡排序
    Mysql 几种常见的插入 Insert into,Replace Into,Insert ignore
    【转】IEnumerable接口的一个简单示例
    [转]从实例谈OOP、工厂模式和重构
    浅谈C#委托的用法-delegate[转]
  • 原文地址:https://www.cnblogs.com/hmwh/p/11087089.html
Copyright © 2011-2022 走看看