PostgresSQL數據庫安裝及操作


PostgreSQL介紹

PostgreSQL是一個功能強大的開源對象關系數據庫管理系統(ORDBMS)。 用於安全地存儲數據; 支持最佳做法,並允許在處理請求時檢索它們。

PostgreSQL(也稱為Post-gress-Q-L)由PostgreSQL全球開發集團(全球志願者團隊)開發。 它不受任何公司或其他私人實體控制。 它是開源的,其源代碼是免費提供的。

PostgreSQL是跨平台的,可以在許多操作系統上運行,如Linux,FreeBSD,OS X,Solaris和Microsoft Windows等。

PostgreSQL的官方網站是:https://www.postgresql.org/ 

PostgreSQL的特點

PostgreSQL的特點如下 -

  • PostgreSQL可在所有主要操作系統(即Linux,UNIX(AIX,BSD,HP-UX,SGI IRIX,Mac OS X,Solaris,Tru64)和Windows等)上運行。
  • PostgreSQL支持文本,圖像,聲音和視頻,並包括用於C/C++,Java,Perl,Python,Ruby,Tcl和開放數據庫連接(ODBC)的編程接口。
  • PostgreSQL支持SQL的許多功能,例如復雜SQL查詢,SQL子選擇,外鍵,觸發器,視圖,事務,多進程並發控制(MVCC),流式復制(9.0),熱備(9.0))。
  • 在PostgreSQL中,表可以設置為從“父”表繼承其特征。
  • 可以安裝多個擴展以向PostgreSQL添加附加功能。

PostgreSQL工具

有一些開放源碼以及付費工具可用作PostgreSQL的前端工具。 這里列出幾個被廣泛使用的工具:

1. psql:

它是一個命令行工具,也是管理PostgreSQL的主要工具。 pgAdmin是PostgreSQL的免費開源圖形用戶界面管理工具。

2. phpPgAdmin:

它是用PHP編寫的PostgreSQL的基於Web的管理工具。 它基於phpMyAdmin工具管理MySQL功能來開發。它可以用作PostgreSQL的前端工具。

3. pgFouine:

它是一個日志分析器,可以從PostgreSQL日志文件創建報告。 專有工具有 -
Lightning Admin for PostgreSQL, Borland Kylix, DBOne, DBTools Manager PgManager, Rekall, Data Architect, SyBase Power Designer, Microsoft Access, eRWin, DeZign for Databases, PGExplorer, Case Studio 2, pgEdit, RazorSQL, MicroOLAP Database Designer, Aqua Data Studio, Tuples, EMS Database Management Tools for PostgreSQL, Navicat, SQL Maestro Group products for PostgreSQL, Datanamic DataDiff for PostgreSQL, Datanamic SchemaDiff for PostgreSQL, DB MultiRun PostgreSQL Edition, SQLPro, SQL Image Viewer, SQL Data Sets 等等。

PostgreSQL安裝(Linux)

首先,安裝PostgreSQL客戶端。

sudo apt-get install postgresql-client

然后,安裝PostgreSQL服務器。

sudo apt-get install postgresql

正常情況下,安裝完成后,PostgreSQL服務器會自動在本機的5432端口開啟。

如果還想安裝圖形管理界面,可以運行下面命令,但是本文不涉及這方面內容。

sudo apt-get install pgadmin3

添加新用戶和新數據庫

初次安裝后,默認生成一個名為postgres的數據庫和一個名為postgres的數據庫用戶。這里需要注意的是,同時還生成了一個名為postgres的Linux系統用戶。

下面,我們使用postgres用戶,來生成其他用戶和新數據庫。好幾種方法可以達到這個目的,這里介紹兩種。

第一種方法,使用PostgreSQL控制台。

首先,新建一個Linux新用戶,可以取你想要的名字,這里為dbuser。

sudo adduser dbuser
然后,切換到postgres用戶。

sudo su - postgres
下一步,使用psql命令登錄PostgreSQL控制台。

