zoukankan      html  css  js  c++  java
  • PostgreSQL的目录结构及修改数据目录

    initdb 的时候会指定一个 PGDATA 目录,这就是 PostgresQL 存储数据的地方,比如:/var/lib/pgsql/10/data。
    ======显示数据目录
    1. 进入psql
    sudo -u postgres psql
    2. 找到数据目录
    postgres=# SHOW data_directory;
    data_directory
    ------------------------
    /var/lib/pgsql/10/data
    (1 row)

    ======PGDATA 下面各项存储的内容大概是:
    文件 存储内容
    PG_VERSION     实例的 版本号
    postgresql.conf   主配置文件
    postgresql.auto.conf (新功能,优先级更高)
    pg_hba.conf        认证配置文件
    pg_ident.conf       映射配置文件
    postmaster.opts    /usr/pgsql-10/bin/postgres "-D" "/var/lib/pgsql/10/data/"
    postmaster.pid
    ...

    目录名: 存储内容
    base: 默认表空间目录,建立的表格储存在此目录中.每个 database 会在 base 目录下有一个子目录
    global: 一些共享系统表的目录.Postgres 自己的 meta 数据库存放的地方(全局 DB)
    pg_stat_tmp: 统计信息的存储目录
    pg_tblsp: 存储了指向各个用户自建表空间实际目录的链接方式
    pg_twophase: 使用两阶段提交功能时分布式事务的存储目录
    ==以下目录功能待补充...
    log
    pg_commit_ts
    pg_dynshmem
    pg_logical
    pg_multixact
    pg_notify
    pg_replslot
    pg_serial
    pg_snapshots
    pg_stat
    pg_subtrans
    pg_wal
    pg_xact

    以下目录应该是10.0以前版本的
    pg_clog: commit log的目录
    pg_log:系统日志目录,在查询一些系统错误时就可查看此目录下的日志文件
    pg_xlog:wal(Write Ahead Log 预写式日志)日志的目录

    base 目录是最重要的一个目录,放的是每一个 database 的数据。
    base 目录里的每一个数字目录对于一个 database 的 oid,可以通过 查看 pg_database 这张表查看每一个 数据库的 oid 。
    [root@srv]# ls /var/lib/pgsql/10/data/base
    1 13805 13806
    postgres=# select oid, datname from pg_database ;
    oid | datname
    -------+-----------
    13806 | postgres
    1 | template1
    13805 | template0
    (3 rows)

    每一张表的数据(大部分)又是放在 base/(dboid)/(relfilenode) 这个文件里面:
    postgres=# select relname, relowner, relfilenode from pg_class where relowner = 13805;
    relname | relowner | relfilenode
    ---------+----------+-------------
    (0 rows)

    查询'item'表的数据文件.这里的'item'是table名称.
    lai=# select pg_relation_filepath('item');
    pg_relation_filepath
    ----------------------
    base/16385/24595
    (1 row)

    ======PG安装目录,postgresql默认在/usr/pgsql-10
    子目录有:
    (1)/usr/pgsql-10/bin: 二进制可执行文件目录,此目录下有postgres,psql等可执行程序.
    (2)/usr/pgsql-10/lib: 动态库目录,PG程序运行需要的动态库都在此目录下,如libpg.so.
    (3)/usr/pgsql-10/share: 此目录下存放有文档和配置模板文件,一些扩展包的sql文件,在此目录的子目录extension下.

    -----------
    修改data_directory的所有者,目录权限
    chown -R postgres:postgres /home/pgdata
    chmod 700 /home/pgdata
    --------
    ======修改数据目录
    1. 进入psql
    sudo -u postgres psql
    2. 找到数据目录
    SHOW data_directory;
    3. 关闭数据库
    sudo systemctl stop postgresql
    sudo systemctl status postgresql
    4. 我们将现有的数据库目录复制到新的位置用rsync。
    >> 使用-a标志保留的权限和其他目录属性, 能避免未来的升级权限问题.
    >> 而-v提供详细输出,以便能够按照进度。
    注意:确保没有对目录没有尾随斜线,如果你使用制表符完成可以加入。
    当有一个结尾的斜线, rsync将转储目录复制到安装点,而不是转移成一个包含内容PostgreSQL目录:
    sudo rsync -av /var/lib/postgresql /mnt/newdir
    5. 复制完成后,我们将使用.bak扩展名重命名当前文件夹,并保留该文件,直到我们确认移动已成功。 通过重命名它,我们将避免可能由于新的和旧的位置中的文件引起的混乱:
    sudo mv /var/lib/postgresql/10/data /var/lib/postgresql/10/data.bak
    6. 修改配置文件:postgresql.conf
    data_directory = '/mnt/newdir/postgresql/10/data'
    7. 启动数据库
    sudo systemctl start postgresql
    sudo systemctl status postgresql
    8. 显示数据目录
    sudo -u postgres psql
    SHOW data_directory;
    9. 删除备份
    sudo rm -Rf /var/lib/postgresql/9.5/main.bak
    10.重启
    sudo systemctl restart postgresql
    sudo systemctl status postgresql

    ==================
    移动PostgreSQL的数据目录移到新位置
    https://www.howtoing.com/how-to-move-a-postgresql-data-directory-to-a-new-location-on-ubuntu-16-04

    PG安装目录
    https://blog.csdn.net/liguangxianbin/article/details/79563881
    Postgres 数据表文件存储位置
    https://blog.csdn.net/jameshadoop/article/details/60962451
    http://veryr.com/posts/postgres-storage-location/

  • 相关阅读:
    百度网盘破解
    openstack2 kvm
    Openstack1 云计算与虚拟化概念
    Rsync + Sersync 实现数据增量同步
    Ansible 详解2-Playbook使用
    Ansible 详解
    Python mysql sql基本操作
    COBBLER无人值守安装
    ELK 环境搭建4-Kafka + zookeeper
    此坑待填 离散化思想和凸包 UVA
  • 原文地址:https://www.cnblogs.com/sztom/p/9541272.html
Copyright © 2011-2022 走看看