将一個辨別符變得受限同時也使它變成大小寫敏感的,反之非受限名稱總是被轉換成小寫形 式。例如,辨別符FOO、foo和"foo"在PostgreSQL中被認為是相同的,而"Foo"和"FOO"則互 不相同且也不同于前面三個辨別符(PostgreSQL将非受限名字轉換為小寫形式與SQL标準是不相容 的,SQL标準中要求将非受限名稱轉換為大寫形式。這樣根據标準, foo應該和 "FOO"而不是"foo"相同。如果希望寫一個可移植的應用,我們應該總是用引号修飾一個特定名字或者從不使用引号修飾)。
查詢自動中添加單引号的方法
查詢轉義字元需要在字段前加入E
使用美元來代替單引号
位置參數$number
聚集表達式
大部分聚集函數忽略空輸入,這樣其中一個或多個表達式得到空值的行将被丢棄。除非另有說明,對于所有内建聚集都是這樣。
例如,count(*)得到輸入行的總數。count(f1)得到輸入行中f1為非空的數量,因為<code>count</code>忽略空值。而count(distinct f1)得到f1的非空可區分值的數量。
在處理多參數聚集函數時,注意ORDER BY出現在所有聚集參數之後。
如果指定了FILTER,那麼隻有對filter_clause計算為真的輸入行會被交給該聚集函數,其他行會被丢棄。例如:
視窗函數
其中window_definition的文法是
而可選的frame_clause是下列之一
其中frame_start和frame_end可以是下面形式中的一種
類型轉換
CAST文法遵從 SQL,而用::的文法是PostgreSQL的曆史用法。
建立function樣例
使用命名記号
常見資料類型:
用于整數的integer;可以用于分數的numeric;用于字元串的text,用于日期的date,用于一天内時間的time以及可以同時包含日期和時間的timestamp。
一個表能夠擁有的列的資料是有限的,根據列的類型,這個限制介于250和1600之間。
插入時預設主鍵值
限制:
系統隐式定義列
oid
一行的對象辨別符(對象ID)。該列隻有在表使用WITH OIDS建立時或者default_with_oids配置變量被設定時才存在。該列的類型為oid(與列名一緻)
tableoid
包含這一行的表的OID。該列是特别為從繼承層次中選擇的查詢而準備,因為如果沒有它将很難知道一行來自于哪個表。tableoid可以與pg_class的oid列進行連接配接來獲得表的名稱。
xmin
插入該行版本的事務身份(事務ID)。一個行版本是一個行的一個特别版本,對一個邏輯行的每一次更新都将建立一個新的行版本。
cmin
插入事務中的指令辨別符(從0開始)。
xmax
删除事務的身份(事務ID),對于未删除的行版本為0。對于一個可見的行版本,該列值也可能為非零。這通常表示删除事務還沒有送出,或者一個删除嘗試被復原。
cmax
删除事務中的指令辨別符,或者為0。
ctid
行版本在其表中的實體位置。注意盡管ctid可以被用來非常快速地定位行版本,但是一個行的ctid會在被更新或者被VACUUM FULL移動時改變。是以,ctid不能作為一個長期行辨別符。OID或者最好是一個使用者定義的序列号才應該被用來辨別邏輯行。
OID是32位量,它從一個服務于整個集簇的計數器配置設定而來。在一個大型的或者曆時長久的資料庫中,該計數器有可能會出現繞回。是以,不要總是假設OID是唯一的,除非你采取了措施來保證。如果需要在一個表中辨別行,推薦使用一個序列生成器。然而,OID也可以被使用,但是是要采取一些額外的預防措施:
如果要将OID用來辨別行,應該在OID列上建立一個唯一限制。當這樣一個唯一限制(或唯一索引)存在時,系統會注意不生成比對現有行的OID(當然,這隻有在表的航數目少于232(40億)時才成立。并且在實踐中表的尺寸最好遠比這個值小,否則将會犧牲性能)。
絕不要認為OID在表之間也是唯一的,使用tableoid和行OID的組合來作為資料庫範圍内的辨別符。
當然,問題中的表都必須是用WITH OIDS建立。在PostgreSQL 8.1中,WITHOUT OIDS是預設形式。
事務辨別符也是32位量。在一個曆時長久的資料庫中事務ID同樣會繞回。但如果采取适當的維護過程,這不會是一個緻命的問題。但是,長期(超過10億個事務)依賴事務ID的唯一性是不明智的。
指令辨別符也是32位量。這對一個事務中包含的SQL指令設定了一個硬極限: 232(40億)。在實踐中,該限制并不是問題 — 注意該限制隻是針對SQL指令的數目而不是被處理的行數。同樣,隻有真正 修改了資料庫内容的指令才會消耗一個指令辨別符。
列操作指令
權限:
SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、TRIGGER、CREATE、CONNECT、TEMPORARY、EXECUTE以及USAGE。
模式,将模式寫入路徑中,那麼SQL查詢可以省略模式名
注意在預設情況下,所有人都擁有在public模式上的CREATE和USAGE權限。這使得使用者能夠連接配接到一個給定資料庫并在它的public模式中建立對象。如果不希望允許這樣,可以撤銷該權限: