在postgreSQL中安装扩展模块后提取表名?
因此,我正在开发一个contrib模块,并希望捕获该contrib模块中的表名在postgreSQL中安装扩展模块后提取表名?,postgresql,postgresql-9.5,Postgresql,Postgresql 9.5,因此,我正在开发一个contrib模块,并希望捕获该contrib模块中的表名 select extract_tablename(); table-name datatype-name new_table name new new_table1 name1 new1 问题: select extract_tablename(); table-name datatype-name new_table name new ne
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
问题:
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
这里有一些例子,可以让你了解一些我想要实现的目标
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
创建表:
create table new_table(name varchar , new integer);
insert into new_table values('abcdefghijkl' , 5004);
create table new_table1(name1 varchar , new1 integer) ;
insert into new_table1 values('mnopqrst' , 5005);
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
创建扩展名:
create extension table_name-extract;
select extract_tablename();
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
所以我的扩展应该提取一个表名,这意味着我应该知道表名和我声明的内置数据类型
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
以下是我期望的输出:
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
您实际上不需要扩展来跟踪DDL语句的执行
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
为此,您可以使用
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
本手册还介绍了如何使用PL/pgSQL编写事件触发器
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
CREATE OR REPLACE FUNCTION snitch()
RETURNS event_trigger
AS $$
BEGIN
RAISE NOTICE 'snitch: % %', tg_event, tg_tag;
END;
$$ LANGUAGE plpgsql;
CREATE EVENT TRIGGER snitch ON ddl_command_start
EXECUTE PROCEDURE snitch();
在触发器函数中,您需要将表名存储在一些配置表中,以便信息不会丢失
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
当然,如果您愿意,您可以将触发器和“日志表”(作为)打包到扩展中
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
另一个选项是启用使用
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1
在
postgresql.conf
中,Postgres日志文件中包含所有DDL语句 什么是“连续肋骨模块”?获取新创建表的名称需要什么?@Nico contrib modules是任何开发人员都可以显式安装或开发的模块,以实现额外的功能,我想根据自己的需要使用这些信息来捕获CREATE table
语句。您可以使用一个要实现:是否要跟踪扩展创建的表(这是不必要的,因为createextension
已经这样做了)?或者您想跟踪数据库中的任何表创建吗?@a_horse_和_no_name是的,我的意思是,每当用户创建某个特定表时,我都需要有关表名的信息,我想跟踪扩展中的此类表。
select extract_tablename();
table-name datatype-name
new_table name new
new_table1 name1 new1