CentOS 编译安装 PostgreSQL (实测 笔记 Centos 7.6 + postgresql 11.3)

1. 更新安装 openssl (依赖zlib库)

cd /usr/local/src/
wget http://zlib.net/zlib-1.2.11.tar.gz
tar zvxf zlib-1.2.11.tar.gz && cd zlib-1.2.11
./configure && make && make install

cd /usr/local/src/
wget https://www.openssl.org/source/openssl-1.1.1d.tar.gz
tar zvxf openssl-1.1.1d.tar.gz && cd openssl-1.1.1d
./config shared zlib --prefix=/usr && make && make install


2. 安装依赖包

yum install bison flex -y

yum install readline-devel zlib-devel openssl-devel systemd-devel libxml2-devel libxslt-devel libicu-devel pam-devel openldap-devel -y

******************************************************************************************************

 

yum install perl-ExtUtils-Embed tcl-devel python-devel clang -y

yum install epel-release -y

yum install llvm5.0 llvm5.0-devel -y

******************************************************************************************************
3. 创建用户及组
groupadd postgres
useradd -g postgres postgres
passwd postgres

4.创建目录

mkdir -p /data/pg/pgdata/pgsql  /data/pg/pgdata/pgtbs  /data/pg/archivelog mkdir -p /data/pg/backups 
chmod -R 700 /data/pg 
chown -R postgres:postgres /data/pg

5. 编译安装
wget https://ftp.postgresql.org/pub/source/v12.0/postgresql-12.0.tar.gz
tar -zxvf postgresql-12.0.tar.gz && cd postgresql-12.0
mkdir -p build_dir && cd build_dir

**************************************************************************************************************

如果提示有错,可修改编译文件
vim ../src/Makefile.global.in

修改以下行:

COMPILE.c.bc = $(CLANG) -Wno-ignored-attributes $(BITCODE_CFLAGS) $(CPPFLAGS) -flto=thin -emit-llvm -c

修改为:

COMPILE.c.bc = $(CLANG) -Wno-ignored-attributes $(BITCODE_CFLAGS) $(CPPFLAGS) -emit-llvm -c

**************************************************************************************************************

../configure \
--prefix=/opt/pgsql \
--enable-thread-safety \
--enable-nls \
--with-systemd \
--with-openssl \
--with-libxml \
--with-libxslt \
--with-gssapi \
--with-pam \
--with-icu \

make world && make install -world

***************************************************************************************************
./configure编译参数详解:
--prefix 指定安装目录。
--bindir 指定可执行程序的目录
--sysconfdir 默认设置各种配置文件的目录。
--libdir 设置安装库和动态可加载模块的位置。
--includedir 设置安装C和C ++头文件的目录
--datarootdir 设置各种类型的只读数据文件的根目录。share目录。
--datadir 设置已安装程序使用的只读数据文件的目录。默认值为DATAROOTDIR。
--localedir 设置用于安装区域设置数据的目录。默认值为DATAROOTDIR/locale。
--mandir PostgreSQL附带的手册页将安装在这个目录下. man目录。
--docdir 设置安装文档文件的根目录。
--htmldir PostgreSQL的HTML格式文档将安装在此目录下。默认值为DATAROOTDIR。

--with-extra-version = STRING 将STRING附加到PostgreSQL版本号
--with-libraries 用于搜索库。
--enable-nls 启用本机语言支持(NLS),即以英语以外的语言显示程序消息的功能。
--with-pgport 设置为服务器和客户端的默认端口号。默认值为5432。
--with-perl 支持perl语言。
--with-python 支持python语言。
--with-TCL 支持PL/Tcl语言。
--with-tclconfig 包含构建与Tcl接口的模块所需的配置信息。
--with-GSSAPI 构建支持GSSAPI身份验证。
--with-openssl 构建支持SSL(加密)连接
--with-pam 使用PAM(可插入身份验证模块)支持构建.
--with-ldap 使用LDAP支持构建身份验证和连接参数查找.
--without-readline 禁用psql中的命令行编辑和历史记录 .
--with-libedit-preferred 有利于使用BSD许可的libedit库.默认使用Readline。
--with-bonjour 使用Bonjour支持构建
--with-uuid=LIBRARY 使用指定的UUID库构建uuid-ossp模块.
--with-libxml 使用libxml构建(启用SQL/XML支持).
--with-libxslt 在构建xml2 模块时使用libxslt 。xml2依赖于此库来执行XML的XSL转换。
--disable-integer-datetimes 禁用对时间戳和间隔的64位整数存储的支持,并将日期时间值存储为浮点数。

