为什么是PostgreSQL?

在.NET Core诞生之前,微软平台上最常见的开发组件便是.NET Framework + SQL Server了,但是现在.NET Core终于让跨平台部署成为了现实,这一模式还会常见吗?个人认为这一黄金搭档很可能会日渐势微了,因为未来很多的.NET应用将部署在Linux上,为了使用SQL Server,人们又部署一个Windows环境吗?想想都觉得不大可能,那么为Linux上的.NET Core选择一款合适的数据库就变得非常重要。其实也不难选,因为就两个选项,一个是MySQL(The world’s most popular open-source database),另一个是PostgreSQL(The world's most advanced open source database),从目前我的认知而言,我选择了PostgreSQL。

在51job上全文搜索MySQL,有1568页内容,而全文搜索PostgreSQL则只有44页内容(2016年9月16日数据),这说明使用MySQL的企业和从业人员数据远超PostgreSQL数据,那为什么我还要选择PostgreSQL呢?这要从三个方面谈起,一是我曾学习并使用过MySQL,感觉MySQL上手容易,精通困难,一般程序员没有经过培训驾驭不了MySQL,当时有个项目,开发阶段貌似和SQL Server区别不大,但是系统部署到生产环境之后很快性能问题就会暴露出来了,为此我不得不赶鸭子上架,边学边用,重构了整个数据访问层,(有同学可能会问了,PostgreSQL可能比MySQL还要难上手,额,我最担心的是项目组中有人SQL脚本技术不过关,MySQL对于脚本的优化做的又不咋滴...);第二是我目前对GIS应用系统比较感兴趣,而PostgreSQL有一个MySQL无法比拟的优势,那就是PostGIS,PostGIS可以完美支持空间数据存储和空间分析;三是从PostgreSQL9.3起就内置了JSON数据类型,而9.4又开始支持JSONB,这标志着PostgreSQL实际上已经是一个关系型数据库和NoSQL数据库的结合体了,而且有消息表明,PostgreSQL的NoSQL性能有益到甚至超过了MongoDB!,这对于GIS大数据应用是多么好的一个消息啊。我还有什么理由拒绝PostgreSQL呢?

~~~~~~~~~~~~~~~~我是分割线,以上都是废话~~~~~~~~~~~~~~~~

安装环境:CentOS7.2,与此处环境相同

在安装之前,先看看官方的安装说明总是一个好习惯

CentOS7.2中自带的PostgreSQL是9.2版本的,里面没有NoSQL特性,因此我们使用rpm包安装方式,PostgreSQL的repository包地址列表在这里

1. 首先安装PostgreSQL的rpm

sudo yum install http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-redhat95-9.5-2.noarch.rpm -y

2. 然后再安装PostgreSQL服务器和第三方扩展包

sudo yum install postgresql95-server postgresql95-contrib -y

3. 初始化数据库(请看下面更新部分)

sudo /usr/pgsql-9.5/bin/postgresql95-setup initdb

---------------------------我是分割线,2016.10.26更新开始---------------------------

3. 默认情况下,Postgresql安装目录是/usr/pgsql-9.5,而Postgresql的数据目录是/var/lib/pgsql/版本号/data目录,如果你从一开始就规划了/var很大磁盘空间,就没有问题,但是一旦你的/var目录空间并不大,那么就要考虑在安装Postgresql时指定安装目录了,在本例中,我们假定/home的空间很大。

首先在/home下创建一个Postgresql的数据目录

sudo mkdir /home/postgresql_data

然后为这个目录指定所有者同时分配权限

sudo chown postgres:postgres /home/postgresql_data

sudo chmod 750 /home/postgresql_data

然后设置环境变量

export PATH=/usr/pgsql-9.5/bin:$PATH

export LD_LIBRARY_PATH=/usr/pgsql-9.5/lib

export PGDATA=/home/postgresql_data

然后使用命令initdb生成数据库簇,在此之此,请切换至postgres用户

initdb

最后尝试启动Postgresql服务

pg_ctl start -D $PGDATA

使用 ps -ef | grep postgres 验证,如果有一堆postgres相关进程,那就安装成功了。

如果就到此结束了,貌似第4步就没法做了,因为使用 systemctl start postgresql-9.5 将不会成功的,为啥呢?请打开 sudo vi /usr/lib/systemd/system/postgresql-9.5.service ,因为在#Location of database direcotry配置节里面没有指定正确的PGDATA。所以我们需要将下面的PGDATA设置成正确值

#Location of database directory
Environment=PGDATA=/home/postgresql_data

---------------------------我是分割线,2016.10.26更新结束---------------------------

4. 配置数据库服务开机启动并立即启动数据库服务

sudo systemctl enable postgresql-9.5.service

sudo service postgresql-9.5 start

5. 检查数据库服务状态,有绿色,没红色说明启动OK了

service postgresql-9.5 status

6. 修改postgres用户密码,切换到postgres用户

sudo passwd postgres

su postgres

7. 然后使用psql工具登录数据库,列出当前的数据库,命令分别是 psql 和 \l

在CentOS上,默认的PostgreSQL数据目录是/var/lib/pgsql/版本号/data

PostgreSQL的配置文件就在这个目录下/var/lib/pgsql/版本号/data/postgresql.conf,还有一个配置文件也需要稍加关注,那就是访问控制配置文件/var/lib/pgsql/版本号/data/pg_hba.conf

8. 下面需要先对服务配置文件postgresql.conf进行一些设置:

将 #listen_addresses = 'localhost' 前的#号去掉,然后将后面的localhost改为*,然后将 #port = 5432 前的#去掉,最后再将 #password_encryption = on 前面的#号去掉,如下图所示,使用wq命令保存退出。

(友情提示:postgresql.conf中可以修改的参数很多,上图中第2个红框可以修改侦听端口,另外此文件内还可以修改缓存大小等多种参数)

9. 再对pg_hba.conf内容进行配置,将上面红框内的ident改为md5,然后再在最下面加入 host all all 0.0.0.0/0 md5 ,如下图所示:

10. 重启postgresql-9.5服务,使配置文件重效

service postgresql-9.5 restart

11. 接下来我们创建一个数据库

psql
CREATE DATABASE testdb;

如下图所示,我们就创建了一个名为testdb的数据库,

12.然后再创建一名用户

CREATE USER think8848 CREATEDB LOGIN PASSWORD ''

如下图所示,这样我们就创建了一个名为think8848的用户,后面的 CREATEDB LOGIN PASSWORD '' 意思是这个用户可以创建数据库,还可以登录,他的密码是111111

13. 接下来将testdb的所有权限都分配给think8848同学

GRANT ALL ON DATABASE testdb TO think8848

14. 退出postgres用户登录,命令为\q, 对,你没看错,就是一个反斜杠和一个q

15. 开启防火墙5432端口

sudo firewall-cmd --zone=public --add-port=5432/tcp --permanent

sudo firewall-cmd --reload

16. 尝试用think8848登录数据库

psql -U think8848 -h 127.0.0.1 -p 5432 -d testdb -W

最后,再说两个psql很常用的命令,一个\c,切换数据库,如: \c postgres; ,它的作用和SQL Server的 use postgres; 一样;另一个是\d,此命令是列出当前库下所有的表。

 

17. 我打算使用PostgreSQL做数据库服务器,但是从没打算使用psql当管理工具,所以还是要找个GUI的管理工具才行啊,也不知道哪个好,先随手抓过来一个用用看,pgAdmin4,下载地址在这里 ,

先建个Server看看都有什么

再给起个响亮点的名称

然后再配置服务器IP等信息

点了Save后并没有什么反应,在Servers上点击右键Refresh,还是没有什么效果,难道这货没有用?好吧,再试试IT人员的杀手级技巧吧,关了程序重新打开,这时...

看起来还不错,可以用图形化界面管理数据库,然后又是免费的,我们不能要求太多,对吧?

CentOS7下安装并简单设置PostgreSQL笔记的更多相关文章

  1. 学习笔记(1)centos7 下安装nginx

    学习笔记(1)centos7 下安装nginx 这里我是通过来自nginx.org的nginx软件包进行安装的. 1.首先为centos设置添加nginx的yum存储库 1.通过vi命令创建一个rep ...

  2. Centos7下安装postgresql(tar包形式安装)

    Centos7下安装postgresql(tar包形式安装) 1.官网下载地址: https://www.postgresql.org/ftp/source/ 2.将下载来tar包上传到linux服务 ...

  3. Docker学习笔记3:CentOS7下安装Docker-Compose

    Docker-Compose是一个部署多个容器的简单但是非常必要的工具. 安装Docker-Compose之前,请先安装 python-pip,请参考我的另一篇博文CentOS7下安装python-p ...

  4. ubuntu下minicom安装和简单设置使用

    minicom是一个串口通信工具. Ubuntu下的安装: 打开终端 sudo apt-get install minicom即可完成安装. 简单设置使用: 安装完成后第一次启动时运行 sudo mi ...

  5. centos7下安装php+memcached简单记录

    1)centos7下安装php 需要再添加一个yum源来安装php-fpm,可以使用webtatic(这个yum源对国内网络来说恐怕有些慢,当然你也可以选择其它的yum源) [root@nextclo ...

  6. CentOS6.5 下安装 texlive2015 并设置 ctex 中文套装

    0 卸载旧版本的 texlive 0.1 卸载 texlive2007 如果系统没有安装过texlive,则跳过第0步. 可以在终端中使用如下命令查询本机已经安装的tex和latex版本: [She@ ...

  7. centos7下安装指定版本mysql5.7.23

    现在mysql版本已经到MySQL 8.0(GA)稳定版本了,所以需求是想简单又快速在centos7下安装指定版本例如MySQL 5.7(GA)版本有下面这种方法 首先需要到mysql官网这里下载对应 ...

  8. CentOS7 下安装 iSCSI Target(tgt) ,使用 Ceph rbd

    目录 一.iSCSI 介绍 1. iSCSI 定义 2. 几种常见的 iSCSI Target 3. 优缺点比较 二.安装步骤 1. 关闭防火墙 2. 关闭selinux 3. 通过 yum 安装 t ...

  9. centos7 下安装rpm的mysql 5.7

    在centos7下安装mysql5.7 一:下载mysql 去官网上去下载:这里我下载的二进制格式的 https://dev.mysql.com/downloads/mysql/ 去下载对应平台的my ...

随机推荐

  1. 2.JAVA之GUI编程布局

    布局管理器 容器中的组件排放方式,就是布局 常见的布局管理器: **************************************************** 1.FlowLayout(流式 ...

  2. 利用KD树进行异常检测

    软件安全课程的一次实验,整理之后发出来共享. 什么是KD树 要说KD树,我们得先说一下什么是KNN算法. KNN是k-NearestNeighbor的简称,原理很简单:当你有一堆已经标注好的数据时,你 ...

  3. java中异常抛出后代码还会继续执行吗

    今天遇到一个问题,在下面的代码中,当抛出运行时异常后,后面的代码还会执行吗,是否需要在异常后面加上return语句呢? public void add(int index, E element){ i ...

  4. C# 引用类型和值类型

    C# 引用类型和值类型 CLR支持两种类型:引用类型和值类型. 1.引用类型 (1)内存必须从托管堆上分配: (2)堆上分配的每个对象都有一些额外成员(包括“类型对象指针”,“同步块索引”),这些成员 ...

  5. json显示日期带T问题的解决方法

    此问题是由Newtonsoft.Json转换json导致的: Newtonsoft.Json产生的默认日期时间格式为: IsoDateTimeConverter 格式 解决方法: 需要引用下面的命名空 ...

  6. mysql substring函数截取值后赋给一个declare变量

    今天写的一个mysql存储过程涉及到对一个传入参数的字符串截取,然后需要判断截取字符串进行一系列操作,最开始用select  subtring() into 这样的方法将截取值赋于declare变量直 ...

  7. Python 基础之三条件判断与循环

    If……else 基本结构: If condition: do something else: do something 或者 If condition: do something elif cond ...

  8. Jsp语法简介

    1.JSP指令 jsp指令用来设置整个JSP网页想关闭的属性,如网页的编码和脚本语言等.常用的3种指令为page,include和taglib. 2.JSP声明 jsp声明用于声明JSP代表的Serv ...

  9. 原型设计Axure的基本使用

    Axure是一款专业的原型设计工具, 让负责定义需求设计:功能和界面的人员能快速设计出所需产品,其中不仅包含了对软件产品的界面,交互逻辑的原型设计,还包含了流程图:web网站的线框图,并且能导出说明文 ...

  10. gitignore 规范

    gitignore 应该包含 5 块内容: 当前项目需要忽略的文件 项目性质需要忽略的文件(比如是 nodejs 项目,有些文件就需要忽略) 所有项目都需要忽略的文件(比如日志.临时文件) 操作系统需 ...