背景
万事开头难,搭建好一套学习、开发PostgreSQL的环境,是重中之重。
因为其他平台(Ubuntu, CentOS, MAC)的用户大多数都具备了自行安装数据库的能力,在这里我只写一个面向Windows用户的学习环境搭建文档。
分为三个部分,用户可以自由选择。
如果你想深入的学习PostgreSQL,建议搭建PostgreSQL on Linux的环境。如果你只是想将数据库使用在日常的应用开发工作中,有也不需要PG的其他附加插件的功能,那么你可以选择PostgreSQL on Win的环境搭建。
如果你不想搭建本地的PostgreSQL,那么你可以使用云数据库服务,比如阿里云RDS for PostgreSQL。
本章大纲一、PostgreSQL on Win环境搭建1 环境要求2 下载PostgreSQL安装包3 解压PostgreSQL安装包4 下载pgadmin安装包(可选)5 安装pgadmin(可选)6 规划数据文件目录7 初始化数据库集群8 配置postgresql.conf9 配置pg_hba.conf(可选)10 启动、停止数据库集群11 如何自动启动数据库集群12 使用psql 命令行连接数据库13 新增用户14 使用psql帮助15 使用psql语法补齐16 使用psql sql语法帮助17 查看当前配置18 设置会话参数19 在psql中切换到另一个用户或数据库20 使用pgadmin4连接数据库21 文档二、PostgreSQL on Linux(虚拟机)环境搭建1 环境要求2 下载Linux镜像3 安装VMware Workstation(试用版本)4 安装securecrt(试用版本)5 安装Linux虚拟机6 配置Linux虚拟机网络7 securecrt终端连接Linux8 配置linux9 配置yum仓库(可选)10 创建普通用户11 规划数据库存储目录12 下载PostgreSQL源码13 安装PostgreSQL14 配置linux用户环境变量15 初始化数据库集群16 配置数据库17 启动数据库集群18 连接数据库19 安装pgadmin(可选)20 配置pgadmin(可选)21 使用pgadmin连接数据库(可选)三、云数据库RDS for PostgreSQL1 购买云数据库2 设置并记住RDS for PostgreSQL数据库根用户名和密码3 配置网络4 配置白名单5 本地安装pgadmin(可选)6 本地配置pgadmin(可选)7 使用pgadmin连接RDS PostgreSQL数据库(可选)一、PostgreSQL on Win环境搭建1 环境要求
Win 7 x64, 8GB以上内存, 4核以上, SSD硬盘(推荐),100GB以上剩余空间, 可以访问公网(10MB/s以上网络带宽)
2 下载PostgreSQL安装包
https://www.postgresql.org/download/windows/
建议下载高级安装包,不需要安装,直接使用。
下载win x64的版本(建议下载最新版本)
http://www.enterprisedb.com/products/pgbindownload.do
例如
https://get.enterprisedb.com/postgresql/postgresql-9.6.2-3-windows-x64-binaries.zip
3 解压PostgreSQL安装包
postgresql-9.6.2-3-windows-x64-binaries.zip
例如解压到d:\pgsql
bin: 二进制文件
doc: 文档
include: 头文件
lib: 动态库
pgAdmin 4: 图形化管理工具
share: 扩展库
StackBuilder: 打包库
symbols: 符号表
4 下载pgadmin安装包(可选)
如果PostgreSQL包中没有包含pgAdmin,建议自行下载一个
建议下载pgadmin4(pgadmin3不再维护)
https://www.pgadmin.org/index.php
https://www.postgresql.org/ftp/pgadmin3/pgadmin4/v1.3/windows/
5 安装pgadmin(可选)6 规划数据文件目录
例如将D盘的pgdata作为数据库目录。
新建d:\pgdata空目录。
7 初始化数据库集群
以管理员身份打开cmd.exe
>d: >cd pgsql >cd bin >initdb.exe -D d:\pgdata -E UTF8 --locale=C -U postgres 初始化时,指定数据库文件目录,字符集,本地化,数据库超级用户名
8 配置postgresql.conf
数据库配置文件名字postgresql.conf,这个文件在数据文件目录D:\pgdata中。
将以下内容追加到postgresql.conf文件末尾
listen_addresses = '0.0.0.0' port = 1921 max_connections = 200 tcp_keepalives_idle = 60 tcp_keepalives_interval = 10 tcp_keepalives_count = 6 shared_buffers = 512MB maintenance_work_mem = 64MB dynamic_shared_memory_type = windows vacuum_cost_delay = 0 bgwriter_delay = 10ms bgwriter_lru_maxpages = 1000 bgwriter_lru_multiplier = 5.0 bgwriter_flush_after = 0 old_snapshot_threshold = -1 wal_level = minimalmax_wal_senders = 0 # 如果max_wal_senders大于0,需要设置wal_level至少为replica级别。 PG 10开始,max_wal_senders默认值为10,以前的版本默认为0。synchronous_commit = off full_page_writes = on wal_buffers = 64MB wal_writer_delay = 10ms wal_writer_flush_after = 4MB checkpoint_timeout = 35min max_wal_size = 2GB min_wal_size = 80MB checkpoint_completion_target = 0.1 checkpoint_flush_after = 0 random_page_cost = 1.5 log_destination = 'csvlog' logging_collector = on log_directory = 'pg_log' log_truncate_on_rotation = on log_checkpoints = on log_connections = on log_disconnections = on log_error_verbosity = verbose log_temp_files = 8192 log_timezone = 'Asia/Hong_Kong' autovacuum = on log_autovacuum_min_duration = 0 autovacuum_naptime = 20s autovacuum_vacuum_scale_factor = 0.05 autovacuum_freeze_max_age = 1500000000 autovacuum_multixact_freeze_max_age = 1600000000 autovacuum_vacuum_cost_delay = 0 vacuum_freeze_table_age = 1400000000 vacuum_multixact_freeze_table_age = 1500000000 datestyle = 'iso, mdy' timezone = 'Asia/Hong_Kong' lc_messages = 'C' lc_monetary = 'C' lc_numeric = 'C' lc_time = 'C' default_text_search_config = 'pg_catalog.english'
9 配置pg_hba.conf(可选)
数据库防火墙文件名字pg_hba.conf,这个文件在数据文件目录D:\pgdata中。
将以下内容追加到文件末尾,表示允许网络用户使用用户密码连接你的postgresql数据库.
host all all 0.0.0.0/0 md5
10 启动、停止数据库集群
使用命令行启动数据库集群
>d: >cd pgsql >cd bin D:\pgsql\bin>pg_ctl.exe start -D d:\pgdata 正在启动服务器进程 D:\pgsql\bin>LOG: 00000: redirecting log output to logging collector process HINT: Future log output will appear in directory "pg_log". LOCATION: SysLogger_Start, syslogger.c:622
使用命令行停止数据库集群
D:\pgsql\bin>pg_ctl.exe stop -m fast -D "d:\pgdata"等待服务器进程关闭 .... 完成服务器进程已经关闭
11 如何自动启动数据库集群
配置windows自动启动服务.
12 使用psql 命令行连接数据库
psql -h IP地址 -p 端口 -U 用户名 数据库名
D:\pgsql\bin>psql -h 127.0.0.1 -p 1921 -U postgres postgres psql (9.6.2) 输入 "help" 来获取帮助信息. postgres=# \dt
13 新增用户
新建用户属于数据库操作,先使用psql和超级用户postgres连接到数据库。
新增一个普通用户
postgres=# create role digoal login encrypted password 'pwd_digoal'; CREATE ROLE
新增一个超级用户
postgres=# create role dba_digoal login superuser encrypted password 'dba_pwd_digoal'; CREATE ROLE
新增一个流复制用户
postgres=# create role digoal_rep replication login encrypted password 'pwd'; CREATE ROLE
你还可以将一个用户在不同角色之间切换
例如将digoal设置为超级用户
postgres=# alter role digoal superuser; ALTER ROLE
查看已有用户
postgres=# \du+ 角色列表 角色名称 | 属性 | 成员属于 | 描述 ------------+--------------------------------------------+----------+------ dba_digoal | 超级用户 | {} | digoal | 超级用户 | {} | digoal_rep | 复制 | {} | postgres | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {} |
14 使用psql帮助
psql有很多快捷的命令,使用\?就可以查看。
postgres=# \? 一般性 \copyright 显示PostgreSQL的使用和发行许可条款 \errverbose 以最冗长的形式显示最近的错误消息 \g [文件] or; 执行查询 (并把结果写入文件或 |管道) \gexec 执行策略,然后执行其结果中的每个值 \gset [PREFIX] 执行查询并把结果存到psql变量中 \q 退出 psql \crosstabview [COLUMNS] 执行查询并且以交叉表显示结果 \watch [SEC] 每隔SEC秒执行一次查询 帮助 \? [commands] 显示反斜线命令的帮助 ......
15 使用psql语法补齐
如果你编译PostgreSQL使用了补齐选项,那么在psql中按TAB键,可以自动补齐命令。
16 使用psql sql语法帮助
如果你忘记了某个SQL的语法,使用\h 命令即可打印命令的帮助
例如
postgres=# \h create table 命令: CREATE TABLE 描述: 建立新的数据表 语法: CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXI STS ] 表名 ( [ { 列名称 数据_类型 [ COLLATE 校对规则 ] [ 列约束 [ ... ] ] | 表约束 | LIKE 源表 [ like选项 ... ] } [, ... ] ] ) ......
17 查看当前配置
show 参数名
postgres=# show client_encoding; client_encoding ----------------- GBK (1 行记录)
查看pg_settings
postgres=# select * from pg_settings;
18 设置会话参数
set 参数名=值;
postgres=# set client_encoding='sql_ascii'; SET
19 在psql中切换到另一个用户或数据库
\c 切换到其他用户或数据库
postgres=# \c template1 digoal 您现在已经连接到数据库 "template1",用户 "digoal".
20 使用pgadmin4连接数据库
pgAdmin4被安装在这个目录
d:\pgsql\pgAdmin 4\bin
双击pgAdmin4.exe打开pgadmin4(有点耗时,自动启动HTTPD服务)
点击server,右键,创建server.
配置server别名,连接数据库的 IP,端口,用户,密码,数据库名
21 文档
PostgreSQL的安装包中包含了pgadmin, PostgreSQL的文档,找到对应的doc目录,打开index.html。
二、PostgreSQL on Linux(虚拟机)环境搭建1 环境要求
Win 7 x64, 8GB以上内存, 4核以上, SSD硬盘(推荐),100GB以上剩余空间, 可以访问公网(10MB/s以上网络带宽)
2 下载Linux镜像
http://isoredirect.centos.org/centos/6/isos/x86_64/
http://mirrors.163.com/centos/6.9/isos/x86_64/CentOS-6.9-x86_64-minimal.iso
3 安装VMware Workstation(试用版本)
http://www.vmware.com/cn/products/workstation/workstation-evaluation.html
4 安装securecrt(试用版本)
securecrt可以用来连接Linux终端,方便使用
https://www.vandyke.com/products/securecrt/windows.html
5 安装Linux虚拟机
打开vmware, 创建虚拟机, 选择CentOS 6 x64版本.
1. 配置建议:
4G内存,40G磁盘,2核以上,NAT网络模式。
2. 安装建议:
minimal最小化安装。
3. root密码:
记住你设置的root密码。
4. Linux安装配置建议
配置主机名,配置网络(根据你的vmware NAT网络进行配置),关闭selinux,关闭防火墙或开放ssh端口(测试环境)。
6 配置Linux虚拟机网络
vmware窗口连接linux
例子,192.168.150 请参考你的vmware NAT网络修改一下。
配置网关
vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=digoal01 GATEWAY=192.168.150.2
配置IP
cat /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet UUID=d28f566a-b0b9-4bde-95e7-20488af19eb6 ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static HWADDR=00:0C:29:5D:6D:9C IPADDR=192.168.150.133 PREFIX=24 GATEWAY=192.168.150.2 DNS1=192.168.150.2 DEFROUTE=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0"
配置DNS
cat /etc/resolv.conf nameserver 192.168.150.2
重启网络服务
service network restart
7 securecrt终端连接Linux
添加一个session,连接到Linux虚拟机。
8 配置linux
1. /etc/sysctl.conf
vi /etc/sysctl.conf 追加到文件末尾 kernel.shmall = 4294967296 kernel.shmmax=135497418752 kernel.shmmni = 4096 kernel.sem = 50100 64128000 50100 1280 fs.file-max = 7672460 fs.aio-max-nr = 1048576 net.ipv4.ip_local_port_range = 9000 65000 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 4194304 net.ipv4.tcp_max_syn_backlog = 4096 net.core.netdev_max_backlog = 10000 net.ipv4.netfilter.ip_conntrack_max = 655360 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_tw_recycle=1 net.ipv4.tcp_timestamps=1 net.ipv4.tcp_keepalive_time = 72 net.ipv4.tcp_keepalive_probes = 9 net.ipv4.tcp_keepalive_intvl = 7 vm.zone_reclaim_mode=0 vm.dirty_background_bytes = 40960000 vm.dirty_ratio = 80 vm.dirty_expire_centisecs = 6000 vm.dirty_writeback_centisecs = 50 vm.swappiness=0 vm.overcommit_memory = 0 vm.overcommit_ratio = 90
生效
sysctl -p
2. /etc/security/limits.conf
vi /etc/security/limits.conf * soft nofile 131072 * hard nofile 131072 * soft nproc 131072 * hard nproc 131072 * soft core unlimited * hard core unlimited * soft memlock 500000000 * hard memlock 500000000
3. /etc/security/limits.d/*
rm -f /etc/security/limits.d/*
4. 关闭selinux
# vi /etc/sysconfig/selinux SELINUX=disabled SELINUXTYPE=targeted
5. 配置OS防火墙
(建议按业务场景设置,我这里先清掉)
iptables -F
配置范例
# 私有网段 -A INPUT -s 192.168.0.0/16 -j ACCEPT -A INPUT -s 10.0.0.0/8 -j ACCEPT -A INPUT -s 172.16.0.0/16 -j ACCEPT
重启linux。
reboot
9 配置yum仓库(可选)
在linux虚拟机中,找一个有足够空间的分区,下载ISO镜像
wget http://mirrors.163.com/centos/6.9/isos/x86_64/CentOS-6.9-x86_64-bin-DVD1.iso wget http://mirrors.163.com/centos/6.9/isos/x86_64/CentOS-6.9-x86_64-bin-DVD2.iso
新建ISO挂载点目录
mkdir /mnt/cdrom1 mkdir /mnt/cdrom2
挂载ISO
mount -o loop,defaults,ro /u01/CentOS-6.8-x86_64-bin-DVD1.iso /mnt/cdrom1 mount -o loop,defaults,ro /u01/CentOS-6.8-x86_64-bin-DVD2.iso /mnt/cdrom2
备份并删除原有的YUM配置文件
mkdir /tmp/yum.bak cd /etc/yum.repos.d/ mv * /tmp/yum.bak/
新增YUM配置文件
cd /etc/yum.repos.d/ vi local.repo [local-yum] name=Local Repository baseurl=file:///mnt/cdrom1 enabled=1 gpgcheck=0
刷新YUM缓存
yum clean all
测试
yum list yum install createrepo -- 方便后面测试
修改YUM配置,修改路径为上层目录
cd /etc/yum.repos.d/ vi local.repo [local-yum] name=Local Repository baseurl=file:///mnt/ enabled=1 gpgcheck=0
创建YUM索引
cd /mnt/ createrepo .
刷新YUM缓存,测试
yum clean all yum list yum install vim
10 创建普通用户
useradd digoal
11 规划数据库存储目录
假设/home分区有足够的空间, /home/digoal/pgdata规划为数据文件目录
Filesystem Size Used Avail Use% Mounted on /dev/sda3 14G 5.7G 7.2G 45% /
12 下载PostgreSQL源码
https://www.postgresql.org/ftp/source/
su - digoal wget https://ftp.postgresql.org/pub/source/v9.6.2/postgresql-9.6.2.tar.bz2
13 安装PostgreSQL
安装依赖包
root用户下,使用yum 安装依赖包 yum -y install coreutils glib2 lrzsz mpstat dstat sysstat e4fsprogs xfsprogs ntp readline-devel zlib-devel openssl-devel pam-devel libxml2-devel libxslt-devel python-devel tcl-devel gcc make smartmontools flex bison perl-devel perl-Ext Utils* openldap-devel jadetex openjade bzip2
编译安装PostgreSQL
digoal用户下,编译安装PostgreSQL tar -jxvf postgresql-9.6.2.tar.bz2 cd postgresql-9.6.2 ./configure --prefix=/home/digoal/pgsql9.6 make world -j 8 make install-world
14 配置linux用户环境变量
digoal用户下,配置环境变量
su - digoal vi ~/.bash_profile 追加 export PS1="$USER@`/bin/hostname -s`-> " export PGPORT=1921 export PGDATA=/home/digoal/pgdata export LANG=en_US.utf8 export PGHOME=/home/digoal/pgsql9.6 export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH export PATH=$PGHOME/bin:$PATH:. export DATE=`date +"%Y%m%d%H%M"` export MANPATH=$PGHOME/share/man:$MANPATH export PGHOST=$PGDATA export PGUSER=postgres export PGDATABASE=postgres alias rm='rm -i' alias ll='ls -lh' unalias vi
重新登录digoal用户,配置生效
exit su - digoal
15 初始化数据库集群
initdb -D $PGDATA -E UTF8 --locale=C -U postgres
16 配置数据库
配置文件在$PGDATA目录中
1. 配置postgresql.conf
追加 listen_addresses = '0.0.0.0' port = 1921 max_connections = 200 unix_socket_directories = '.' tcp_keepalives_idle = 60 tcp_keepalives_interval = 10 tcp_keepalives_count = 10 shared_buffers = 512MB dynamic_shared_memory_type = posix vacuum_cost_delay = 0 bgwriter_delay = 10ms bgwriter_lru_maxpages = 1000 bgwriter_lru_multiplier = 10.0 bgwriter_flush_after = 0 old_snapshot_threshold = -1 backend_flush_after = 0 wal_level = replica synchronous_commit = off full_page_writes = on wal_buffers = 16MB wal_writer_delay = 10ms wal_writer_flush_after = 0 checkpoint_timeout = 30min max_wal_size = 2GB min_wal_size = 128MB checkpoint_completion_target = 0.05 checkpoint_flush_after = 0 random_page_cost = 1.3 log_destination = 'csvlog' logging_collector = on log_truncate_on_rotation = on log_checkpoints = on log_connections = on log_disconnections = on log_error_verbosity = verbose autovacuum = on log_autovacuum_min_duration = 0 autovacuum_naptime = 20s autovacuum_vacuum_scale_factor = 0.05 autovacuum_freeze_max_age = 1500000000 autovacuum_multixact_freeze_max_age = 1600000000 autovacuum_vacuum_cost_delay = 0 vacuum_freeze_table_age = 1400000000 vacuum_multixact_freeze_table_age = 1500000000 datestyle = 'iso, mdy' timezone = 'PRC' lc_messages = 'C' lc_monetary = 'C' lc_numeric = 'C' lc_time = 'C' default_text_search_config = 'pg_catalog.english' shared_preload_libraries='pg_stat_statements'
2. 配置pg_hba.conf
追加 host all all 0.0.0.0/0 md5
17 启动数据库集群
su - digoal pg_ctl start
18 连接数据库
su - digoal psql psql (9.6.2) Type "help" for help. postgres=#
19 安装pgadmin(可选)
在windows 机器上,安装pgadmin
https://www.pgadmin.org/download/windows4.php
20 配置pgadmin(可选)
参考章节1
21 使用pgadmin连接数据库(可选)
参考章节1
三、云数据库RDS for PostgreSQL1 购买云数据库
https://www.aliyun.com/product/rds/postgresql
2 设置并记住RDS for PostgreSQL数据库根用户名和密码
在RDS 控制台操作。
3 配置网络
在RDS 控制台操作,配置连接数据库的URL和端口。
4 配置白名单
在RDS 控制台操作,配置来源IP的白名单,如果来源IP为动态IP,白名单设置为0.0.0.0。
(数据库开放公网连接有风险,请谨慎设置,本文仅为测试环境。)
5 本地安装pgadmin(可选)
在windows 机器上,安装pgadmin
https://www.pgadmin.org/download/windows4.php
6 本地配置pgadmin(可选)
参考章节1
7 使用pgadmin连接RDS PostgreSQL数据库(可选)
参考章节1
作者丨digoal
本文来自博客园,作者:古道轻风,转载请注明原文链接:https://www.cnblogs.com/88223100/p/How-to-build-an-environment-to-learn-and-develop-PostgreSQL.html