--disable-float4-byval 禁用“按值”传递float4值,导致它们“通过引用”传递。此选项会降低性能.
--disable-float8-byval 禁用“按值”传递float8值,导致它们“通过引用”传递。此选项会降低性能.

--with-segsize=SEGSIZE 设置段大小,以千兆字节为单位。大表分为多个操作系统文件,每个文件的大小等于段大小

--with-blocksize=BLOCKSIZE 设置块大小,以千字节为单位。这是表中的存储单元和I / O. 默认值为8千字节

--with-wal-segsize=SEGSIZE 设置WAL段大小,以兆字节为单位。这是WAL日志中每个文件的大小。调整此大小以控制WAL日志传送的粒度可能很有用。默认大小为16兆字节。该值必须是1到64(兆字节)之间的2的幂.

--with-wal-blocksize=BLOCKSIZE 设置WAL块大小,以千字节为单位。这是WAL日志中的存储和I / O单位。默认值为8千字节.该值必须是1到64(兆字节)之间的2的幂.

--disable-spinlocks 禁用环形锁。
--disable-thread-safety 禁用线程安全,禁用客户端库的线程安全性。

--with-system-tzdata=DIRECTORY PostgreSQL包含自己的时区数据库,它需要日期和时间操作.默认与linux时区兼容。

--without-zlib 防止使用Zlib 库。

--enable-debug 使用调试符号编译所有程序和库。

--enable-depend 启用自动依赖关系跟踪。
--enable-dtrace 编译PostgreSQL,支持动态跟踪工具DTrace。
--enable-tap-tests 使用Perl TAP工具启用测试。

***************************************************************************************************

6 .配置服务,设置启动配置

vim /usr/lib/systemd/system/postgresql.service

添加内容:

[Unit]
Description=PostgreSQL database server
After=syslog.target
After=network.target

[Service]
Type=notify
User=postgres
Group=postgres
Environment=PGDATA=/data/pg/pgdata/pgsql/
OOMScoreAdjust=-1000
Environment=PG_OOM_ADJUST_FILE=/proc/self/oom_score_adj
Environment=PG_OOM_ADJUST_VALUE=0
ExecStart=/opt/pgsql/bin/postmaster -D ${PGDATA}
ExecReload=/bin/kill -HUP $MAINPID
KillMode=mixed
KillSignal=SIGINT
TimeoutSec=0

[Install]
WantedBy=multi-user.target


7. 设置环境变量
vim /home/postgres/.bash_profile

添加内容:

export PGPORT=8432
export PGHOME=/opt/pgsql
export PGDATA=/data/pg/pgdata/pgsql
export PATH=$PGHOME/bin:$PATH
export MANPATH=$PGHOME/share/man:$MANPATH
export LANG=en_US.UTF-8
export DATE='date +"%Y%m%d%H%M"'
export LD_LIBRARY_PATH=$PGHOME/lib:$LD_LIBRARY_PATH
export PGHOST=$PGDATA
export PGUSER=postgres
export PGDATABASE=postgres

 

保存

source ~/.bash_profile


8. 初始化数据库
su - postgres

initdb -D $PGDATA -U postgres --locale=en_US.UTF8 -E UTF8

#切换回root用户

exit


9. 修改数据库参数

vim /data/pg/pgdata/pgsql/postgresql.conf

修改内容:

listen_addresses = '*'
unix_socket_directories = '.'
port = 8432

保存

vim /data/pg/pgdata/pgsql/pg_hba.conf

添加内容:

host all all 0.0.0.0/0 md5 # 其他用户登陆

保存
***************************************************************************************
TYPE:pg的连接方式,local:本地unix套接字,host:tcp/ip连接

DATABASE:指定数据库

USER:指定数据库用户

ADDRESS:ip地址,可以定义某台主机或某个网段。
(32代表检查整个ip地址,相当于固定的ip,24代表只检查前三位,最后一位是0~255之间的任何一个)

METHOD:认证方式,常用的有ident,md5,password,trust,reject。

md5是常用的密码认证方式。

password是以明文密码传送给数据库,建议不要在生产环境中使用。

trust是只要知道数据库用户名就能登录,建议不要在生产环境中使用。

reject是拒绝认证。
*************************************************************************************

10. 设置开机自启动

systemctl enable postgresql.service

systemctl start postgresql.service

11. 设置防火墙规则

firewall-cmd --zone=public --add-port=8432/tcp --permanent

firewall-cmd --reload && iptables -L --line-numbers|grep ACCEPT

12. 设置postgres密码

su - postgres

psql

postgres=# ALTER USER postgres WITH encrypted PASSWORD 'postgres';

postgres=# \q

exit

 

13. 重启系统

shutdown -r now

 14. 测试连接

连接数据库可以使用如下命令
cd /opt/pgsql/bin
./psql -h 192.168.1.116 -p 8432 -U postgres 

输入密码后登录

postgres=# \copyright

postgres=# \encoding 

postgres=# \l


************************************************************
postgresql 常用命令

PostgreSQL对表名、字段名都是区分大小写的
PostgreSQL在SQL语句中对大小写是不敏感的


连接数据库, 默认的用户和数据库是postgres
psql -U user -d dbname

\q 退出 psql
\c dbname 切换数据库,相当于mysql的use dbname
\l 列举数据库,相当于mysql的show databases
\dt 列举表,相当于mysql的show tables
\d tblname 查看表结构,相当于desc tblname,show columns from tbname
\di 查看索引
\copyright 显示 PostgreSQL 的使用和发行条款
\encoding [字元编码名称] 显示或设定用户端字元编码
\h [名称] SQL 命令语法上的说明,用 * 显示全部命令
\prompt [文本] 名称 提示用户设定内部变数
\password [USERNAME] securely change the password for a user

 

 

导出数据库

/opt/pgsql/bin/pg_dump -h 172.16.15.187 -p 24567 -U postgres test_db > /root/test_db.sql

导入数据库
/opt/pgsql/bin/psql -h 172.16.193.172 -p 24567 -U postgres -d test_db </root/cfmall_db.sql

 

 

创建数据库:
create database [数据库名];

删除数据库:
drop database [数据库名];

*重命名一个表:
alter table [表名A] rename to [表名B];

*删除一个表:
drop table [表名];

*在已有的表里添加字段:
alter table [表名] add column [字段名] [类型];

删除表中的字段:
alter table [表名] drop column [字段名];

修改数据库列属性
alter table 表名 alter 列名 type 类型名(350)

重命名一个字段:
alter table [表名] rename column [字段名A] to [字段名B];

*给一个字段设置缺省值:
alter table [表名] alter column [字段名] set default [新的默认值];

*去除缺省值:
alter table [表名] alter column [字段名] drop default;

在表中插入数据:
insert into 表名 ([字段名m],[字段名n],......) values ([列m的值],[列n的值],......);

修改表中的某行某列的数据:
update [表名] set [目标字段名]=[目标值] where [该行特征];

删除表中某行数据:
delete from [表名] where [该行特征];
delete from [表名];--删空整个表

创建表:
create table ([字段名1] [类型1] ;,[字段名2] [类型2],......<,primary key (字段名m,字段名n,...)>;);

 

*****************************************************************************

 

https://blog.csdn.net/germany15914326114/article/details/81196778
https://www.cnblogs.com/yhq1314/p/10119556.html
https://www.cnblogs.com/huangcun200816/articles/6767070.html

1.完成单机安装

192.168.0.80 主
192.168.0.81 从 192.168.0.82 从


修改内核参数
vim /etc/sysctl.conf

#Kernel paramaters required by PostgreSql
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144

sysctl -p

vim /etc/security/limits.conf

postgres soft nproc 16384
postgres hard nproc 16384
postgres soft nofile 65536
postgres hard nofile 65536


