babelfish for postgresql 分析--babelfishpg_tds--doing

babelfishpg_tds插件 支持了TDS 协议扩展,实现 TDS 客户端-服务器协议

先看插件加载时的函数

c 复制代码
void
_PG_init(void)
{
	//是否已加载
	static bool inited = false;
	if (inited)
		return;
	//tds插件必须在shared_preload_libraries中,在数据库启动时即加载
	if (!process_shared_preload_libraries_in_progress)
		ereport(ERROR, (errcode(ERRCODE_OBJECT_NOT_IN_PREREQUISITE_STATE),
						errmsg("babelfishpg_tds must be loaded via shared_preload_libraries")));
	//初始化guc参数,见下表
	TdsDefineGucs();
	//创建了一个插件ptr,暂时未看到具体使用
	tds_instr_plugin_ptr = (TdsInstrPlugin **) find_rendezvous_variable("TdsInstrPlugin");
	//初始化端口监听等,在postgresql中实现tds协议的核心
	pe_init();
	//内核中新增了relname_lookup_hook hook,返回保存在tvp_lookup_list中的relid
	prev_relname_lookup_hook = relname_lookup_hook;
	relname_lookup_hook = tvp_lookup;

	/* Shmem hooks */
	//共享内存中创建TdsStatus,保存每个连接tds的状况
	next_shmem_startup_hook = shmem_startup_hook;
	shmem_startup_hook = tds_status_shmem_startup;

	prev_shmem_request_hook = shmem_request_hook;
	shmem_request_hook = tds_shmem_request;

	/* Install our object_access_hook into the chain */
	next_object_access_hook = object_access_hook;
	//object_access_hook,主要检查是否有权限drop user
	object_access_hook = babelfish_object_access;

	/* Install our process utility hook into the chain */
	next_ProcessUtility = ProcessUtility_hook;
	//Utility hook,用于在执行ddl前做额外的权限检查,检查的语句有DropRoleStmt,T_RenameStmt,T_DropdbStmt,T_AlterRoleStmt,T_AlterRoleSetStmt,T_GrantRoleStmt,在执行完检查后执行正常的ProcessUtility,通过调用next_ProcessUtility 
	ProcessUtility_hook = tdsutils_ProcessUtility;

	inited = true;
}

新增guc参数

参数 GucContext 说明 默认值
babelfishpg_tds.port PGC_POSTMASTER(数据库启动时设置) tds监听的端口 1433
babelfishpg_tds.listen_addresses PGC_POSTMASTER(数据库启动时设置) tds监听的ip *
babelfishpg_tds.unix_socket_directories PGC_POSTMASTER(数据库启动时设置) TDS server unix socket directories NULL
babelfishpg_tds.unix_socket_permissions PGC_POSTMASTER(数据库启动时设置) TDS server unix socket permissions 0777
babelfishpg_tds.unix_socket_group PGC_POSTMASTER TDS server unix socket group. NULL
babelfishpg_tds.default_server_name PGC_SIGHUP(数据库启动时设置或者reload触发中断设置) 默认server name Microsoft SQL Server
babelfishpg_tds.product_version PGC_USERSET(用户可修改) Product Version returned by Babelfish default
babelfishpg_tds.tds_default_numeric_precision PGC_SIGHUP 默认numeric精度 38
babelfishpg_tds.tds_default_numeric_scale PGC_SIGHUP 默认numeric范围 8
babelfishpg_tds.tds_ssl_encrypt PGC_SIGHUP ssl加密开关 false
babelfishpg_tds.tds_default_protocol_version PGC_SIGHUP tds协议版本 TDS_DEFAULT_VERSION
babelfishpg_tds.tds_ssl_max_protocol_version PGC_SIGHUP ssl协议最大版本 PG_TLS1_2_VERSION
babelfishpg_tds.tds_ssl_min_protocol_version PGC_SIGHUP ssl协议最小版本 PG_TLS1_VERSION
babelfishpg_tds.tds_default_packet_size PGC_SIGHUP 发送的packet大小 4096
babelfishpg_tds.tds_debug_log_level PGC_SIGHUP 日志级别 1
enable_drop_babelfish_role PGC_USERSET 是否可以删除一个babelfish role false
babelfishpg_tds.trigger_fault_enabled PGC_SUSET Enable fault injection triggers true
相关推荐
Decay__28 分钟前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
小徐不徐说5 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场5 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__6 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
心梦缘-雪雁8 小时前
SQL Server 查询数据存在哪个表里
数据库
lusklusklusk8 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW9 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB9 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_9 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
瀚高PG实验室10 小时前
HGDB V9.0.5 .pgpass 免密登录提示 IsEncryptNon-base64 encoding 警告处理
数据库·postgresql·瀚高数据库