postgresql 9.4.4 安装

因为最近要做个数据研究,需要把数据入库,开源数据库中,同学们一般可能都会选择mysql,不过mysql 的一些函数能是在太累,因此我这边换成使用起来与oracle 更为相似的postgresql,近来这个数据库也是极其热门,上升速度很快。

下面做个编译与安装介绍,以下内容基本都来自德哥分享(http://blog.163.com/[email protected]/)的文档,感谢德哥的分享。

Postgresql下载网址:

http://www.postgresql.org/ftp/source/

这里我们选择最新的稳定版版postgresql-9.4.4 的源码版

https://ftp.postgresql.org/pub/source/v9.4.4/postgresql-9.4.4.tar.bz2

下载后解压

tar jxvf postgresql-9.4.4.tar.bz2

因为postgresql不能用root 用户启动,需要为他重新新建一个用户

创建用户

useradd pg944

进入下载的目录

cd postgresql-9.4.4

编译,这里设置安装目录

./configure --prefix=/home/pg944/pgsql

完成后执行

gmake world
gmake install-world

下面初始化数据库相关配置

首先修改Linux内核相关参数调整

vi /etc/sysctl.conf

在最下面加上

kernel.shmmni = 4096
kernel.sem = 50100 64128000 50100 1280
fs.file-max = 7672460
net.ipv4.ip_local_port_range = 9000 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576

然后继续修改

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 50000000
* hard memlock 50000000

设置防火墙

vi /etc/sysconfig/iptables

加上端口,记得在端口22的那个设置下加,不要加到最下面

-A RH-Firewall-1-INPUT -p tcp -m tcp--dport 1999 -j ACCEPT

重启防火墙

service iptables restart

现在初始化postgresql 用户的相关配置

su - pg944

添加环境变量

vi ~/.bash_profile

加上

export PGPORT=1999
export PGDATA=/home/pg944/pg_root
export LANG=en_US.utf8
export PGHOME=/home/pg944/pgsql
export LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATH
export DATE=`date +"%Y%m%d%H%M"`
export PATH=$PGHOME/bin:$PATH:.
export MANPATH=$PGHOME/share/man:$MANPATH
export PGUSER=postgres
export PGHOST=$PGDATA
alias rm='rm  -i'
alias ll='ls -lh'
export PGDATABASE=postgres

保存设置

source ~/.bash_profile

初始化数据库

initdb -D $PGDATA -E UTF8 --locale=C  -U postgres -W

这里要输入密码,和输入确认密码,输错会让你重新初始化

测试下

[[email protected] ~]$ psql -V
psql (PostgreSQL) 9.4.4

这个时候$PGDATA这里就可以看到数据库文件了。下面挑几个重要的说说

ll $PGDATA
base  -- 这个目录对应pg_default表空间
global  --这个目录对应pg_global表空间,  存放集群中的共享对象例pg_database表, (select  relkind,relname from  pg_class where reltablespace = (select oid from  pg_tablespace where spcname=‘pg_global’)
order by 1) , 包含控制文件等.
pg_clog -- 存储事务提交状态数据
pg_hba.conf -- 数据库访问控制文件
pg_log -- 数据库日志目录(根据配置定义,  可能没有这个目录)
pg_multixact -- 共享行锁的事务状态数据
PG_VERSION  -- 数据库版本
pg_xlog  -- 存储WAL文件
postgresql.conf -- 配置文件
postmaster.opts -- 记录数据库启动时的命令行选项
postmaster.pid -- 数据库启动的主进程信息文件(包括$PGDATA目录,  数据库启动时间, 监听端口ipc信息等)

继续

cd $PGDATA

启动数据库前修改一下$PGDATA下面的pg_hba.conf和postgresql.conf

pg_hba.conf用于配置控制访问数据库的来源

这里为了方便设置对所有地址开放,很不安全

host all all 0.0.0.0/0 md5

postgresql.conf是数据库的主配置文件,  最好也调整一下Linux内核参数.

下面内容会比较多

vi postgresql.conf

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

监听IPv4的所有IP.

listen_addresses = ‘0.0.0.0‘

最大允许1000个连接(测试的话100够了, 加大连接数同时需要调整shared buffer).

max_connections = 100

为超级用户保留10个可用连接.

superuser_reserved_connections = 10

默认的unix socket文件放在/tmp, 修改为$PGDATA, 以确保本地访问的安全性.

unix_socket_directory = ‘.‘

默认的访问权限是0777, 修改为0700更安全.

unix_socket_permissions = 0700

TCP会话心跳包在Linux下面默认是2小时.  如果已经修改了系统的内核参数, 则不需要再修改这里.

为防止客户端和服务端之间的网络设备主动关闭空闲TCP会话, 设置以下参数.

tcp_keepalives_idle = 60

tcp_keepalives_interval = 10

tcp_keepalives_count = 6

大的shared_buffers需要大的checkpoint_segments,同时需要申请更多的System V共享内存资源. 并且增加共享内存管理的开销.

这个值不需要设的太大, 因为PostgreSQL还依赖操作系统的文件系统cache来提高读性能,  另外, 写操作频繁的数据库这个设太大反而会增加checkpoint压力.

在9.4版本中会增加mmap以及huge page table的支持以减少内存管理的开销.

shared_buffers = 512MB

这个值越大, VACUUM, CREATE INDEX的操作越快, 当然大到一定程度瓶颈就不在内存了, 可能是CPU例如创建索引.

这个值是一个操作的内存使用上限, 而不是一次性分配出去的. 并且需要注意如果开启了autovacuum, 最大可能有

autovacuum_max_workers*maintenance_work_mem的内存被系统消耗掉.

maintenance_work_mem = 512MB

一般设置为比系统限制的略少,ulimit -a : stack size (kbytes, -s) 10240

max_stack_depth = 8MB

手动执行vacuum操作时, 默认是没有停顿执行到底的, 为了防止VACUUM操作消耗太多数据库服务器硬件资源, 这个值是指vacuum在消耗多少资源后停顿多少时

间,以便其他的操作可以使用更多的硬件资源.

vacuum_cost_delay = 10ms

vacuum_cost_limit = 10000  # 1-10000 credits

默认bgwriter进程执行一次后会停顿200ms再被唤醒执行下一次操作, 当数据库的写操作很频繁的时候, 200ms可能太长, 导致其他进程需要花费过多的时间来进行

bgwriter的操作. 短暂的停顿更利于将sharedbuffer中的脏块flush到磁盘, 降低backend 主动flush 以申请共享内存的情形. 后面使用explain时会讲到.

bgwriter_delay = 10ms

另外还有几个和写脏块相关的参数, 即写多少脏块后开始休息.

如果需要做数据库WAL日志备份的话至少需要设置成archive级别,  如果需要做hot_standby那么需要设置成hot_standby,由于这个值修改需要重启数据库, 所以先

设置成hot_standby比较好.  当然hot_standby意味着WAL记录得更详细,  如果没有打算做hot_standby设置得越低性能越好.

wal_level = hot_standby

wal buffers默认是-1 根据shared_buffers的设置自动调整shared_buffers*3%.最大限制是XLOG的segment_size.

wal_buffers = 16384kB

多少个xlog file产生后开始checkpoint操作,

这个值越大, 允许shared_buffer中的被频繁访问的脏数据存储得更久. 一定程度上可以提高数据库性能. 但是太大的话会导致在数据库发生checkpoint的时候需要

处理更多的脏数据带来长时间的IO开销(还要考虑bgwriter的存在).

太小的话会导致产生更多的WAL文件 (因为full page writes=on, CHECKPOINT后的第一次块的改变要写全块,checkpoint越频繁, 越多的数据更新要写全块导致产

生更多WAL).

checkpoint_segments = 32

这个和checkpoint_segments的效果是一样的,  只是触发的条件是时间条件.

checkpoint_timeout = 5min

归档参数的修改也需要重启数据库, 所以就先打开吧.

archive_mode = on

这个是归档调用的命令, 我这里用date代替, 所以归档的时候调用的是输出时间而不是拷贝wal文件.

archive_command = ‘/bin/date‘ # ‘cp %p/arch/%f‘

如果要做hot standby这个必须大于0, 并且修改之后要重启数据库所以先设置为32.

表示允许建立多少个和流复制相关的连接.

max_wal_senders = 32

这是个standby 数据库参数, 为了方便角色切换, 我一般是所有的数据库都把他设置为on 的.

hot_standby = on

这个参数是说数据库中随机的PAGE访问的开销占seq_page_cost的多少倍 , seq_page_cost默认是1. 其他的开销都是seq_page_cost的倍数.

这些都用于基于成本的执行计划选择. 后面讲成本因子的调教时会详细说明.

random_page_cost = 2.0

effective_cache_size只是个度量值,  不是实际分配使用的内存值.

表示系统有多少内存可以作为操作系统的cache. 越大的话, 数据库越倾向使用index这种适合random访问的执行计划.

一般设置为内存大小减去数据库的shared_buffer再减去系统和其他软件所需的内存.

effective_cache_size = 12000MB

下面是日志输出的配置.

log_destination = ‘csvlog‘

logging_collector = on

log_directory = ‘pg_log‘   #这里建议做修改,但得提前建好目录,并设置权限

log_truncate_on_rotation = on

log_rotation_age = 1d

log_rotation_size = 10MB

这个参数调整的是记录执行时间超过1秒的SQL到日志中, 一般用于跟踪哪些SQL执行时间长.

log_min_duration_statement = 1s

记录每一次checkpoint到日志中.

log_checkpoints = on

记录锁等待超过1秒的操作, 一般用于排查业务逻辑上的问题.

log_lock_waits = on

deadlock_timeout = 1s

记录连接和端口连接, 可以反映短连接的问题, 同时也可以作为连接审计日志.

log_connections = on

log_disconnections = on

打开代码位置信息的输出, 可以反映日志信息输出自哪个代码的什么函数.

在会话中可以使用\set VERBOSITY verbose开启

log_error_verbosity  = verbose

记录DDL语句, 但是需要注意的是, 创建用户, 修改密码的语句也会被记录, 所以敏感SQL执行前建议在会话中关闭这个审计.

log_statement = ‘ddl‘

这个原本是1024表示跟踪的SQL在1024的地方截断, 超过1024将无法显示全SQL. 修改为2048会消耗更多的内存(基本可以忽略), 不过可以显示更长的SQL.

track_activity_query_size = 2048

默认autovacuum就是打开的, log_autovacuum_min_duration = 0记录所有的autovacuum操作.

autovacuum = on

log_autovacuum_min_duration = 0

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

通过psql 命令登录数据库

psql -h 192.168.137.3 -p 1999 -U postgres

由于我是专注开发,因此喜欢用IDE去写sql,这里有个postgresql第三方开发工具,类似pl/sql

http://www.pgadmin.org/download/windows.php

下载安装,输入数据库相关链接

成功连接

点SQL图标就可以开始写SQL了

比如

下面创建一个表空间,这里的地址对应服务器里的文件夹。pg_test文件目录得提前创建。

create tablespace "pgtest"location '/home/pg944/pg_root/pg_test';

Ok,数据库装完,现在就可以愉快导数据进行开发了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-08 10:30:02

postgresql 9.4.4 安装的相关文章

PostgreSQL在Ubuntu上安装

安装环境: Ubuntu 64bit PostgreSQL 9.0 1. 安装PostgreSQL 输入如下命令 sudo apt-get install postgresql 系统会提示安装所需磁盘空间,输入"y",安装程序会自动完成. 安装完毕后,系统会创建一个数据库超级用户"postgres", 密码为空.这个用户既是不可登录的操作系统用户,也是数据库用户. 2. 修改ubuntu用户postgres的密码 输入如下命令 sudo passwd postgre

postgreSQL在linux中安装详解

postgreSQL在linux中安装详解 收藏 这里安装8.4.4版本,首先下载postgresql-8.4.4-1-linux.bin.(http://www.postgresql.org/download/)下载linux32版本的1.       如果该文件不在linux系统中,将其从Windows拖到linux系统中,放到任意一个目录下,最好放在/opt或者/home.推荐一个Windows文件转到linux的工具:WinSCP3 ( 1.打开一个终端,su -成root用户:2.ch

Postgresql和Mysql数据库安装

1.环境准备 1.1 win7 x64系统 1.2 Postgresql-9.1.13-windows-binaries.zip 和 mysql-5.5.46-win32.zip 2.安装过程 2.1 Postgresql-9.1.13安装过程 ① 将zip格式的安装包解压到某个文件夹,比如是D:\pgsql. ② 在D:\postgresql文件夹下新建data文件夹,这个文件夹主要是用来存放数据库. ③ 设置环境变量(电脑>属性>高级设置),这里主要设置系统环境变量,分别有以下几个:PGH

PostgreSQL 9.6.1安装

RHEL7.2+PostgreSQL9.6.1 Requirements softwares 1.GNU make version 3.80 or newer is required [[email protected] ~]# make --version GNU Make 3.82 Built for x86_64-redhat-linux-gnu 2.You need an ISO/ANSI C compiler (at least C89-compliant). Recent versi

postgresql 9源码安装

安装过程: 1.configuration --prefix=PREFIX install all files under the directory PREFIX instead of usr/local/psql --with-pgport=NUMBER set NUMBER as the default port number for server and clients,the default is 5432. --with-segsize=SEGSIZE(控制表的大小) set the

【环境搭建】PostgreSQL 10.7 rpm安装离线部署到 centOS 6.8

1.下载rpm包: 1)下载依赖包 libicu.rpm 百度rpm, 进入 http://fr2.rpmfind.net/linux/RPM/, 搜索libicu, 下载对应linux系统版本的依赖,此处下载的是centos6.8的 http://fr2.rpmfind.net/linux/rpm2html/search.php?query=libicu&submit=Search+... 下载 2)postgresql官网下载对应版本的rpm 安装包 进入https://yum.postgr

PostgreSQL(Linux)安装、启动、停止、重启

If we don't already have PostgreSQL installed, we must install it. $ sudo apt-get install postgresql This command installs the PostgreSQL server and various other packages. $ sudo update-rc.d -f postgresql remove Removing any system startup links for

2.PostgreSQL安装详细步骤(windows)【转】

感谢 Junn9527 PostgreSQL安装:一.windows下安装过程安装介质:postgresql-9.1.3-1-windows.exe(46M),安装过程非常简单,过程如下:1.开始安装: 2.选择程序安装目录: 注:安装 PostgreSQL 的分区最好是 NTFS 格式的.PostgreSQL 首要任务是要保证数据的完整性,而 FAT 和 FAT32 文件系统不能提供这样的可靠性保障,而且 FAT 文件系统缺乏安全性保障,无法保证原始数据在未经授权的情况下被更改.此外,Post

ubuntu编译安装postgresql及主从配置

操作系统版本    Ubuntu 14.04 数据库软件版本     postgresql-9.4.7.tar.gz 安装方式    编译安装 软件安装目录    /usr/local/pgsql 数据存放目录    /service/postgresql/data 日志存放目录    /service/postgresql/archive 1.安装依赖包 sudo apt-get update sudo apt-get install  libreadline6-dev sudo apt-ge