PostgreSQL数据类型-枚举类型、几何类型、网络地址类型和其他数据类型
2019獨角獸企業重金招聘Python工程師標準>>>
PostgreSQL還有很多數據類型,例如枚舉類型、幾何類型、網絡地址和MAC地址類型、XML類型、JSON類型、數組類型、范圍(range)類型、復合數據類型、組合類型、對象標識符等。復合數據類型等價于其他數據庫自定義數據類型。
首先介紹枚舉類型。
---創建weekday枚舉 postgres=# create type weekday as enum('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday'); CREATE TYPE ---查看枚舉weekday信息 postgres=# \dT+數據類型列表架構模式 | 名稱 | 內部名稱 | 大小 | 成員 | 擁有者 | 存取權限 | 描述 ----------+---------+----------+------+-----------+----------+----------+------public | weekday | weekday | 4 | Monday +| postgres | || | | | Tuesday +| | || | | | Wednesday+| | || | | | Thursday +| | || | | | Friday +| | || | | | Saturday +| | || | | | Sunday | | | (1 行記錄) ---另一種查詢枚舉方法 postgres=# select * from pg_enum;enumtypid | enumsortorder | enumlabel -----------+---------------+-----------16486 | 1 | Monday16486 | 2 | Tuesday16486 | 3 | Wednesday16486 | 4 | Thursday16486 | 5 | Friday16486 | 6 | Saturday16486 | 7 | Sunday (7 行記錄)postgres=#---演示插入數據 postgres=# create table testweekday(id int,week weekday); CREATE TABLE postgres=# insert into testweekday values(1,'Sunday'),(2,'Monday'); INSERT 0 2 postgres=#PostgreSQL枚舉類型類似于C#枚舉數據類型,用戶輸入數據必須符合已有數據,無法輸入其他值。枚舉類型輸入值區分大小寫,錯誤輸入會導致錯誤發生。
枚舉類型字段可以在表列內比較大小,例如
postgres=# insert into testweekday values(3,'Tuesday'),(4,'Thursday'); INSERT 0 2 postgres=# select week from testweekday;week ----------SundayMondayTuesdayThursday (4 行記錄)postgres=# select min(week),count(week) from testweekday;min | count --------+-------Monday | 4 (1 行記錄)postgres=#PostgreSQL支持二維幾何數據類型,采用笛卡爾坐標系。如點、直線、線段、矩形和圓等。虛數、極坐標、張量等都是復合數據類型。
postgres=# create table testgeometry(testpoint point,testline line,testbox box); CREATE TABLE postgres=# insert into testgeometry(testpoint,testline,testbox) values('(1,0)',null,null),(null,'((1,2),(2,2))',null),(null,null,'((0,0),(1,1))'); INSERT 0 3 postgres=#[]表示開放路徑,()表示閉合路徑。閉合路徑成環。
PostgreSQL網絡地址數據類型cidr和inet支持IPv4和和IPv6數據類型,MAC地址數據類型macaddr支持MAC地址。
postgres=# create table networkaddress(testcidr cidr,testinet inet); CREATE TABLE postgres=# postgres=# insert into networkaddress values('192.168.0.0/24','192.168.0.0/24'); INSERT 0 1 postgres=# insert into networkaddress values('192.168.0.0/16','192.168.0.0/16'); INSERT 0 1 postgres=# insert into networkaddress values('192.168.0.0/16','192.168.0.0/8'); INSERT 0 1 postgres=# insert into networkaddress values('192.168.0.1','192.168.0.1'); INSERT 0 1 postgres=# select testcidr,testinet from networkaddress;testcidr | testinet ----------------+----------------192.168.0.0/24 | 192.168.0.0/24192.168.0.0/16 | 192.168.0.0/16192.168.0.0/16 | 192.168.0.0/8192.168.0.1/32 | 192.168.0.1 (4 行記錄)postgres=#根據測試數據輸入結果可知,cidr和inet子網掩碼均可省略,需要注意IPv4子網掩碼書寫方式為純數字,范圍為0-32。IPv6子網掩碼范圍為0-128。兩者區別在于cidr會檢查輸入值正確性,輸出時帶子網掩碼。
postgres=# insert into networkaddress values('192.168.0/16','192.168.0/16'); INSERT 0 1 ---第二個值子網掩碼錯誤 postgres=# insert into networkaddress values('192.168.0/16','192.168.0/1'); INSERT 0 1 postgres=# select testcidr,testinet from networkaddress;testcidr | testinet ----------------+----------------192.168.0.0/24 | 192.168.0.0/24192.168.0.0/16 | 192.168.0.0/16192.168.0.0/16 | 192.168.0.0/8192.168.0.1/32 | 192.168.0.1192.168.0.0/16 | 192.168.0.1192.168.0.0/16 | 192.168.0.0/16192.168.0.0/16 | 192.168.0.0/1 (6 行記錄)postgres=# ---錯誤寫法 ---postgres=# insert into networkaddress values('192.168.0/16','192.168.0');輸入數據可以不寫完全。注意對比錯誤寫法和正確寫法區別,對比查詢結果。
macaddr儲存子網掩碼地址,子網掩碼是16進制字符,長度為8位,可以接受分段和分隔符,分隔符可以是:或-,可以省略不寫。例如00-00-00-00-00-C0每兩個字符分段一次,以-作為分隔符,分割長度可以為2、4、6、和8。-和:分隔符長度可以是2和6。.作為分隔符只支持類似0000.0000.00C0格式。
postgres=# create table testmacaddress(testmacaddr macaddr); CREATE TABLE postgres=# insert into testmacaddress values('00-00-00-00-00-C0'),('00-00-00-00-00-c1'); INSERT 0 2 postgres=# insert into testmacaddress values('0000-0000-00C0'),('00-00-00-00-00-c1'); INSERT 0 2 postgres=# insert into testmacaddress values('000000-0000C0'),('00-00-00-00-00-c1'); INSERT 0 2 postgres=# insert into testmacaddress values('0000.0000.00C0'),('00-00-00-00-00-c1'); INSERT 0 2 postgres=# insert into testmacaddress values('0000.0000.00C0'),('00-00-00-00-00-c1'); INSERT 0 2 postgres=# select * from testmacaddress;testmacaddr -------------------00:00:00:00:00:c000:00:00:00:00:c100:00:00:00:00:c000:00:00:00:00:c100:00:00:00:00:c000:00:00:00:00:c100:00:00:00:00:c000:00:00:00:00:c100:00:00:00:00:c000:00:00:00:00:c1 (10 行記錄)postgres=#推薦:2位長度分隔或無符號分隔。
XML類型、JSON類型、數組類型、范圍(range)類型、復合數據類型、組合類型、對象標識符等本文不再加以介紹。
轉載于:https://my.oschina.net/u/1011130/blog/1570933
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
以上是生活随笔為你收集整理的PostgreSQL数据类型-枚举类型、几何类型、网络地址类型和其他数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iOS编程上获取本地时间以及星期几时间
- 下一篇: 2012自学CCNP路由与交换之四交换机