24h購物| | PChome| 登入
2009-03-17 09:57:14| 人氣647| 回應0 | 上一篇 | 下一篇

PostgreSQL欄位是ENUM的SQL處理

推薦 0 收藏 0 轉貼0 訂閱站台

CREATE TYPE action AS ENUM ('working', 'sleeping', 'smiling'); -->注意大小寫視為不同
CREATE TABLE "MyActions"
(
id integer NOT NULL,
myaction action, -->使用上方產生的Type action
CONSTRAINT "MyActions_pkey" PRIMARY KEY (id)
)
當然也可以用pgAdmin window產生,不過我試了幾次只有ENUM array可以選,
所以改用Command Window產生。
此時就有type safe的欄位,存不是TYPE action中的值會引起Exception,
而且存的是type的reference,也較節省空間(比起直接存字串)。

SQL比對時仍然使用字串,所以還是得在ap層產生相同的enum使用。
select ... from ... where myaction='working' <--working用自己的enum產生,避免寫錯。

不巧要比對不同table之間的ENUM欄位,SQL如下,
WHERE a.action::text = b.action::text <--可見最終還是要靠string比對

注意的是Type不是SQL標準,所以有跨不同品牌DB需求者使用須注意。

pgAdmin預設type不顯示,必須另外手動設定。

測試平台: Fedora 9+ PostgreSQL 8.3 in ibook & pgAdmin III(1.8.4 en) in XP

台長: softlive
人氣(647) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: postgresql |
此分類下一篇:PostgreSQL 8.3.7 in windows install
此分類上一篇:PostgreSQL欄位是bit型態的SQL處理

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文