CentOS7.2部署postgresql9.6

1基礎信息

1.1基礎設施

數據庫服務器推薦配置python

CPU 雙核2.5GHz,內存 32G以上linux

數據庫服務器操做系統c++

CentOS Linux release 7.2.1511 (Core)sql

數據庫服務器版本數據庫

Postgresql9.6vim

1.2 PostgreSQL簡介

1.2.1 Postmistress是什麼

PostgreSQL 是一個免費的對象-關係數據庫服務器(ORDBMS),在靈活的BSD許可證下發行。api

PostgreSQL 開發者把它念做 post-gress-Q-L。數組

PostgreSQL 的 Slogan 是 "世界上最早進的開源關係型數據庫"。安全

1.2.2 ORDBMS 術語

在咱們開始學習 PostgreSQL 數據庫前,讓咱們先了解下 ORDBMS 的一些術語:bash

數據庫: 數據庫是一些關聯表的集合。

數據表: 表是數據的矩陣。在一個數據庫中的表看起來像一個簡單的電子表格。

: 一列(數據元素) 包含了相同的數據, 例如郵政編碼的數據。

行:一行(=元組,或記錄)是一組相關的數據,例如一條用戶訂閱的數據。

冗餘:存儲兩倍數據,冗餘下降了性能,但提升了數據的安全性。

主鍵:主鍵是惟一的。一個數據表中只能包含一個主鍵。你可使用主鍵來查詢數據。

外鍵:外鍵用於關聯兩個表。

複合鍵:複合鍵(組合鍵)將多個列做爲一個索引鍵,通常用於複合索引。

索引:使用索引可快速訪問數據庫表中的特定信息。索引是對數據庫表中一列或多列的值進行排序的一種結構。相似於書籍的目錄。

參照完整性: 參照的完整性要求關係中不容許引用不存在的實體。與實體完整性是關係模型必須知足的完整性約束條件,目的是保證數據的一致性。

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.三、安裝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工具嘗試鏈接,讓操做更便捷

`UR`Z8I)ZJ9W~{}FQ62`[[S.png  

注:若是沒法鏈接,把防火牆端口放開

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

firewall-cmd --reload

 LSR]IJ8)N{[R13(7_CK53BI.png

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:表示一次性給予能夠授予的權限。

相關文章
相關標籤/搜索