psql
這時相當於系統用戶postgres以同名數據庫用戶的身份,登錄數據庫,這是不用輸入密碼的。如果一切正常,系統提示符會變為"postgres=#",表示這時已經進入了數據庫控制台。以下的命令都在控制台內完成。

第一件事是使用password命令,為postgres用戶設置一個密碼。

password postgres
第二件事是創建數據庫用戶dbuser(剛才創建的是Linux系統用戶),並設置密碼。

CREATE USER dbuser WITH PASSWORD ';password';;
第三件事是創建用戶數據庫,這里為exampledb,並指定所有者為dbuser。

CREATE DATABASE exampledb OWNER dbuser;
第四件事是將exampledb數據庫的所有權限都賦予dbuser,否則dbuser只能登錄控制台,沒有任何數據庫操作權限。

GRANT ALL PRIVILEGES ON DATABASE exampledb to dbuser;
最后,使用q命令退出控制台(也可以直接按ctrl+D)。

q
第二種方法,使用shell命令行。

添加新用戶和新數據庫,除了在PostgreSQL控制台內,還可以在shell命令行下完成。這是因為PostgreSQL提供了命令行程序createuser和createdb。還是以新建用戶dbuser和數據庫exampledb為例。

首先,創建數據庫用戶dbuser,並指定其為超級用戶。

sudo -u postgres createuser --superuser dbuser
然后,登錄數據庫控制台,設置dbuser用戶的密碼,完成后退出控制台。

sudo -u postgres psql

password dbuser

q
接着,在shell命令行下,創建數據庫exampledb,並指定所有者為dbuser。

sudo -u postgres createdb -O dbuser exampledb

登錄數據庫

添加新用戶和新數據庫以后,就要以新用戶的名義登錄數據庫,這時使用的是psql命令。

psql -U dbuser -d exampledb -h 127.0.0.1 -p 5432
上面命令的參數含義如下:-U指定用戶,-d指定數據庫,-h指定服務器,-p指定端口。

輸入上面命令以后,系統會提示輸入dbuser用戶的密碼。輸入正確,就可以登錄控制台了。

psql命令存在簡寫形式。如果當前Linux系統用戶,同時也是PostgreSQL用戶,則可以省略用戶名(-U參數的部分)。舉例來說,我的Linux系統用戶名為ruanyf,且PostgreSQL數據庫存在同名用戶,則我以ruanyf身份登錄Linux系統后,可以直接使用下面的命令登錄數據庫,且不需要密碼。

psql exampledb
此時,如果PostgreSQL內部還存在與當前系統用戶同名的數據庫,則連數據庫名都可以省略。比如,假定存在一個叫做ruanyf的數據庫,則直接鍵入psql就可以登錄該數據庫。

psql
另外,如果要恢復外部數據,可以使用下面的命令。

psql exampledb < exampledb.sql

控制台命令

除了前面已經用到的password命令(設置密碼)和q命令(退出)以外,控制台還提供一系列其他命令。

h:查看SQL命令的解釋,比如h select。
?:查看psql命令列表。
l:列出所有數據庫。
c [database_name]:連接其他數據庫。
d:列出當前數據庫的所有表格。
d [table_name]:列出某一張表格的結構。
du:列出所有用戶。
e:打開文本編輯器。
conninfo:列出當前數據庫和連接的信息。

PostgreSQL安裝(Windows)

按照以下步驟在您的Windows系統上安裝PostgreSQL。在安裝時關閉第三方防毒軟件。
選擇您想要的PostgreSQL的版本號以及對應系統,並從這里下載並下載:http://www.enterprisedb.com/products-services-training/pgdownload#windows

由於我的系統是 Windows 10 64位,所以選擇以下對應的版本 -

  • PostgreSQL9.6.2
  • Windows x86-64

以管理員身份運行下載的Postgresql-9.6.2-windows.exe來安裝PostgreSQL。與安裝其它軟件一樣,沒有什么特別之處,選擇安裝目錄等下一步就好。

