1基础信息

1.1基础设施

数据库服务器推荐配置

CPU 双核2.5GHz,内存 32G以上

数据库服务器操作系统

CentOS Linux release 7.2.1511 (Core)

数据库服务器版本

Postgresql9.6

1.2 PostgreSQL简介

1.2.1 Postmistress是什么

PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。

PostgreSQL 开发者把它念作 post-gress-Q-L。

PostgreSQL 的 Slogan 是 "世界上最先进的开源关系型数据库"。

1.2.2 ORDBMS 术语

在我们开始学习 PostgreSQL 数据库前,让我们先了解下 ORDBMS 的一些术语:

数据库: 数据库是一些关联表的集合。

数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。

: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。

行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。

冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。

主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

外键:外键用于关联两个表。

复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

1.2.3 PostgreSQL 特征

函数:通过函数,可以在数据库服务器端执行指令程序。

索引:用户可以自定义索引方法,或使用内置的 B 树,哈希表与 GiST 索引。

触发器:触发器是由SQL语句查询所触发的事件。如:一个INSERT语句可能触发一个检查数据完整性的触发器。触发器通常由INSERT或UPDATE语句触发。 多版本并发控制:PostgreSQL使用多版本并发控制(MVCC,Multiversion concurrency control)系统进行并发控制,该系统向每个用户提供了一个数据库的"快照",用户在事务内所作的每个修改,对于其他的用户都不可见,直到该事务成功提交。

规则:规则(RULE)允许一个查询能被重写,通常用来实现对视图(VIEW)的操作,如插入(INSERT)、更新(UPDATE)、删除(DELETE)。

数据类型:包括文本、任意精度的数值数组、JSON 数据、枚举类型、XML 数据

等。

全文检索:通过 Tsearch2 或 OpenFTS,8.3版本中内嵌 Tsearch2。

NoSQL:JSON,JSONB,XML,HStore 原生支持,至 NoSQL 数据库的外部数据包装器。

数据仓库:能平滑迁移至同属 PostgreSQL 生态的 GreenPlum,DeepGreen,HAWK 等,使用 FDW 进行 ETL。

1.3、安装PostgreSQL

1.3.1安装依赖包

yum intall -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devel libxml2-devel libxslt-devel openldap-devel  python-devel gcc-c++ openssl-devel cmake

yum install gcc* readline-devel

1.3.2创建用户并改密

adduser postgres

passwd postgres

更改用户 postgres 的密码 。

新的 密码:

无效的密码: 它基于字典单词

重新输入新的 密码:

passwd: 所有的身份验证令牌已经成功更新。

id postgres

uid=1001(postgres) gid=1001(postgres) 组=1001(postgres)

1.3.3解压缩

tar -zxvf postgresql-9.6.2.tar.gz

cd postgresql-9.6.2

1.3.4配置编译选项

./configure --prefix=/opt/pgsql/ --with-perl--with-libxml--with-libxslt

1.3.5编译并安装

gmake

gmake install

1.3.6初始化数据库

mkdir /opt/pgdata

chown postgres:postgres /opt/pgdata

su - postgres

/opt/pgsql/bin/initdb -D /opt/pgdata

1.3.7配置环境变量

vim .bashrc

export PGDATA=/opt/pgdata

export PGHOME=/opt/pgsql

export PATH=.:$PATH:$PGHOME/bin:$PGDATA/bin

source .bashrc

1.3.8改配置允许远程连接访问

cd /opt/pgdata

vim postgresql.conf

将 #listen_addresses = 'localhost' 的注释去掉并改为 listen_addresses = '*'

vim pg_hba.conf

在文件末尾添加: host all all 0.0.0.0/0 md5,表示允许任何IP连接

1.3.9启动postgres

pg_ctl start

1.3.10配置系统服务[可选]

cp /opt/postgres/postgresql-9.6.2/contrib/start-scripts/linux /etc/init.d/postgresql

vim /etc/init.d/postgresql

#! /bin/sh

# Installation prefix

prefix=/opt/pgsql

# Data directory

PGDATA="/opt/pgdata"

# Who to run the postmaster as, usually "postgres".  (NOT "root")

PGUSER=postgres

# Where to keep a log file

PGLOG="$PGDATA/serverlog"

