Try   HackMD

PostgreSQL資料庫

關於

簡介

PostgreSQL自1982年開始已開發超過18年,。該專案最初開始於在加利福尼亞大學伯克利分校的Ingres計劃;在系統可靠性、資料完整性和正確性獲得極佳評價;在類似BSD授權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.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,裡面有idtitleformattedTrafficrelatedQueriesimagearticlesshareUrldate欄位

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

參考

問題排除

ㄧ、在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 startAccess is denied.」錯誤訊息,那可能是-I參數後面指定的log檔案路徑有權限問題,把它改到其他地方即可,如範例中的:`c:\User{name}\logfile