# PostgreSQL資料庫 ## 關於 #### 簡介 PostgreSQL自1982年開始已開發超過18年,。該專案最初開始於在加利福尼亞大學伯克利分校的Ingres計劃;在系統可靠性、資料完整性和正確性獲得極佳評價;在類似[BSD授權](https://zh.wikipedia.org/wiki/BSD授權)與[MIT授權](https://zh.wikipedia.org/wiki/MIT授權)的PostgreSQL授權下發行,可用於商業行為上。 支援在非常多作業系統上執行,如:Linux、UNIX家族-AIX, BSD, HP-UX, SGI IRIX, Mac OS X, Solaris 與 Tru64和 Windows。 完全符合ISO ACID註,全面支援 Foreign Keys、Joins, Views、Triggers和Stored Procedures(多種程式語言)。 文字方面同時支援國際字元集、多位元組字元編碼。 支援的資料型態有Integer、Numberic、Boolean、Char、Varchar、DAT、, Interval與 Timestamp,也支援儲存二進位(binary)大型檔案,如 圖片、聲音或視訊。原生程式語言支援包含 C/C++、Java、Perl , Python, Ruby、.Net、TCL、ODBC等等,且文件非常完整ㄉ。 支援多種企業級資料庫系統的功能,如多版本並行控制(Multi-Version Concurrency Control), 時間點資料還原(Restore to point in time),表格空間(tablespaces)、非同步資料複製(Asynchronous Replication)、巢狀交易(儲存點)、不需關機的線上(熱)備份、複雜的查詢規劃器/優化、支援容錯能力的優先寫入日誌檔等等功能。 #### PostgreSQL 限制 | 限制 | 值 | | :--------------------------- | :------------------------------ | | 最大 Database Size | 無限制 | | 最大資料庫數量 | 4,294,950,911 | | 每個資料庫的最大Table數量 | 1,431,650,303 | | 最大 Table Size | 32 TB (Block size: 8192 bytes) | | 每個Table最多 Columns | 1600 | | 最大 Row 大小 | 1.6 TB | | 最大 Field 大小 | 1 GB | | 每個Table可儲存最大 Rows數量 | 無限制 | | 每個Table最大 indexes數量 | 無限制 | > 出處:https://www.postgresql.org/docs/12/limits.html #### ACID ISO/IEC 10026-1:1992 在處理資料變動上對資料庫系統(DBMS)定義了需要具備四個的能力,要求資料庫管理系統在寫入和變動資料的過程中,需要保證資料庫交易(transaction)的正確可靠,定義了需要符合的四個特性: - 不可分割性(Atomicity) - 資料一致性(Consistency) - 獨立性(Isolation) - 持久性(Durability) > [PostgreSQL版本功能對照表](https://www.postgresql.org/about/featurematrix/) #### 下載 ##### 下載位址:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads > 安裝後可過phAdmin或dbever等資料庫管理工具來操作PostgreSQL ## 實作 - pgAdmin > 備註: > > 進入phAdmin需要輸入在安裝PostgreSQL時設定的master密碼。 #### 連接伺服器(Create Server) Quick Links -> Add New Server 或 左方Browser -> Servers 點右鍵 -> Create -> Server > Name欄位:目前這個伺服器設定要顯示的名稱 > Host: 填入localhost (本機) > > #### 建立資料庫 左方Databases 點右鍵 -> Create -> Database #### 新增Tablse 資料庫內存放資料的地方稱為Table,必須再建立Table才能開始存放資料,建立方式可以透過pgAdmin介面或是直接下SQL語法: ##### 透過phAdmin 4 UI 左邊Browsers -> Servers -> Databases -> {資料庫名稱} -> Schemas -> public -> Tables上點右鍵 -> Create -> Table ##### 直接下SQL語法 在{資料庫名稱}上點右鍵後選擇「Query Tool」,然後使用`CREATE TABLE`指令,語法如下: ``` CREATE TABLE table_name ( column_name1 data_type, column_name2 data_type, column_name3 data_type, ··· ); ``` 例如要建立一個叫「google_trend」的Table,裡面有`id`、`title`、`formattedTraffic`、`relatedQueries`、`image`、`articles`、`shareUrl`和`date`欄位 ``` CREATE TABLE google_trend ( id serial PRIMARY KEY, title varchar(32), formattedTraffic varchar(32), relatedQueries text, imageUrl varchar(1024), articles text, shareUrl varchar(1024), fetch_date int ); ``` > 參考: > > PostgreSQL資料型別:https://docs.postgresql.tw/the-sql-language/data-types ## 參考 - [[PostgreSQL 台灣使用者社群](https://postgresql.tw/)] - [官方教學文件](https://docs.postgresql.tw/tutorial) ## 問題排除 #### ㄧ、在Windows 7 專業版 64位元安裝時出現:「Problem running post-install step.」錯誤。 ##### 解決方式: 其實在此時,PostgreSQL 已經安裝完畢了,但沒有伺服器實體 (instance) 在運作。 ###### Step 1: 以「系統管理員身分」執行"「命令提示字元」 ###### Step 2: ```cd "C:\Program Files\PostgreSQL\10\bin"``` ###### Step 3: 初始化伺服器實體 ``` initdb -D c:\Users\Arthur\pgdata -U postgres -W -E UTF8 -A scram-sha-256 ``` ###### Step 4: 啟動伺服器 ``` C:\Program Files\PostgreSQL\13\bin> pg_ctl -D c:\Users\{name}\pgdata -I c:\Users\{name}\logfile start ``` > 提示: > 如果你看到了「waiting for server to start....Access is denied.」錯誤訊息,那可能是`-I`參數後面指定的log檔案路徑有權限問題,把它改到其他地方即可,如範例中的:`c:\User\{name}\logfile