# The path that is to be used for the script

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

DAEMON="$prefix/bin/postmaster"

# What to use to shut down the postmaster

PGCTL="$prefix/bin/pg_ctl"

 

set -e

# Only start if we can find the postmaster.

test -x $DAEMON ||

{

echo "$DAEMON not found"

if [ "$1" = "stop" ]

then exit 0

else exit 5

fi

}

 

# If we want to tell child processes to adjust their OOM scores, set up the

# necessary environment variables.  Can't just export them through the "su".

if [ -e "$PG_OOM_ADJUST_FILE" -a -n "$PG_CHILD_OOM_SCORE_ADJ" ]

then

DAEMON_ENV="PG_OOM_ADJUST_FILE=$PG_OOM_ADJUST_FILE PG_OOM_ADJUST_VALUE=$PG_CHILD_OOM_SCORE_ADJ"

fi

 

# Parse command line parameters.

case $1 in

start)

echo -n "Starting PostgreSQL: "

test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE"

su - $PGUSER -c "$DAEMON_ENV $DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1

echo "ok"

;;

stop)

echo -n "Stopping PostgreSQL: "

su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast"

echo "ok"

;;

restart)

echo -n "Restarting PostgreSQL: "

su - $PGUSER -c "$PGCTL stop -D '$PGDATA' -s -m fast -w"

test -e "$PG_OOM_ADJUST_FILE" && echo "$PG_MASTER_OOM_SCORE_ADJ" > "$PG_OOM_ADJUST_FILE"

su - $PGUSER -c "$DAEMON_ENV $DAEMON -D '$PGDATA' &" >>$PGLOG 2>&1

echo "ok"

;;

reload)

echo -n "Reload PostgreSQL: "

su - $PGUSER -c "$PGCTL reload -D '$PGDATA' -s"

echo "ok"

;;

status)

su - $PGUSER -c "$PGCTL status -D '$PGDATA'"

;;

*)

# Print help

echo "Usage: $0 {start|stop|restart|reload|status}" 1>&2

exit 1

;;

esac

 

exit 0

chmod +x /etc/init.d/postgresql

service postgresql start

1.3.11登录数据库进行配置

psql

创建用户"folio_admin"并设置密码:

postgres=# create role folio_admin with password 'calis123'login;

创建数据库folio_db,所有者为folio_admin:

postgres=# create database folio_db owner folio_admin;

将folio_db数据库的所有权限赋予folio_admin,否则folio_admin只能登录psql,没有任何数据库操作权限:

postgres=#grant all privileges on database folio_db to folio_admin;

===================================================================

创建okapi运行需要的数据库以及账号信息

创建用户"okapi"并设置密码:

postgres=# create role okapi with password 'okapi25'login;

创建数据库okapi,所有者为okapi:

postgres=# create database okapi owner okapi;

将okapi数据库的所有权限赋予okapi,否则okapi只能登录psql,没有任何数据库操作权限:

postgres=#grant all privileges on database okapi to okapi;

1.3.12扩展函数和okapi库

支持“不区分重音”的排序规则

如何无法再/opt/postgresql-9.6.11/contrib/unaccent下执行make&&make install 就先

yum install  https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-redhat-repo-42.0-11.noarch.rpm

安装postgrrsql的源

然后安装插件依赖

安装PostgreSQL拓展包(可选)

yum install postgresql96-devel.x86_64

安装PostgreSQL的附加模块(可选)

yum install postgresql96-contrib.x86_64

然后应该就可以实现再contrib/unaccent下执行make && make install

然后就可以再终端执行如下方法扩展函数

CREATE EXTENSION unaccent;

create extension "pgcrypto"; 

select digest('aa','sha1');

SELECT gen_random_uuid();

首先创建两个数据库分别为,okapi,folio_db.并分配权限。

create user okapi with password 'okapi25';

create user folio_admin with password 'calis123';

create database okapi owner okapi;

create database folio_db owner folio_admin;

grant all privileges on database okapi to okapi;

grant all privileges on database folio_db to folio_admin;

alter role okapi superuser;

alter role okapi createrole;

alter role okapi createdb;

alter role folio_admin superuser;

alter role folio_admin createrole;

alter role folio_admin createdb;