2.主库设置

ps -ef|grep postgres
postgres 3668 1 0 20:25 ? 00:00:00 /opt/pgsql/bin/postmaster -D /data/pgdata/pgsql/
postgres 3697 3668 0 20:25 ? 00:00:00 postgres: checkpointer
postgres 3698 3668 0 20:25 ? 00:00:00 postgres: background writer
postgres 3699 3668 0 20:25 ? 00:00:00 postgres: walwriter
postgres 3700 3668 0 20:25 ? 00:00:00 postgres: autovacuum launcher
postgres 3702 3668 0 20:25 ? 00:00:00 postgres: archiver last was 000000010000000000000004
postgres 3703 3668 0 20:25 ? 00:00:00 postgres: stats collector
postgres 3705 3668 0 20:25 ? 00:00:00 postgres: logical replication launcher
postgres 3930 3668 0 20:25 ? 00:00:00 postgres: walsender repuser 192.168.0.81(56122) streaming 0/5005CF8
root 3969 3949 0 20:31 pts/0 00:00:00 grep --color=auto postgres

 

/data/pg/pgdata/pgsql
cp postgresql.conf postgresql.conf.bk
chown postgres:postgres postgresql.conf.bk

vim postgresql.conf

listen_addresses = '*'
max_connections = 1000 #从库的max_connections必须要大于主库的
wal_level = hot_standby # 热备模式,主为wal的主机
synchronous_commit = on #实时同步复制.异步改为off
checkpoint_timeout = 5min
archive_mode = on #允许归档
archive_command = '/bin/date'
max_wal_senders = 2 #流复制连接,一般与从库个数一致
wal_keep_segments = 16 #设置流复制保留的最多的xlog数目
hot_standby = on
max_standby_archive_delay = 300s
max_standby_streaming_delay = 30s
wal_sender_timeout = 60s # 设置流复制主机发送数据的超时时间
wal_receiver_timeout = 60s
wal_receiver_status_interval = 1s
hot_standby_feedback = on


vim pg_hba.conf
host replication repuser 192.168.0.80/32 md5


su - postgres
psql
create role repuser login replication encrypted password '123456';

/opt/pgsql/bin/pg_ctl stop
/opt/pgsql/bin/pg_ctl start


