關於PostgreSQL的系統資訊函式的OID
一、自帶的OID的相關指令碼
在PostgreSQL的安裝包的src/include/catalog目錄下,有著兩個指令碼,unused_oids和 duplicate_oids。透過這兩個可執行指令碼,可以檢視當前原始碼包配置裡的符合要求的OID。unused_oids可以檢視若根據當前原始碼包初始化產生的資料庫,在系統表中未被使用的OID,duplicate_oids可以找到在系統表重複定義的OID。
當我們執行unused_oids指令碼的時候,就會出現類似如下的顯示, 可以獲取到這個PostgreSQL 尚未使用的 OID 列表。 假設當你想建立一個系統資訊函式 的時候,你需要生成不會產生任何衝突的 OID 。這個時候使用這個指令碼是很方便的,官方推薦的範圍是8000到9999,如果增加的補丁佔用的OID相互衝突了,那麼可能就會產生相關問題,此時另一個指令碼duplicate_oids的意義也就出現了。
對於每個具有任何手動建立的初始資料(有些沒有)的目錄都有一個相應的.dat檔案,其中包含其以可編輯格式的初始資料 。這些.dat檔案裡都包含 Perl 資料結構文字 。這些文字被求值以生成記憶體中的資料結構。當用上邊的方法獲取了可使用的OID後,就可以在此類.dat檔案裡定義函式初始資料的格式以及其OID了。
二、測試
如下我們做個測試
透過上邊指令碼我們已經能夠看到111這個OID是沒有被使用的。
而我們查詢原本資料庫裡的pg_backend_pid 函式,其對應的OID為2026 ,我們接下來對此係統內建函式的OID進行修改。
直接檢視src/include/catalog下的pg_proc.dat裡。資料庫裡的系統表裡關於pg_backend_pid 的OID和其是能對應上的。
此時我們修改此條記錄,將2026修改為111。並且儲存退出。
重新編譯,並且initdb到一個新的路徑。啟動資料庫
[xmaster@mogdb-kernel-0005 postgresql-14.1]$ ./configure --prefix=/home/xmaster/pg_oids [xmaster@mogdb-kernel-0005 postgresql-14.1]$ make -j 24 [xmaster@mogdb-kernel-0005 postgresql-14.1]$ make install -j 24 [xmaster@mogdb-kernel-0005 postgresql-14.1]$ cd /home/xmaster/pg_oids/bin [xmaster@mogdb-kernel-0005 bin]$ ./initdb -D /data/ysl_oids/data 修改完埠後,啟動資料庫 [xmaster@mogdb-kernel-0005 bin]$ pg_ctl start -D /data/ysl_oids/data/
此時,pg_backend_pid 這個函式的OID已經被改成了我定義的111。
然後再檢視我初始化使用的安裝包的裡的unused_oids指令碼,發現2026已經成為未被使用的狀態,而111已經從這個結果裡消失了。因為pg_proc.dat檔案裡我進行了修改。
此篇雖然是修改了已經內建的函式的OID,但是同樣的,想建立新內建函式的時候,宣告並定義新增函式後,也可以用這個方式給函式分配對應的OID。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2933374/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於在PostgreSQL中使用extract函式以及epochSQL函式
- 關於count函式的理解函式
- 關於建構函式與解構函式的分享函式
- 分散式系統–>(關於系統應用的基本概念)分散式
- PostgreSQL>視窗函式的用法SQL函式
- PostgreSQL的 SPI_介面函式SQL函式
- 關於cuda中的函式問題函式
- 關於字串的功能函式小結字串函式
- 理解 PostgreSQL 的 count 函式的行為SQL函式
- 關於資訊保安的
- 核心函式 系統呼叫 系統命令 庫函式函式
- 關於 js 中的回撥函式 callbackJS函式
- 關於python建構函式的過載Python函式
- 關於scala中的主建構函式函式
- 關於執行緒的幾個函式執行緒函式
- 關於C++當中的“模板函式”C++函式
- 關於linux下system()函式的總結Linux函式
- MySQL全面瓦解13:系統函式相關MySql函式
- 關於函式指標函式指標
- 關於緩動動畫函式的封裝動畫函式封裝
- 關於Vue中常用的工具函式封裝Vue函式封裝
- 關於javascript中變數及函式的提升JavaScript變數函式
- 關於虛擬函式的一些理解函式
- 關於 Math.random 的一些函式random函式
- 使用Excel呼叫ABAP系統的函式Excel函式
- PostgreSQL的generate_series函式應用SQL函式
- 關於變數的宣告和定義、內部函式和外部函式變數函式
- PostgreSQL的shared_buffers和系統OS cache的關係SQL
- python關於函式形參Python函式
- PostgreSQL:視窗函式SQL函式
- PostgreSQL函式裡呼叫函式(SETOF + RETURN QUERY)SQL函式
- linux之系統命令command和系統呼叫system calls及函式function之間的關係Linux函式Function
- 史上最全關於sorted函式的10條總結函式
- mysql練習 —— 關於一些函式的使用MySql函式
- 關於雲函式冷啟動優化的思考函式優化
- 基於java的社群居民資訊管理系統Java
- 基於JSP開發的物流資訊管理系統JS
- postgresql關於postgresql.auto.conf和postgresql.conf的區別SQL