post-gres-q-lmysql
一個操做系統中能夠啓動多個postgres服務。
每一個服務由多個進程組成,爲首的進程名爲postmaster。
每一個服務要佔用一個端口,多個服務不能共享端口。
每一個服務都有一個data目錄用於存放數據,目錄不容許修改,不然會破壞數據庫,而且沒法修復。
服務使用4字節長的內部事務標識符,即時發生重疊後仍然繼續使用,這會致使問題,因此須要按期進行VACUUM操做。sql
一個服務中能夠擁有多個數據庫。
數據庫默認是任何用戶可鏈接的,建立好後須要修改相應的權限。
數據庫之間的數據是隔離的,不能進行聯表。
數據庫默認的數據塊大小爲8192。shell
一個數據庫中能夠有多個模式,模式至關於表的命名空間,相似於mysql中的database,可使用帶模式的完整名稱來訪問或者建立對象。
不一樣模式之間的表是能夠聯表查詢的。
能夠經過對用戶設置search_path參數來指定默認搜索的模式。數據庫
一個模式中能夠有多張表。
表是由多個關係元素組成的,大字段數據放在另外一個名爲TOAST的表中,每張表都有一個TOAST表和TOAST索引。
用雙引號括起來的表和沒用雙引號括起來的表是不同的,即便名字同樣。
雙引號括起來的表區分大小寫,沒用雙引號括起來的表不區分大小寫。緩存
每張表都由許多列組成,每一列有一個列名、類型、默認值等屬性,用來存儲每一條記錄中的各類值。
文本類型統一由一種數據類型存儲,支持長度從1B到1G,通過優化,存儲少的時候很高效,存儲多的時候會自動管理和壓縮。
自增類型serial本質上就是整數,經過建立並關聯到一個SEQUENCE類型的對象來記錄自增值。安全
默認狀況下,全部的數據都會放在postgres指定的data目錄下,經過定義表空間,可讓postgres將數據存放在不一樣的設備上。
表空間是經過軟連接來實現的。
建議爲每一個數據庫設立一個單獨的表空間,尤爲是不一樣數據庫中有同名的模式或者表的時候。
postgres=# CREATE TABLESPACE tbs LOCATION '/usr/local/tbs';服務器
視圖本質上是預約義好的一個sql查詢,以一張表的形式給出,在每次調用時都會執行相應的sql查詢。
postgres=# CREATE VIEW view AS SELECT * FROM tb;架構
當視圖足夠簡單的時候,postgres是支持視圖更新的,相應的更新會傳遞到相應的表中。
還可使用INSTEAD OF觸發器或者規則來實現視圖更新,請參考具體的操做手冊。
物化視圖能夠預先將數據查詢出來,這樣調用的時候就沒必要反覆查詢了,更新須要手動更新。
postgres=# CREATE MATERIALIZED VIEW view AS SELECT * FROM tb;
postgres=# REFRESH MATERIALIZED VIEW view;編輯器
行即表中的一條數據。
postgres中每一個行都有一個行版本,並且還有兩個系統列xmin和xmax,分別標示這個行被建立和刪除的事務。
刪除時,設置xmax爲刪除事務號,不會實際執行刪除。
UPDATE操做被認爲是緊跟INSERT操做後的DELETE操做。
索引(index)
索引能夠用來給表添加約束或者提升查詢速度。
在涉及高比例插入刪除的表中,會形成索引膨脹,這時候能夠重建索引。函數
reindexdb
建立CONCURRENTLY索引時不會持有全表鎖,這條指令分紅兩個步驟,第一部分建立索引並標記爲不可用,這時候INSERT、UPDATE、DELETE操做已經開始維護索引了,可是查詢不能使用索引。創建完畢後纔會被標記爲可用。
postgres=# CREATE CONCURRENTLY INDEX index ON tb(id);
能夠手工設置索引的可用性。
UPDATE pg_index SET indisvalid = false WHERE indexrelid = index::regclass;
表空間是物理結構,同一表空間下能夠有多個數據庫
數據庫是邏輯結構,是表/索引/視圖/存儲過程的集合,一個數據庫下能夠有多個schema
模式是邏輯結構,是對數據庫的邏輯劃分
# vist https://www.postgresql.org/download/ # Interactive installer by EnterpriseDB -> 選擇10.5版本的Windows x86-64下載 1. 一路的next安裝,固然你能夠本身選擇安裝的目錄 2. 提示輸入postgres賬號的密碼,你能夠根據本身的喜愛,設置一個,好比這裏我設置了:123456 2. 提示安裝插件擴展,取消便可,暫時不須要安裝
# $MY_POSTGRES_PATH = D:\PostgreSQL; 這個環境參數表明我安裝的Postgresql服務器所在的目錄 # $MY_POSTGRES_PATH/bin/psql -U postgres $MY_POSTGRES_PATH/bin/scripts/runpsql # 依次默認回車,若是有須要調整參數,你能夠自定義 # 輸入123456 #output Server [localhost]: Database [postgres]: Port [5432]: Username [postgres]: 用戶 postgres 的口令: psql (10.5) 輸入 "help" 來獲取幫助信息. postgres=# # 輸入help獲得如下提示 postgres=# help 您正在使用psql, 這是一種用於訪問PostgreSQL的命令行界面 鍵入: \copyright 顯示發行條款 \h 顯示 SQL 命令的說明 \? 顯示 pgsql 命令的說明 \g 或者以分號(;)結尾以執行查詢 \q 退出 postgres=# # \l 查看已存在的數據庫 postgres-# \l 數據庫列表 名稱 | 擁有者 | 字元編碼 | 校對規則 | Ctype | 存取權限 -----------+----------+----------+-----------------------------------------------------+-----------------------------------------------------+----------------------- postgres | postgres | UTF8 | Chinese (Simplified)_People's Republic of China.936 | Chinese (Simplified)_People's Republic of China.936 | template0 | postgres | UTF8 | Chinese (Simplified)_People's Republic of China.936 | Chinese (Simplified)_People's Republic of China.936 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | Chinese (Simplified)_People's Republic of China.936 | Chinese (Simplified)_People's Republic of China.936 | =c/postgres + | | | | | postgres=CTc/postgres (3 行記錄) # 咱們能夠發現默認存在postgres、template0和template1數據庫,template`X`是模板數據庫 # template1爲可修改模版庫,template0爲不可修改模版庫
postgres=# create database testdb; # CREATE DATABASE # \c = \connect postgres=# \c testdb; # 您如今已經鏈接到數據庫 "testdb",用戶 "postgres".
# 查看錶 testdb=# \d # Did not find any relations. # 建立表 testdb=# create table test1(id int primary key, name varchar(50)); # CREATE TABLE testdb=# \d 關聯列表 架構模式 | 名稱 | 類型 | 擁有者 ----------+-------+--------+---------- public | test1 | 數據表 | postgres (1 行記錄) # 架構模式(schema)咱們後續會講,暫時你能夠先理解爲一個數據庫邏輯分類的概念,默認建立數據庫都會有一個public的schema
# 設置顯示查詢時間 \timing on # 設置border的邊框內外都有 \pset border 2 # 查看編碼 \encoding # 設置編碼 \encoding UTF8 # 開啓擴展顯示,縱向打印每列數據 \x # 例子: testdb=# select * from test1; +-[ RECORD 1 ]-+ | id | 1 | | name | qkl | +------+-----+ # 設置命令執行的真正sql:on打開 off關閉 \set ECHO_HIDDEN on \set ECHO_HIDDEN off # 案例: testdb=# \set ECHO_HIDDEN on testdb=# \d ********* 查詢 ********** SELECT n.nspname as "Schema", c.relname as "Name", CASE c.relkind WHEN 'r' THEN 'table' WHEN 'v' THEN 'view' WHEN 'm' THEN 'materialized view' WHEN 'i' THEN 'index' WHEN 'S' THEN 'sequence' WHEN 's' THEN 'special' WHEN 'f' T HEN 'foreign table' WHEN 'p' THEN 'table' END as "Type", pg_catalog.pg_get_userbyid(c.relowner) as "Owner" FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE c.relkind IN ('r','p','v','m','S','f','') AND n.nspname <> 'pg_catalog' AND n.nspname <> 'information_schema' AND n.nspname !~ '^pg_toast' AND pg_catalog.pg_table_is_visible(c.oid) ORDER BY 1,2; ************************** 關聯列表 +-[ RECORD 1 ]--------+ | 架構模式 | public | | 名稱 | test1 | | 類型 | 數據表 | | 擁有者 | postgres | +----------+----------+
testdb-# \? 通常性 \copyright 顯示PostgreSQL的使用和發行許可條款 \crosstabview [COLUMNS] 執行查詢而且以交叉表顯示結果 \errverbose 以最冗長的形式顯示最近的錯誤消息 \g [文件] or; 執行查詢 (並把結果寫入文件或 |管道) \gexec 執行策略,而後執行其結果中的每一個值 \gset [PREFIX] 執行查詢並把結果存到psql變量中 \gx [FILE] as \g, but forces expanded output mode \q 退出 psql \watch [SEC] 每隔SEC秒執行一次查詢 幫助 \? [commands] 顯示反斜線命令的幫助 \? options 顯示 psql 命令行選項的幫助 \? variables 顯示特殊變量的幫助 \h [名稱] SQL命令語法上的說明,用*顯示所有命令的語法說明 查詢緩存區 \e [FILE] [LINE] 使用外部編輯器編輯查詢緩存區(或文件) \ef [FUNCNAME [LINE]] 使用外部編輯器編輯函數定義 \ev [VIEWNAME [LINE]] 用外部編輯器編輯視圖定義 \p 顯示查詢緩存區的內容 \r 重置(清除)查詢緩存區 \w 文件 將查詢緩存區的內容寫入文件 輸入/輸出 \copy ... 執行 SQL COPY,將數據流發送到客戶端主機 \echo [字符串] 將字符串寫到標準輸出 \i 文件 從文件中執行命令 \ir FILE 與 \i相似, 可是相對於當前腳本的位置 \o [文件] 將所有查詢結果寫入文件或 |管道 \qecho [字符串] 將字符串寫到查詢輸出串流(參考 \o) Conditional \if EXPR begin conditional block \elif EXPR alternative within current conditional block \else final alternative within current conditional block \endif end conditional block 資訊性 (選項: S = 顯示系統對象, + = 其他的詳細信息) \d[S+] 列出表,視圖和序列 \d[S+] 名稱 描述表,視圖,序列,或索引 \da[S] [模式] 列出聚合函數 \dA[+] [PATTERN] list access methods \db[+] [模式] 列出表空間 \dc[S+] [PATTERN] 列表轉換 \dC[+] [PATTERN] 列出類型強制轉換 \dd[S] [PATTERN] 顯示沒有在別處顯示的對象描述 \dD[S+] [PATTERN] 列出共同值域 \ddp [模式] 列出默認權限 \dE[S+] [PATTERN] 列出引用表 \det[+] [PATTERN] 列出引用表 \des[+] [模式] 列出外部服務器 \deu[+] [模式] 列出用戶映射 \dew[+] [模式] 列出外部數據封裝器 \df[antw][S+] [模式] 列出[只包括 聚合/常規/觸發器/窗口]函數 \dF[+] [模式] 列出文本搜索配置 \dFd[+] [模式] 列出文本搜索字典 \dFp[+] [模式] 列出文本搜索解析器 \dFt[+] [模式] 列出文本搜索模版 \dg[S+] [PATTERN] 列出角色 \di[S+] [模式] 列出索引 \dl 列出大對象, 功能與\lo_list相同 \dL[S+] [PATTERN] 列出全部過程語言 \dm[S+] [PATTERN] 列出全部物化視圖 \dn[S+] [PATTERN] 列出全部模式 \do[S] [模式] 列出運算符 \dO[S+] [PATTERN] 列出全部校對規則 \dp [模式] 列出表,視圖和序列的訪問權限 \drds [模式1 [模式2]] 列出每一個數據庫的角色設置 \dRp[+] [PATTERN] list replication publications \dRs[+] [PATTERN] list replication subscriptions \ds[S+] [模式] 列出序列 \dt[S+] [模式] 列出表 \dT[S+] [模式] 列出數據類型 \du[S+] [PATTERN] 列出角色 \dv[S+] [模式] 列出視圖 \dx[+] [PATTERN] 列出擴展 \dy [PATTERN] 列出全部事件觸發器 \l[+] [PATTERN] 列出全部數據庫 \sf[+] FUNCNAME 顯示一個函數的定義 \sv[+] VIEWNAME 顯示一個視圖的定義 \z [模式] 和\dp的功能相同 格式化 \a 在非對齊模式和對齊模式之間切換 \C [字符串] 設置表的標題,或若是沒有的標題就取消 \f [字符串] 顯示或設定非對齊模式查詢輸出的字段分隔符 \H 切換HTML輸出模式 (目前是 關閉) \pset [NAME [VALUE]] set table output option (NAME := {border|columns|expanded|fieldsep|fieldsep_zero| footer|format|linestyle|null|numericlocale|pager| pager_min_lines|recordsep|recordsep_zero|tableattr|title| tuples_only|unicode_border_linestyle| unicode_column_linestyle|unicode_header_linestyle}) \t [開|關] 只顯示記錄 (目前是 關閉) \T [字符串] 設置HTML <表格>標籤屬性, 或者若是沒有的話取消設置 \x [on|off|auto] 切換擴展輸出模式(目前是 關閉) 鏈接 \c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo} 鏈接到新數據庫(當前是"testdb") \conninfo 顯示當前鏈接的相關信息 \encoding [編碼名稱] 顯示或設定客戶端編碼 \password [USERNAME] 安全地爲用戶更改口令 操做系統 \cd [目錄] 更改目前的工做目錄 \setenv NAME [VALUE] 設置或清空環境變量 \timing [開|關] 切換命令計時開關 (目前是 開啓) \! [命令] 在 shell中執行命令或啓動一個交互式shell 變量 \prompt [文本] 名稱 提示用戶設定內部變量 \set [名稱 [值數]] 設定內部變量,若無參數則列出所有變量 \unset 名稱 清空(刪除)內部變量 大對象 \lo_export LOBOID 文件 \lo_import 文件 [註釋] \lo_list \lo_unlink LOBOID 大對象運算