選擇要安裝的位置。 默認情況下,它安裝在程序文件夾(C:\Program File)中。

選擇一個目錄來存儲數據。 默認情況下,它存儲在PostgreSQL安裝目錄的data目錄下,這里使用默認的就行 -

設置將要求您輸入密碼,因此請您輸入密碼,這里我輸入的密碼是:123456

設置PostgreSQL服務器的端口,保持默認,點擊下一步 -

這一步將要求選擇“locale”,這里保持默認。然后開始安裝 -

安裝過程就緒。完成安裝過程需要一些時間。 完成安裝過程后,您將看到以下屏幕 -

取消選中復選框按鈕,然后單擊完成按鈕完成安裝。

創建數據庫

在PostgreSQL中,可以使用CREATE DATABASE命令創建數據庫。

語法:

CREATE DATABASE database_name;

這里,database_name是指定要創建的數據庫的名稱。

PostgreSQL使用UI創建數據庫

在您的系統中安裝PostgreSQL后,打開開始菜單,然后單擊pgAdmin。會得到一個這樣的頁面:

打開pgAdmin,第一次打開可能需要你輸入密碼,結果如下 -

右鍵單擊PostgreSQL 9.6並將PostgreSQL連接到本地主機服務器。

右鍵單擊數據庫(Databases),轉到新數據庫,將出現一個彈出框,如下圖所示 -

然后鍵入您要的數據庫名稱,這里創建的數據庫名稱是:yiibai_db,如下圖所示 -

點擊保存(Save)就可以了。
創建新的數據庫(yiibai_db)如下圖所示 -

PostgreSQL使用查詢工具創建數據庫

打開SQL Shell(psql),執行以下創建語句 -

create database testdb;

執行結果如下 -

查看數據庫 -

postgres=# \l
                                                        數據庫列表
   名稱    |  擁有者  | 字元編碼 |            校對規則            |             Ctype              |       存取權限
-----------+----------+----------+--------------------------------+--------------------------------+-----------------------
 postgres  | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |
 template0 | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | =c/postgres          +
           |          |          |                                |                                | postgres=CTc/postgres
 template1 | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | =c/postgres          +
           |          |          |                                |                                | postgres=CTc/postgres
 testdb    | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |
 yiibai_db | postgres | UTF8     | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |
(5 行記錄)


postgres=#

或者在 pgAdmin 的左側中查看,結果如下 -

 數據類型

數據類型指定要在表字段中存儲哪種類型的數據。 在創建表時,對於每列必須使用數據類型。

PotgreSQL中主要有三種類型的數據類型。 此外,用戶還可以使用CREATE TYPE SQL命令創建自己的自定義數據類型。

以下是PostgreSQL中主要有三種類型的數據類型:

  • 數值數據類型
  • 字符串數據類型
  • 日期/時間數據類型

數值數據類型

數字數據類型用於指定表中的數字數據。

名稱 描述 存儲大小 范圍
smallint 存儲整數,小范圍 2字節 -32768 至 +32767
integer 存儲整數。使用這個類型可存儲典型的整數 4字節 -2147483648 至 +2147483647
bigint 存儲整數,大范圍。 8字節 -9223372036854775808 至 9223372036854775807
decimal 用戶指定的精度,精確 變量 小數點前最多為131072個數字; 小數點后最多為16383個數字。
numeric 用戶指定的精度,精確 變量 小數點前最多為131072個數字; 小數點后最多為16383個數字。
real 可變精度,不精確 4字節 6位數字精度
double 可變精度,不精確 8字節 15位數字精度
serial 自動遞增整數 4字節 1 至 2147483647
bigserial 大的自動遞增整數 8字節 1 至 9223372036854775807

 

 

 

 

 

 

 

 

字符串數據類型

String數據類型用於表示字符串類型值。

