随笔 - 10  文章 - 0 评论 - 0 trackbacks - 0

 PostgreSQL 是一个对象-关系数据库(数据库管理系统),基于BSD许可证。因为许可证的灵活,任何人都可以以任何目的免费使用,修改,和分发PostgreSQL。简单地说,即使拿它来改一改,然后再拿出去卖钱,也没有人会来管。因此颇多的国产数据库就是基于PostgreSQL开发的。

有一件很有意思的事,PostgreSQL并不是念“post-gre- sequel”,PostgreSQL的开发者把它念作“post-gress-Q-L”,通常会简读为 "postgres"。

PostgreSQL支持大部分SQL标准并且提供了许多现代特性,例如:复杂查询、外键、触发器、视图、事务完整性、多版本并发控制。同样,PostgreSQL 可以用许多方法扩展,比如,通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言。而且支持很多分布式集群软件,如pgpool、pgcluster、slony、plploxy等等,因此很容易做读写分离、负载均衡、数据水平拆分。

       正因为Postgres有很多好处,目前很多用户都想要在Azure上也使用PostgreSQL作为数据库服务。在Azure.com上,PostgreSQL已经作为Azure的PaaS服务提供预览了。

 

  但是,在Azure.cn上,目前还没有提供PostgreSQL的PaaS服务。那用户要使用怎么办呢?目前建议用户在Azure上自行搭建。其实整个安装部署的过程并不复杂,大家可以参考以下步骤自行安装。

       安装环境为CentOS7.3,这也是Azure.cn上目前使用较为普遍的Linux系统。

       在正式开始安装前,首先要确保PostgreSQL所需要的依赖包都已经正确安装了,我们通过一条命令来安装所有的依赖包:

# yum install readline-devel gcc make zlib-devel openssl openssl-devel libxml2-devel pam-devel pam  libxslt-devel tcl-devel python-devel -y

所有的软件包会自动下载并安装(记得要给虚机配置一个公网地址)。

 

等到所有软件安装完成,我们就可以下载最新的PostgreSQL的安装包了,在浏览器输入https://ftp.postgresql.org/pub/source/,可以看到最新版本是2017年8月31号发布的9.6.5

 

执行以下命令,下载最新的PostgreSQL安装包到指定目录

# wget https://ftp.postgresql.org/pub/source/v9.6.5/postgresql-9.6.5.tar.bz2 -P /root/

 进入下载目录,用tar命令解压缩安装包

# tar jxvf postgresql-9.6.5.tar.bz2

 这条命令将安装包解压到了postgresql-9.6.5,接下来我们就进入该目录,执行安装部署:

# cd postgresql-9.6.5

指定将PostgreSQL安装到opt目录下

# ./configure --prefix=/opt/postgresql-9.6.5

如果我们需要生成所有能生成的内容,包括文档(HTML 和手册页)和其他模块 (contrib),那么再执行以下命令,完成安装:

# gmake install-world

 

至此,PostgreSQL的软件包就已经安装完毕了,接下来我们需要初始化并配置数据库:

首先我们可以先创建一个链接,指向安装目录,这只是为了简化后面用到的命令,也可以跳过这一步,不过后继的命令要做相应的修改:

# ln -s /opt/postgresql-9.6.5 /opt/pgsql

 安装好的PostgreSQL没有创建数据库,因此我们首先要创建数据库目录

# mkdir -p /opt/pgsql_data

但是直接在root下运行数据库是很危险的,所以我们要创建一个新用户,并修改该用户的配置文件。

# useradd postgres

 # chown -R postgres.postgres /opt/pgsql_data

 # su – postgres

 编辑 bash_profile 文件。这些行将添加到 bash_profile 文件的末尾,

cat >> ~/.bash_profile <<EOF

export PGPORT=1999

export PGDATA=/opt/pgsql_data

export LANG=en_US.utf8

export PGHOME=/opt/pgsql

export PATH=\$PATH:\$PGHOME/bin

export MANPATH=\$MANPATH:\$PGHOME/share/man

export DATA=`date +"%Y%m%d%H%M"`

export PGUSER=postgres

alias rm='rm -i'

alias ll='ls -lh'

EOF

 执行 bash_profile 文件,或者退出当前帐号,重新进入,确保参数生效。

$ source .bash_profile

到这里,数据库就配置完成了,我们可以通过以下两条命令来查看安装目录,参数是否正确

$ which psql

$ psql -V

当我们看到以上反馈时,说明安装基本没有问题了。

 

接下来我们初始化数据库:

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

还需要配置数据库启动文件:

# cd /root/postgresql-9.6.5/contrib/start-scripts

# cp linux /etc/init.d/postgresql

 修改 /etc/init.d/postgresql 文件中的两个变量。设置为 PostgreSQL 的安装路径:/opt/pgsql。PGDATA 设置为 PostgreSQL 的数据存储路径:/opt/pgsql_data

 # sed -i '32s#usr/local#opt#' /etc/init.d/postgresql

 # sed -i '35s#usr/local/pgsql/data#opt/pgsql_data#' /etc/init.d/postgresql

 设置启动文件为可执行文件

# chmod +x /etc/init.d/postgresql

 现在我们可以启动postgreSQL了

# /etc/init.d/postgresql start

 

检查 PostgreSQL 的终结点是否已打开,注意,此时PostgreSQL只允许本机连接数据库,因为我们还没有配置监听端口和信任端点:

# netstat -tunlp|grep 1999

 

 安装部署至此全部完成,接下来让我们连接到数据库,并建立一个简单的数据库来验证一下:

切换成 postgres 用户

# su – postgres

 

创建数据库

$ createdb events

 链接新创建的数据库

$ psql -d events 

创建我们的第一张表

CREATE TABLE potluck (name VARCHAR(20), food VARCHAR(30), confirmed CHAR(1), signup_date DATE);

 现在已经设置一个具有以下列名和限制的 4 列表:

“name”列受 VARCHAR 命令限制,必须少于 20 个字符。

“food”列指示每个人将携带的食物。VARCHAR 将此文本限制为 30 个字符以下。

“confirmed”列记录此人是否接受了聚餐邀请。可接受的值为“Y”和“N”。

“date”列将在他们报名参加该活动时显示。Postgres 要求日期格式为 yyyy-mm-dd。

 

查看创建的表

\dt

插入一行数据

INSERT INTO potluck (name, food, confirmed, signup_date) VALUES('John', 'Noodle', 'Y', '2017-09-21');

 多添加几个

INSERT INTO potluck (name, food, confirmed, signup_date) VALUES('Sandy', 'Rice', 'N', '2017-09-21');

 INSERT INTO potluck (name, food, confirmed, signup_date) VALUES ('Tom', 'BBQ','Y', '2017-09-20');

 INSERT INTO potluck (name, food, confirmed, signup_date) VALUES('Tina', 'Salad', 'Y', '2017-09-19');

 

在表中查询

select * from potluck;

更新数据

UPDATE potluck set confirmed = 'Y' WHERE name = 'Sandy';

UPDATE potluck set food = 'Rice' WHERE name = 'Sandy';

 

删除数据

delete from potluck where name = ’John’;

 

 

 

在下一篇,我们来看看怎么修改PostgreSQL的数据库参数,优化性能。

 

posted on 2017-10-03 17:24 johntoo 阅读(...) 评论(...) 编辑 收藏