Postgres中oid alias別名的使用

2021-08-03 10:17:27 字數 1720 閱讀 2822

文章 給了本人很大的啟示

讓我們從兩個示例入手。

例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 的資料型別,這屬於自定義資料型別的知識。

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

docker中postgres的使用

docker中的postgre映象執行後預設有乙個postgres使用者 sudo postgres 切換到postgres使用者 在shell中執行 psql命令進入資料庫終端 建立使用者 create usernamewith password password superuser create...

postgres中的中文分詞zhparser

基本查了下網路,postgres的中文分詞大概有兩種方法 其中的bamboo安裝和使用都比較複雜,所以我選擇的是zhparser scws是簡易中文分詞系統的縮寫,它的原理其實很簡單,基於詞典,將文字中的內容按照詞典進行分詞,提取關鍵字等。github上的位址在這裡。它是xunsearch的核心分詞...

postgres中的中文分詞zhparser

基本查了下網路,postgres的中文分詞大概有兩種方法 其中的bamboo安裝和使用都比較複雜,所以我選擇的是zhparser scws是簡易中文分詞系統的縮寫,它的原理其實很簡單,基於詞典,將文字中的內容按照詞典進行分詞,提取關鍵字等。github上的位址在這裡。它是xunsearch的核心分詞...