Postgres中oid alias別名的使用
阿新 • • 發佈:2019-01-10
上一節介紹了oid,這節簡單 oid alias 怎麼使用
讓我們從兩個示例入手。
例1:查詢表foo的所有欄位。
postgres=# create table foo (id int,name varchar(12));
CREATE TABLE
傳統方法:
note:這裡面pg_class、pg_attribute均為system relation(系統表),
pg_class儲存著資料庫所有物件(表、檢視、索引、序列、等物件)的記錄。
pg_attribute儲存著所有資料庫裡存在的所有的欄位,比如所有表的所有欄位都可以在pg_attribute查詢到。
postgres=# SELECT attname FROM pg_attribute WHERE attrelid = (SELECT oid FROM pg_class WHERE relname = 'foo');
attname
----------
id
name
ctid
xmin
cmin
xmax
cmax
tableoid
(8 rows)
現在,我們使用oid 的alia :
postgres=# SELECT attname FROM pg_attribute WHERE attrelid = 'foo'::regclass;
attname
----------
id
name
ctid
xmin
cmin
xmax
cmax
tableoid
(8 rows)
可以看出來,'foo'::regclass 相當於語句 (SELECT oid FROM pg_class WHERE relname = 'foo')
使用 alia(別名)大大簡化了操作。
例2:查詢foo表的一些資訊
postgres=# select oid,relname,reltuples from pg_class where oid='foo'::regclass;
oid | relname | reltuples
-------+---------+-----------
49542 | foo | 0
(1 row)
這裡使用oid作為查詢條件,可以看出來:
'foo'::regclass : 這個表示式將 表名轉換成了該表的oid
根據官網文件:
可以推匯出來,其餘用法類似。
比如,檢視那些表的資料型別為test:
postgres=# select relname from pg_class where reltype = 'test'::regtype;
relname
---------
test
(1 row)
test同時也是一張表,建立的test表的同時,也建立了名為test 的資料型別,這屬於自定義資料型別的知識。
用法大致是這樣,內部原理是怎麼樣的,請追溯原始碼。