摘要:每個服務由多個進程組成,為首的進程名為。服務使用字節長的內部事務標識符,即時發生重疊后仍然繼續使用,這會導致問題,所以需要定期進行操作。操作被認為是緊跟操作后的操作。在涉及高比例插入刪除的表中,會造成索引膨脹,這時候可以重建索引。
簡介和認知 發音
post-gres-q-l
服務(server)一個操作系統中可以啟動多個postgres服務。
每個服務由多個進程組成,為首的進程名為postmaster。
每個服務要占用一個端口,多個服務不能共享端口。
每個服務都有一個data目錄用于存放數據,目錄不允許修改,否則會破壞數據庫,并且無法修復。
服務使用4字節長的內部事務標識符,即時發生重疊后仍然繼續使用,這會導致問題,所以需要定期進行VACUUM操作。
一個服務中可以擁有多個數據庫。
數據庫默認是任何用戶可連接的,創建好后需要修改相應的權限。
數據庫之間的數據是隔離的,不能進行聯表。
數據庫默認的數據塊大小為8192。
一個數據庫中可以有多個模式,模式相當于表的命名空間,類似于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;pgsql 中表空間/數據庫/模式 的關系
表空間是物理結構,同一表空間下可以有多個數據庫
數據庫是邏輯結構,是表/索引/視圖/存儲過程的集合,一個數據庫下可以有多個schema
模式是邏輯結構,是對數據庫的邏輯劃分
# vist https://www.postgresql.org/download/ # Interactive installer by EnterpriseDB -> 選擇10.5版本的Windows x86-64下載 1. 一路的next安裝,當然你可以自己選擇安裝的目錄 2. 提示輸入postgres帳號的密碼,你可以根據自己的喜好,設置一個,比如這里我設置了:123456 2. 提示安裝插件擴展,取消即可,暫時不需要安裝psql客戶端簡單實用 連接
# $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常規顯示設置
# 設置顯示查詢時間 iming 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 顯示查詢緩存區的內容 重置(清除)查詢緩存區 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 [字符串] 設置HTML <表格>標簽屬性, 或者如果沒有的話取消設置 x [on|off|auto] 切換擴展輸出模式(目前是 關閉) 連接 c[onnect] {[DBNAME|- USER|- HOST|- PORT|-] | conninfo} 連接到新數據庫(當前是"testdb") conninfo 顯示當前連接的相關信息 encoding [編碼名稱] 顯示或設定客戶端編碼 password [USERNAME] 安全地為用戶更改口令 操作系統 cd [目錄] 更改目前的工作目錄 setenv NAME [VALUE] 設置或清空環境變量 iming [開|關] 切換命令計時開關 (目前是 開啟) ! [命令] 在 shell中執行命令或啟動一個交互式shell 變量 prompt [文本] 名稱 提示用戶設定內部變量 set [名稱 [值數]] 設定內部變量,若無參數則列出全部變量 unset 名稱 清空(刪除)內部變量 大對象 lo_export LOBOID 文件 lo_import 文件 [注釋] lo_list lo_unlink LOBOID 大對象運算
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39021.html
摘要:作者譚峰張文升出版日期年月頁數頁定價元本書特色中國開源軟件推進聯盟分會特聘專家撰寫,國內多位開源數據庫專家鼎力推薦。張文升中國開源軟件推進聯盟分會核心成員之一。 很高興《PostgreSQL實戰》一書終于出版,本書大體上系統總結了筆者 PostgreSQL DBA 職業生涯的經驗總結,本書的另一位作者張文升擁有豐富的PostgreSQL運維經驗,目前就職于探探科技任首席PostgreS...
摘要:另外一些單元測試可能會測試負向路徑的場景,保證代碼不僅會產生錯誤,而且是預期的錯誤。是一個面向程序員的測試框架,這是一個的體系結構的單元測試框架。 本系列教程所有的PHPUnit測試基于PHPUnit6.5.9版本,Lumen 5.5框架 前置 日常我們的普通用到的測試: 代碼直接echo,debug等方法測試 -> 跟蹤細節斷點型測試 log日志輔助測試 -> 跟蹤細節斷點型測試 ...
摘要:另外一些單元測試可能會測試負向路徑的場景,保證代碼不僅會產生錯誤,而且是預期的錯誤。是一個面向程序員的測試框架,這是一個的體系結構的單元測試框架。 本系列教程所有的PHPUnit測試基于PHPUnit6.5.9版本,Lumen 5.5框架 前置 日常我們的普通用到的測試: 代碼直接echo,debug等方法測試 -> 跟蹤細節斷點型測試 log日志輔助測試 -> 跟蹤細節斷點型測試 ...
摘要:上一篇文章實戰安裝下一篇文章實戰第一章初識第二節數據結構簡介是一個遠程內存數據庫,它不僅性能強勁,而且還具有復制特性以及為解決問題而生的獨一無二的數據模型,是一個速度非常快的非關系數據庫。 上一篇文章:Pyhton--Redis實戰:Mac brew安裝redis下一篇文章:Python--Redis實戰:第一章:初識Redis:第二節:Redis數據結構簡介 Redis是一個遠程內...
閱讀 2830·2021-11-24 09:39
閱讀 4082·2021-10-27 14:19
閱讀 2043·2021-08-12 13:25
閱讀 2333·2019-08-29 17:07
閱讀 1112·2019-08-29 13:44
閱讀 1066·2019-08-26 12:17
閱讀 461·2019-08-23 17:16
閱讀 2048·2019-08-23 16:46