數據類型 描述
char(size) 這里size是要存儲的字符數。固定長度字符串,右邊的空格填充到相等大小的字符。
character(size) 這里size是要存儲的字符數。 固定長度字符串。 右邊的空格填充到相等大小的字符。
varchar(size) 這里size是要存儲的字符數。 可變長度字符串。
character varying(size) 這里size是要存儲的字符數。 可變長度字符串。
text 可變長度字符串。

 

 

 

 

 

 

 

日期/時間數據類型

日期/時間數據類型用於表示使用日期和時間值的列。

名稱 描述 存儲大小 最小值 最大值 解析度
timestamp [ (p) ] [不帶時區 ] 日期和時間(無時區) 8字節 4713 bc 294276 ad 1微秒/14位數
timestamp [ (p) ]帶時區 包括日期和時間,帶時區 8字節 4713 bc 294276 ad  
date 日期(沒有時間) 4字節 4713 bc 5874897 ad 1微秒/14位數
time [ (p) ] [ 不帶時區 ] 時間(無日期) 8字節 00:00:00 24:00:00 1微秒/14位數
time [ (p) ] 帶時區 僅限時間,帶時區 12字節 00:00:00+1459 24:00:00-1459 1微秒/14位數
interval [ fields ] [ (p) ] 時間間隔 12字節 -178000000年 178000000年 1微秒/14位數

 

 

 

 

 

 

 

 

 

 

一些其他數據類型

布爾類型:

名稱 描述 存儲大小
boolean 它指定truefalse的狀態。 1字節

 

 

貨幣類型:

名稱 描述 存儲大小 范圍
money 貨幣金額 8字節 -92233720368547758.08 至 +92233720368547758.07

 

 

幾何類型:

幾何數據類型表示二維空間對象。最根本的類型: - 形成所有其他類型的基礎。

名稱 存儲大小 表示 描述
point 16字節 在一個平面上的點 (x,y)
line 32字節 無限線(未完全實現) ((x1,y1),(x2,y2))
lseg 32字節 有限線段 ((x1,y1),(x2,y2))
box 32字節 矩形框 ((x1,y1),(x2,y2))
path 16+16n字節 封閉路徑(類似於多邊形) ((x1,y1),…)
polygon 40+16n字節 多邊形(類似於封閉路徑) ((x1,y1),…)
circle 24字節 <(x,y),r>(中心點和半徑)

 

 

 

 

 

 

 

 

數據庫操作

基本的數據庫操作,就是使用一般的SQL語言。

# 創建新表

CREATE TABLE usertbl(name VARCHAR(20), signupdate DATE);
# 插入數據

INSERT INTO usertbl(name, signupdate) VALUES('張三', '2013-12-22');
# 選擇記錄
SELECT * FROM user_tbl;
# 更新數據
UPDATE user_tbl set name = '李四' WHERE name = '張三';
# 刪除記錄
DELETE FROM user_tbl WHERE name = '李四' ;
# 添加欄位
ALTER TABLE user_tbl ADD email VARCHAR(40);
# 更新結構
ALTER TABLE usertbl ALTER COLUMN signupdate SET NOT NULL;
# 更名欄位
ALTER TABLE usertbl RENAME COLUMN signupdate TO signup;
# 刪除欄位
ALTER TABLE user_tbl DROP COLUMN email;
# 表格更名 
ALTER TABLE usertbl RENAME TO backuptbl;
# 刪除表格
DROP TABLE IF EXISTS backup_tbl;

Python連接PostgreSQL數據庫

PostgreSQL可以使用psycopg2模塊與Python集成。sycopg2是用於Python編程語言的PostgreSQL數據庫適配器。 psycopg2是非常小,快速,穩定的。 

安裝psycopg2:

pip install psycopg2

要使用psycopg2模塊,必須首先創建一個表示數據庫的Connection對象,然后可以選擇創建可以幫助您執行所有SQL語句的游標對象。

連接到數據庫

以下Python代碼顯示了如何連接到現有的數據庫。 如果數據庫不存在,那么它將自動創建,最后將返回一個數據庫對象。

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")

