筆記 postgresql oid同步

來源:互聯網
上載者:User

標籤:

以前學習postgresql的筆記

 

create table 消耗 OID

  • 如create table my_test_table, 他本身會消耗一個

  • 會在pg_type中插入兩條記錄_my_test_table和my_test_table會消耗掉兩個oid

  • 如果該表需要toast會產生一個改變的toast表和toast index表消耗另外兩個,查看過程如下:

  • create table my_test_table(a int, b char(8192));

  • select oid, relname from pg_class where relname=‘my_test_table‘;

  • -- oid = 16384

  • select oid, relname from pg_class where relname like ‘%16384%‘;

  • select typname, oid from pg_type where typname like ‘%my_test_table‘;

OID同步過程

OID同步原因:當建立表、視圖、函數等對象時,對象需要分配新的OID。建立對象的OID全

局唯一,因此要在所有的coordinator和datanode上擷取一個最大的OID。以create table為例,

具體流程如下:

1)首先和所有的dn及除自己以外的co建立串連。

2)向所有建立串連的節點發送擷取OID請求,收到請求的節點,把本節點最大的OID發給coordinator。

3)coordinator節點收到其他幾點發來的oid,選一個最大的oid,然後調用SetNextAssignObjectId

函數,使當前co節點下一個要分配的OID為叢集中最大的OID。

4)然後才執行create語句,結構體CreateStmt中成員TableOidInfo用來儲存擷取的最大的

OID,當前coordiator把查詢計劃下發到其它節點,其它節點擷取到最大OID後調用函數

heap_create_with_catalog,在自己節點上建立表

OID同步涉及到的系統資料表

pg_class

pg_namespace --create schema

pg_constraint

pg_operator

pg_ts_parser

pg_ts_dict

pg_ts_template

pg_ts_config

pg_collation

pg_am

pg_extension

pg_foreign_data_wrapper

pg_foreign_server

pg_user_mapping

pg_type

pg_enum

pg_proc

pg_rewrite

pg_trigger

pg_language

pg_conversion

pg_cast

pg_opfamily

pg_opclass

pg_tablespace

OID同步去除

當前實現可能存在問題是,當有節點或所有節點的OID迴繞了,建立對象非常有可能失敗。OID同步去除參考

PG-XL的做法,在查詢計劃中發送對象名,到節點上再轉成本地OID。


筆記 postgresql oid同步

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.