介紹
PostgreSQL是一個功能強大的開源數據庫系統。經過長達15年以上的積極開發和不斷改進,PostgreSQL已在可靠性、穩定性、數據一致性等獲得了業內極高的聲譽。目前PostgreSQL可以運行在所有主流操作系統上,包括Linux、Unix(AIX、BSD、HP-UX、SGI IRIX、Mac OS X、Solaris和Tru64)和Windows。PostgreSQL是完全的事務安全性數據庫,完整地支持外鍵、聯合、視圖、觸發器和存儲過程(並支持多種語言開發存儲過程)。它支持了大多數的SQL:2008標准的數據類型,包括整型、數值值、布爾型、字節型、字符型、日期型、時間間隔型和時間型,它也支持存儲二進制的大對像,包括圖片、聲音和視頻。PostgreSQL對很多高級開發語言有原生的編程接口,如C/C++、Java、.Net、Perl、Python、Ruby、Tcl 和ODBC以及其他語言等,也包含各種文檔。
作為一種企業級數據庫,PostgreSQL以它所具有的各種高級功能而自豪,像多版本並發控制(MVCC)、按時間點恢復(PITR)、表空間、異步復制、嵌套事務、在線熱備、復雜查詢的規划和優化以及為容錯而進行的預寫日志等。它支持國際字符集、多字節編碼並支持使用當地語言進行排序、大小寫處理和格式化等操作。它也在所能管理的大數據量和所允許的大用戶量並發訪問時間具有完全的高伸縮性。目前已有很多PostgreSQL的系統在實際生產環境下管理着超過4TB的數據。一些PostgreSQL系統的極限值如下表所列:
極限值: | |
---|---|
最大單個數據庫大小 | 不限 |
最大數據單表大小 | 32 TB |
單條記錄最大 | 1.6 TB |
單字段最大允許 | 1 GB |
單表允許最大記錄數 | 不限 |
單表最大字段數 | 250 - 1600 (取決於字段類型) |
單表最大索引數 | 不限 |
由於PostgreSQL的優異性能,它已贏得最終用戶和業內的多次大獎,包括Linux新媒體(Linux New Media)的最佳數據庫獎和5次Linux期刊編輯選出的最佳數據庫獎。 |
眾多功能和標准兼容性
PostgreSQL對SQL標准高度兼容,它實現的功能完全遵守於ANSI-SQL:2008標准。目前完全支持子查詢(包括在FROM中的子查詢)、授權讀取和可序列化的事務隔離級別。同時PostgreSQL也具有完整的關系數據庫系統的目錄功能,它支持單數據庫的多模式功能,每一個目錄可通過SQL標准中定義的字典信息模式進行訪問。
Data集成性功能包括(復合)主鍵、含有嚴格約束或級聯更新和刪除功能的外鍵、錄入檢查約束、唯一性約束和非空約束。
PostgreSQL也具有很多擴展模塊和更高級的功能。其中有為方便使用的通過序列實現的自增字段、 允許返回部分記錄集的LIMIT/OFFSET選項,也支持復合、唯一、部分和函數式索引,索引並支持B-Tree、R-Tree、Hash或GiST存儲方式。
GiST (通用搜索樹) 索引是一種高級系統算法,它將不同的排序算法與包含B-Tree、B+-Tree、R-Tree、部分匯總樹、可加權的B+-Tree以及其他多種搜索邏輯結合在一起,它也提供了接口允許創建用戶數據類型和擴展的查詢方法。這樣,GiST提供了用戶指定存儲和定義新方法進行查詢的靈活性---它大大超越了標准B-Tree、R-Tree和其他通用搜索邏輯所能提供的功能。
GiST現在也成為很多其他使用PostgreSQL公共項目的基礎,如OpenFTS和PostGIS項目。 OpenFTS(開源全文搜索引擎)項目提供在線索引和數據庫搜索的相當權重評分。 PostGIS項目給PostgreSQL增加了地理信息管理功能,允許用戶將PostgreSQL作為GIS空間地理信息數據庫使用,這和專業的ESRI公司的SDE系統以及Oracle的空間地理擴展模塊功能相同。
其他高級功能包括表繼承、規則和數據庫事件響應功能等。表繼承功能可以按原來的一個表創建一個有關系的新表,這樣允許數據庫設計人員可以將一個表作為基表,從基表派生出新表。並且PostgreSQL甚至可以使用此方式實現單級或多級的繼承。
規則功能是用來調用查詢的重算功能,允許數據庫設計人員根據不同的表或視圖來創建規則,以實現動態改變數據庫原操作為新的操作的功能。
事件響應功能是一個內部通訊功能,它將系統信息或事件在用戶使用的LISTEN和NOTIFY兩條指令后進行傳遞,允許 簡要的點對點通訊或是對指定數據庫事件的定點通訊。由於信息可以從觸發器或是存儲過程中發出,PostgreSQL的用戶可以監控類似更新、新增或是刪除的數據庫事件。
高度可定制性
PostgreSQL的存儲過程開發可以使用眾多的程序語言,包括Java、Perl、Python、Ruby、Tcl、C/C++和自帶的PL/pgSQL,其中的PL/pgSQL與Oracle的PL/SQL很相似,內置了數百個函數,功能從基本的算術計算和字符串處理到加密邏輯計算並與Oracle有高度兼容性。觸發器和存儲過程可以使用C語言開發並可以作為內部庫文件加載至數據庫內部,開發上的巨大靈活性擴展了數據庫能力。相應地,PostgreSQL也包括一套框架允許開發人員定義和創建他們自己的可在函數中使用數據類型,也可以定義操作符新的處理方式,具有了這樣的能力后,PostgreSQL現已具有了各種高級數據類型,包括幾何圖形、空間地理、網絡地址甚至於ISBN/ISSN(國際標准書號/國際標准序列號),這些都可以加入至系統中。
由於有很多的存儲過程語言可以使用,這樣也產生了很多的庫接口,這樣允許各種編譯型或是解釋型的語言在PostgreSQL進行使用,包括Java(JDBC)、ODBC、Perl、Python、Ruby、C、C++、PHP、Lisp、Scheme和Qt等。
最重要的一點,PostgreSQL的源代碼可以自由獲取,它的授權是在非常自由的開源授權下,這種授權允許用戶在各種開源或是閉源項目中使用、修改和發布PostgreSQL的源代碼。用戶對源代碼的可以按用戶意願進行任何修改、改進。因此,PostgreSQL不僅是一個強大的企業級數據庫系統,也是一個用戶可以開發私用、網絡和商業軟件產品的數據庫開發平台。
下載yum源
地址: https://yum.postgresql.org/repopackages.php
安裝yum源
yum install pgdg-centos10-10-2.noarch.rpm
查看可安裝包
yum list postgres*
安裝數據庫
yum install postgresql10-server.x86_64
初始化
首先找到安裝好的服務,並不是postgres,查看
[root@d2-test-2 init.d]# ls /etc/init.d/ | grep post
postfix
postgresql-10
udev-post
初始化db
service postgresql-10 initdb
啟動
service postgresql-10 start
查看狀態
service postgresql status
重啟
service postgresql restart
連接
默認root並不能連接,需要切換為用戶postgres
$ sudo su - postgres
-bash-4.1$ psql
psql (8.4.20)
Type "help" for help.
postgres=#
幾個簡單命令
(1)列出所有的數據庫
mysql: show databases
psql: \l或\list
(2)切換數據庫
mysql: use dbname
psql: \c dbname
(3)列出當前數據庫下的數據表
mysql: show tables
psql: \d
(4)列出指定表的所有字段
mysql: show columns from table name
psql: \d tablename
(5)查看指定表的基本情況
mysql: describe tablename
psql: \d+ tablename
(6)退出登錄
mysql: quit 或者\q
psql:\q
(7)查看pgsl版本
pg_ctl --version
(8)命令行登陸數據庫
psql -h 192.168.2.125 -p 5432 <dbname> <username>
(9)修改密碼
psql登陸
然后, \password postgres
安裝后的配置
數據庫默認安裝為:/var/lib/pgsql/10/data
修改監聽IP和端口
進入data目錄之后,編輯postgresql.conf
修改為*表示允許所有
#listen_addresses = '*' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost', '*' = all
# (change requires restart)
#port = 5432 # (change requires restart)
重啟
service postgresql-10 restart
修改連接權限
默認只有本地用戶可以訪問,所以除了修改ip還要修改權限。
修改pg_hba.conf
# TYPE DATABASE USER CIDR-ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 192.168.1.0/24 md5
# IPv6 local connections:
host all all ::1/128 trust
重點是
host all all 192.168.1.0/24 md5
表示允許網段192.168.1.0上的所有主機使用所有合法的數據庫用戶名訪問數據庫,並提供加密的密碼驗證。
其中,24是子網掩碼,表示允許192.168.1.0--192.168.1.255的主機訪問。