print "Opened database successfully"

在這里指定使用testdb作為數據庫名稱,如果數據庫已成功打開連接,則會提供以下消息:

Open database successfully

創建表

以下Python程序將用於在先前創建的數據庫(testdb)中創建一個表:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")
print "Opened database successfully"

cur = conn.cursor()
cur.execute('''CREATE TABLE COMPANY
       (ID INT PRIMARY KEY     NOT NULL,
       NAME           TEXT    NOT NULL,
       AGE            INT     NOT NULL,
       ADDRESS        CHAR(50),
       SALARY         REAL);''')
print "Table created successfully"

conn.commit()
conn.close()

當執行上述程序時,它將在數據庫testdb中創建COMPANY表,並顯示以下消息:

Opened database successfully
Table created successfully

 

插入操作

以下Python程序顯示了如何在上述示例中創建的COMPANY表中創建記錄:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")
print "Opened database successfully"

cur = conn.cursor()

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (1, 'Paul', 32, 'California', 20000.00 )");

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (2, 'Allen', 25, 'Texas', 15000.00 )");

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (3, 'Teddy', 23, 'Norway', 20000.00 )");

cur.execute("INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) \
      VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 )");

conn.commit()
print "Records created successfully";
conn.close()

當執行上述程序時,它將在COMPANY表中創建/插入給定的記錄,並顯示以下兩行:

Opened database successfully
Records created successfully

SELECT操作

以下Python程序顯示了如何從上述示例中創建的COMPANY表中獲取和顯示記錄:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")
print "Opened database successfully"

cur = conn.cursor()

cur.execute("SELECT id, name, address, salary  from COMPANY")
rows = cur.fetchall()
for row in rows:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

執行上述程序時,會產生以下結果:

Opened database successfully
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  20000.0

ID =  2
NAME =  Allen
ADDRESS =  Texas
SALARY =  15000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

Operation done successfully

更新操作

以下Python代碼顯示了如何使用UPDATE語句來更新任何記錄,然后從COMPANY表中獲取並顯示更新的記錄:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")
print "Opened database successfully"

cur = conn.cursor()

cur.execute("UPDATE COMPANY set SALARY = 25000.00 where ID=1")
conn.commit
print "Total number of rows updated :", cur.rowcount

cur.execute("SELECT id, name, address, salary  from COMPANY")
rows = cur.fetchall()
for row in rows:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

執行上述程序時,會產生以下結果:

Opened database successfully
Total number of rows updated : 1
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  25000.0

ID =  2
NAME =  Allen
ADDRESS =  Texas
SALARY =  15000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

Operation done successfully

刪除操作

以下Python代碼顯示了如何使用DELETE語句來刪除記錄,然后從COMPANY表中獲取並顯示剩余的記錄:

#!/usr/bin/python

import psycopg2

conn = psycopg2.connect(database="testdb", user="postgres", password="pass123", host="127.0.0.1", port="5432")
print "Opened database successfully"

cur = conn.cursor()

cur.execute("DELETE from COMPANY where ID=2;")
conn.commit
print "Total number of rows deleted :", cur.rowcount

cur.execute("SELECT id, name, address, salary  from COMPANY")
rows = cur.fetchall()
for row in rows:
   print "ID = ", row[0]
   print "NAME = ", row[1]
   print "ADDRESS = ", row[2]
   print "SALARY = ", row[3], "\n"

print "Operation done successfully";
conn.close()

執行上述程序時,會產生以下結果:

Opened database successfully
Total number of rows deleted : 1
ID =  1
NAME =  Paul
ADDRESS =  California
SALARY =  20000.0

ID =  3
NAME =  Teddy
ADDRESS =  Norway
SALARY =  20000.0

ID =  4
NAME =  Mark
ADDRESS =  Rich-Mond
SALARY =  65000.0

Operation done successfully

本文參考https://www.yiibai.com/postgresql/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM