關於Postgres的oid使用疑問解答 md

2021-08-03 14:56:14 字數 1429 閱讀 4125

//1.執行完如下語句後,'boolean'::regtype的值是 boolean。

postgres=# select 16::regtype ;

regtype

---------

boolean

(1 row)

//2.於是我就推斷:如果執行select 'boolean'::regtype應該返回的是16吧! (16是其對應的 oid 的值)

//於是執行如下語句:

postgres=# select 'boolean'::regtype ;

regtype

---------

boolean // 為什麼不是16? 為什麼 select 16::regtype 和 select 'boolean'::regtype 結果是一樣的?

//再看一條語句:

postgres=# select attname from pg_attribute where attrelid = 'foo'::regclass;//在這裡可以看出來'foo'::regclass返回是oid型別。

attname

----------

id name

ctid

xmin

cmin

xmax

cmax

tableoid

總結下問題: 當使用 oid 別名的時候(也就是形式大概是***x::reg***x ,比如上面的 16::regtype 、』boolean』::regtype 、』foo』::regclass ),

什麼時候返回的是oid,什麼時候返回的是oid對應的name呢 ?

casting to regclass is a shortcut way of saying 「this the name of a relation,

please convert it to the oid of that relation」.

轉換成 regclass相當於以一種簡單的方式說:這是該relation(表)的名字,請將其轉換成oid。

顯然,高票答案也公尺有解決問題。

最終確定以下兩個函式決定::regclass/regtype等別名的轉換和輸出:

regrolein 和 regroleout 這兩個函式決定的。

大概邏輯是:

16::regtype 和 『boolean』::regtype 他們都會被轉換成oid,但是只要輸出到psql命令列,就會都轉換成oid對應的name

如果不輸出到命令列,則不進行轉換,比如: where attrelid = 『foo』::regclass;就沒有轉換其對應的name(string型別,比如』boolean』而不是boolean所對應的16)即』foo』,因為只是在內部進行判斷,

而沒有進行輸出。

關於PagedDataSourced的使用

asp.net提供了三個功能強大的列表控制項 datagrid datalist和repeater控制項,但其中只有datagrid控制項提供分頁功能。相對datagrid,datalist和repeater控制項具有更高的樣式自定義性,所以很多時候我們喜歡使用datalist或repeater控制...

關於selenium base page的使用

在使用unittest框架的過程中,我們經常需要重複地寫setup和teardown函式,為了減少重複性的工作,可以將這部分 封裝起來。如下 import unittest from common.base page import basepage from common.browser impor...

關於BackgroundWorker的使用

dowork 呼叫 runworkerasync 時發生。progresschanged 呼叫 reportprogress 時發生。runworkercompleted 當後台操作已完成 被取消或引發異常時發生。先介紹一下backgroundworker的幾個屬性 方法 workerreports...