• 笔记 postgresql oid同步


    以前学习postgresql的笔记

     

    create table 消耗 OID

    • create table my_test_table, 他本身会消耗一个

    • 会在pg_type中插入两条记录_my_test_tablemy_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

    局唯一,因此要在所有的coordinatordatanode上获取一个最大的OID。以create table为例,

    具体流程如下:

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

    2)向所有建立连接的节点发送获取OID请求,收到请求的节点,把本节点最大的OID发给coordinator

    3coordinator节点收到其他几点发来的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


  • 相关阅读:
    SQL union用法转载自http://www.cnblogs.com/johngong/archive/2008/04/25/1170519.html
    jquery ajax调用后台方法返回json数据转自http://www.cnblogs.com/xiaoxi/archive/2011/03/31/2000803.html
    我所知道的CallbackContract in WCF
    我所知道的CallbackContract in WCF
    使用Web.Config Transformation配置灵活的配置文件
    InfluxDB基本概念和操作
    ContentControl 的使用
    jsp_servlet时序图
    insertAdjacentHTML和insertAdjacentText方法(转)
    在Javascript中Eval函数的使用(转)
  • 原文地址:https://www.cnblogs.com/codeblock/p/5526649.html
Copyright © 2020-2023  润新知