3.从库设置
cd /data/pgdata/pgsql
rm -rf ./*
/opt/pgsql/bin/pg_basebackup -D /data/pg/pgdata/pgsql -F p -X stream -R -v -P -h 192.168.0.80 -p 8432 -U repuser

事务日志起始于时间点: 0/9000028, 基于时间表1
pg_basebackup: 启动后台 WAL 接收进程
73859/73859 kB (100%), 2/2 表空间
transaction log end point: 0/90000F8
pg_basebackup: 等待后台进程结束流操作...
pg_basebackup: base backup completed

vim postgresql.conf

#wal_level,
#max_wal_senders
#wal_keep_segments等参数

hot_standby = on #机器为从库,在备份的同时允许查询
max_standby_streaming_delay = 30s #可选,流复制最大延迟
wal_receiver_status_interval = 10s #可选,从向主报告状态的最大间隔时间
hot_standby_feedback = on #可选,查询冲突时向主反馈
max_connections = 1000 #默认参数,非主从配置相关参数,表示到数据库的连接数,一般从库做主要的读服务时,设置值需要高于主库

 

chown -R postgres:postgres /data/pg/pgdata/pgsql


vim recovery.conf

备库的 recovery.conf 配置以下参数

recovery_target_timeline = 'latest'
standby_mode = on
primary_conninfo = 'host=192.168.0.80 port=8432 user=repuser sslmode=prefer sslcompression=0 krbsrvname=postgres target_session_attrs=any''

建议把密码设置在 ~/.pgpass中:也可直接设置 primary_conninfo = ‘host=192.168.0.80 port=8432 user=repuser password=abc123', 但这样会有安全风险

su - postgres
$ cd ~
$ touch .pgpass
$ chmod 0600 .pgpass
$ ll -a
$ vim .pgpass

填写以下内容:

192.168.0.80:8432:replication:repuser:abc123

*****************************************************************************************************************************

standby_mode = on # 这个说明这台机器为从库
recovery_target_timeline = 'latest' #同步到最新数据

#trigger_file = '/postgres/data/trigger_activestandby' 
#指定触发文件,文件存在时将触发从库提升为主库,前提是必须设置”standby_mode = on”;如果不设置此参数,也可采用”pg_ctl promote“触发从库切换成主库

***************************************************************************************

su - postgres

/opt/pgsql/bin/pg_ctl stop
/opt/pgsql/bin/pg_ctl start


4.检查
主库
ps -ef|grep postgres

包含以下内容
postgres 4087 26671 0 09:44 ? 00:00:00 postgres: wal sender process repuser 192.168.19.227(55336) streaming 0/D000140

select sync_state from pg_stat_replication;
async

select pg_is_in_recovery();


cd /opt/pgsql/bin/
./pg_controldata /data/pg/pgdata/pgsql/

从库
ps -ef|grep postgres

包含以下内容
postgres 32565 32563 0 09:44 ? 00:00:00 postgres: startup process recovering 00000001000000000000000D

cd /opt/pgsql/bin/
./pg_controldata /data/pg/pgdata/pgsql/

 


5.主从切换

主库:
su - postgres
cd /opt/pgsql/bin/
pg_ctl stop
pg_controldata /data/pg/pgdata/pgsql/

 

从库:
su - postgres
cd /opt/pgsql/bin/
pg_ctl promote
pg_controldata /data/pg/pgdata/pgsql/

从库的文件 变成recovery.conf
-rw-r--r-- 1 postgres postgres 195 12月 14 09:41 recovery.done


主库:
vim recovery.conf
standby_mode = 'on'
primary_conninfo = 'user=repuser password=123456 host=192.168.0.81 port=8432 sslmode=prefer sslcompression=1 krbsrvname=postgres'
recovery_target_timeline = 'latest'


vim postgresql.conf

#max_wal_senders
#wal_keep_segments

su - postgres
/opt/pgsql/bin/pg_ctl start

 

从库:
/opt/pgsql/bin/pg_controldata /data/pg/pgdata/pgsql/

vim pg_hba.conf
host replication repuser 192.168.0.80/32 md5

su - postgres
/opt/pgsql/bin/pg_ctl reload

主从切换完成

 


6、逻辑备份及恢复

全库

pg_dumpall -h 192.168.159.145 -U postgres -p 5432 >"/backup/full_2018072505.dmp"

单库

/data/pg/bin/pg_dump -h 192.168.159.145 -U test  testdb > /backup/test.bak

 

恢复

 

psql < /backup/full_2018072505.dmp


psql < /backup/test.bak


7.生产库优化参数配置

listen_addresses = '*' # what IP address(es) to listen on;
max_connections = 950 # (change requires restart)
tcp_keepalives_idle = 3600 # TCP_KEEPIDLE, in seconds; 远程连接超时
tcp_keepalives_interval = 10 # TCP_KEEPINTVL, in seconds; 10秒内无响应则超时
tcp_keepalives_count = 10 # TCP_KEEPCNT;发送10个数据包
shared_buffers = 4GB # min 128kB
dynamic_shared_memory_type = posix # the default is the first option
wal_level = hot_standby # minimal, replica, or logical
fsync = on # flush data to disk for crash safety
wal_buffers = 16MB # min 32kB, -1 sets based on shared_buffers
max_wal_size = 2GB
min_wal_size = 1GB
checkpoint_completion_target = 0.7 # checkpoint target duration, 0.0 - 1.0
archive_mode = on # enables archiving; off, on, or always
archive_command = 'cp %p /data/pg/archivedir/%f' # command to use to archive a logfile segment
max_wal_senders = 10 # max number of walsender processes
wal_keep_segments = 10240 # in logfile segments, 16MB each; 0 disables
wal_sender_timeout = 60s # in milliseconds; 0 disables
hot_standby = on # "off" disallows queries during recovery
max_standby_streaming_delay = 30s # max delay before canceling queries
wal_receiver_status_interval = 10s # send replies at least this often
hot_standby_feedback = on # send info from standby to prevent
effective_cache_size = 8GB
log_timezone = 'PRC'
statement_timeout = 7200000 #设置单条SQL的执行超时,防雪崩,单位毫秒ms
datestyle = 'iso, ymd'
timezone = 'PRC' #时区PRC=Asia/Shanghai
lc_messages = 'zh_CN.utf8' # locale for system error message
lc_monetary = 'zh_CN.utf8' # locale for monetary formatting
lc_numeric = 'zh_CN.utf8' # locale for number formatting
lc_time = 'zh_CN.utf8' # locale for time formatting
default_text_search_config = 'pg_catalog.simple'


8.编译相关参数参考

configure 編译选项:
--prefix=PREFIX 指定安装目录,默认为 /usr/local/pgsql
--bindir= 可执行文件目录,默认 /PREFIX/bin
--sysconfdir= 配置文件目录,默认 /PREFIX/etc
--libdir= 库文件目录,默认 /PREFIX/lib
--includedir= 头文件目录,默认 /PREFIX/include
--datarootdir=DATAROOTDIR 设置只读共享文件目录,默认为 /PREFIX/share
--mandir= man手册目录,默认 /DATAROOTDIR/man
--with-extra-version=STRING 在版本号后面追加 STRING 字符串,用作自定义版本标识
--with-pgport=NUMBER 指定服务器端与客户端的默认端口号,缺省为 5432
--with-openssl 編译 ssl 支持,需要事先安装 OpenSSL 包
--with-pam 編译 PAM 支持
--with-ldap 編译 LDAP 支持,需要事先安装 OpenLDAP 包
--with-segsize= 设定 segment size ,以 gigabytes(GB) 为单位,默认为 1GB ,大型的表会按 segsize 被分割成多个文件
--with-blocksize= 指定块大小,是表内存储和 I/O 的基本单位,默认 8Kbytes ,通常无需变更,取值范围 1-32KB
--with-wal-segsize= 设置 WAL(Write-Ahead Logging) 的 segment size ,以 megabytes(MB) 为单位,默认 16MB ,取值范围 1-64MB
--with-wal-blocksize= 指定 WAL 的块大小,这是 WAL 預写式日志存储和 I/O 的基本单位,以 Kbytes 为单位,默认 8KB ,取值范围 1-64KB
--enable-debug (Compiles all programs and libraries with debugging symbols. This means that you can run the programs in a debugger to analyze problems),使用 GCC 編译器时可用于生产环境,其它編译器会影响性能;多用于开发
--enable-profiling GCC編译器下,所有程序和库将被編译成可进行性能分析,后端退出时生成的 gmon.out 用于性能分析;多用于开发
--enable-coverage 代码覆盖率测试,仅用于开发
--enable-cassert 开启服务器的 assertion(断言) 检查,仅用于开发
--enable-depend (Enables automatic dependency tracking. With this option, the makefiles are set up so that all affected object files will be rebuilt when any header file is changed),仅用于开发
--enable-dtrace 編译动态追踪工具 Dtrace 支持,当前尚不能用于 Linux 平台,可用于 FreeBSD、Solaris
--with-systemd 开启 systemd 支持,需9.6及以上版本

9.基本命令
\d 数据库 —— 得到所有表的名字
\d 表名 —— 得到表结构

查看字符集
show server_encoding;

修改表结构
ALTER TABLE your_table_name alter COLUMN your_column_name type character varying(3000);

得到当前db中所有表的信息(这里pg_tables是系统视图)
select * from pg_tables


查用户拥有的权限
select * from information_schema.table_privileges

select tablename from pg_tables where schemaname='public'
得到所有用户自定义表的名字(这里"tablename"字段是表的名字,"schemaname"是schema的名字。用户自定义的表,如果未经特殊处理,默认都是放在名为public的schema下)

select pg_size_pretty(pg_relation_size('t_inventory_product')); // 查看空间大小

select A.relname,B.reltuples from pg_stat_user_tables A,pg_class B where A.relname=B.relname order by B.reltuples DESC-- 查询用户所建的表及其表中记录数(非精确值,取决于vacuum的频率,但用于分析足够精度了)


SQL方式查看表结构
SELECT a.attnum,
a.attname AS field,
t.typname AS type,
a.attlen AS length,
a.atttypmod AS lengthvar,
a.attnotnull AS notnull,
b.description AS comment
FROM pg_class c,
pg_attribute a
LEFT OUTER JOIN pg_description b ON a.attrelid=b.objoid AND a.attnum = b.objsubid,
pg_type t
WHERE c.relname = 'udoc_saldiscount'
and a.attnum > 0
and a.attrelid = c.oid
and a.atttypid = t.oid
ORDER BY a.attnum;

网络登陆方式:
psql -h 192.168.159.128 -U dbuser -p password -d exampledb -p 5432
本地登陆
psql -d exampledb

创建数据库用户:
CREATE USER dbuser WITH PASSWORD 'password';

创建数据库
CREATE DATABASE exampledb OWNER dbuser;

赋予权限
GRANT ALL PRIVILEGES ON DATABASE exampledb TO dbuser;


建库参考:
mkdir /data/pg/mmmm_tbs/
CREATE ROLE mmmm LOGIN PASSWORD '123456';
create tablespace data_mmmmowner mmmm location '/data/pg/mmmm_tbs/';
create database mmmmdb with owner=mmmm template=template0 encoding='UTF8' lc_collate='zh_CN.UTF8' lc_ctype='zh_CN.UTF8' tablespace=data_mmmm;

 

*************************************************
在安装完POSTGRESQL后,数据库运行一段时间,发现/data/pg/data/目录下的 gprof目录中,有非常多的目录及文件,且占用空间越来越大

经查这是因为在./configure的时候,直接按照网上的大坑增加了参数--enable-profiling,简直了!!!上官网查这个参数是干嘛用的,原来这个参数是用来给PG开发人员作为性能分析的,根本不是给用户使用的。

--enable-profiling GCC編译器下,所有程序和库将被編译成可进行性能分析,后端退出时生成的 gmon.out 用于性能分析;多用于开发


*************************************************

 

安装psql调试器

cd /opt/pgsql/share

mkdir contrib && cd contrib

yum install git -y

git clone git://git.postgresql.org/git/pldebugger.git

cd pldebugger

export PATH=/opt/pgsql/bin/:$PATH

USE_PGXS=1 make clean

USE_PGXS=1 make

USE_PGXS=1 make install


cd /data/pg/pgdata/pgsql/

vim postgresql.conf

shared_preload_libraries = '$libdir/plugin_debugger'


systemctl restart postgresql


cd /opt/pgsql/bin

./psql -h 192.168.1.116 -p 8432 -U postgres -d postgres

postgres=#create extension pldbgapi ;

postgres=#\q

 

 

自动备份脚本

#
#! /bin/bash
#

# Database info
DB_USER="postgres"
DB_HOST="127.0.0.1"
DB_NAME="xl_db"
DB_PORT=28221

# Backup vars
BIN_DIR="/opt/pgsql/bin"
BAK_DIR="/data/bak"
NOW_TIME="`date +%Y%m%d_%H%M%S`"

# Remove vars
CLEAN_TIME=`date +%Y%m%d -d "7 day ago"`
GREP_DIR='xl_db.sql.gz.'

# Backup db
$BIN_DIR/pg_dump -h$DB_HOST -p$DB_PORT -U$DB_USER $DB_NAME | gzip > $BAK_DIR/${DB_NAME}.sql.${NOW_TIME}.gz

# Remove expire files
for TARGET_DIR in `ls $BAK_DIR|grep $GREP_DIR`; do
DIR_DATETIME=${TARGET_DIR##*.}
DIR_DATE=${DIR_DATETIME:0:8}
if [ "${DIR_DATE}" \< "${CLEAN_TIME}" ]; then
rm -rf $BAK_DIR/$TARGET_DIR > /dev/null
echo "Match and remove $BAK_DIR/$TARGET_DIR"
#else
#echo "Not match $BAK_DIR/$TARGET_DIR"
fi
done

 

posted @ 2019-07-21 20:16  vicowong  阅读(1198)  评论(0编辑  收藏  举报