扩展okapi库

CREATE EXTENSION IF NOT EXISTS pgcrypto WITH SCHEMA public;

CREATE EXTENSION IF NOT EXISTS unaccent WITH SCHEMA public;

CREATE EXTENSION IF NOT EXISTS pg_trgm WITH SCHEMA public;

1.3.13使用图形化工具

下载Navicat Premium工具尝试连接,让操作更便捷

CentOS7.2部署postgresql9.6_第1张图片 

注:如果无法连接,把防火墙端口放开

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

firewall-cmd --reload

 CentOS7.2部署postgresql9.6_第2张图片

1.4postgres常用命令

1.4.1登录

psql -U pname -d database  // pname 表示postgres的登录用户名,database 则表示要访问的数据库

1.4.2查看所有的数据库

\l

1.4.3查看所有的表(这里的红色部分根据你要查看的数据库的名字来改变)

\d database /

1.4.4查看表的结构(这里的红色部分根据你要查看的表的名字来改变)

\d tablename/

1.4.5切换数据库

\c database

1.4.6退出登录

\q

1.4.7创建database

CREATE DATEBASE database_name;

1.4.8创建schema

CREATE SCHEMA schema_name;

1.4.9查看数据库下面所有的schema

select * from information_schema.schemata;

1.4.10查看一个schema下面所有的表

select * from information_schema.tables where table_schema = 'schema_name';

1.4.11创建角色

CREATE ROLE role_name [...];

[...]为可多选角色属性参数,参数可分别为:

登陆(login):具有login属性的角色可以连接数据库,一个带有login属性的角色可以等同于“数据库用户”,因为数据库用户创建的时候默认自带login属性.

超级用户(superuser):超级用户拥有至高无上的权限,但是这个权限分配的时候,一定要小心,想要创建超级用户,必须使用带超级用户的角色去创建带“超级用户”的角色 .

创建数据库(createdb):创建数据库属性,顾名思义就是拥有“创建数据库”属性的角色可以创建数据库,对于超级用户的角色来说,自身可以创建数据库,不用带“创建数据库”属性 .

创建角色(createrole):带有“创建角色”属性的角色可以创建其他角色。一般带有“创建角色”属性的角色还可以删除和更改其他角色(删除和更改只限于普通用户)

口令(password):只有在客户认证方法要求与数据库建立连接必须使用口令的时候, 口令才比较重要.

在创建好角色后,如果需要修改的话,可以使用alter role语句修改

 

1.4.12权限设置

将名字为schema_name的schema的所有权限给予role_name角色;

grant all on schema schema_name to role_name;

将名字为schema_name的schema下面所有的表的操作权限给予role_name角色;

grant all on all tables in schema schema_name to role_name;

 

如果你不准备将所有的权限都给予role_name角色,可以给予部分的权限,每个权限值之间以逗号分隔,而权限的明细如下:

 

SELECT:该权限用来查询表或是表上的某些列,或是视图,序列。

INSERT:该权限允许对表或是视图进行插入数据操作,也可以使用COPY FROM进行数据的插入。

UPDATE:该权限允许对表或是或是表上特定的列或是视图进行更新操作。

DELETE:该权限允许对表或是视图进行删除数据的操作。

TRUNCATE:允许对表进行清空操作。

REFERENCES:允许给参照列和被参照列上创建外键约束。

TRIGGER:允许在表上创建触发器。

CREATE:对于数据库,允许在数据库上创建Schema;对于Schema,允许对Schema上创建数据库对象;对于表空间,允许把表或是索引指定到对应的表空间上(在Oracle中,我们是用quota子句或是unlimited tablespace权限来控制)。该权限与Oracle上的CREATE类权限完全不同了。

CONNECT:允许用户连接到指定的数据库上。

TEMPORARY或是TEMP:允许在指定数据库的时候创建临时表。

EXECUTE:允许执行某个函数。

USAGE:对于程序语言来说,允许使用指定的程序语言创建函数;对于Schema来说,允许查找该Schema下的对象;对于序列来说,允许使用currval和nextval函数;对于外部封装器来说,允许使用外部封装器来创建外部服务器;对于外部服务器来说,允许创建外部表。

ALL PRIVILEGES:表示一次性给予可以授予的权限。