1. 程式人生 > >Postgres中oid alias別名的使用

Postgres中oid alias別名的使用

上一節介紹了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 的資料型別,這屬於自定義資料型別的知識。

用法大致是這樣,內部原理是怎麼樣的,請追溯原始碼。