首页 > 数据库 >磐维数据库中获取对象DDL语句

磐维数据库中获取对象DDL语句

时间:2024-02-19 21:11:05浏览次数:26  
标签:语句 磐维 get partition relname pg DDL dbtest id

目录

概述

介绍一些常用的获取磐维数据库对象DDL语句的方法。

一、表的ddl语句

1、新建测试表

CREATE TABLE sales
 (prod_id NUMBER(6),
  cust_id NUMBER,
  time_id DATE,
  channel_id CHAR(1),
  promo_id NUMBER(6),
  quantity_sold NUMBER(3),
  amount_sold NUMBER(10,2)
 )
PARTITION BY RANGE( time_id) INTERVAL('1 day')
 (
 partition p1 VALUES LESS THAN ('2019-02-01 00:00:00'),
 partition p2 VALUES LESS THAN ('2019-02-02 00:00:00')
);


create index  on sales(prod_id) local ;

2、直接查询pg_get_tabledef函数


dbtest=# select oid from pg_class where relname ='sales';
  oid   
--------
 155519
(1 row)

dbtest=# select pg_get_tabledef(155519);
                                                                 pg_get_tabledef                                                                 
-------------------------------------------------------------------------------------------------------------------------------------------------
 SET search_path = public;                                                                                                                      +
 CREATE TABLE sales (                                                                                                                           +
     prod_id numeric(6,0),                                                                                                                      +
     cust_id numeric,                                                                                                                           +
     time_id timestamp(0) without time zone,                                                                                                    +
     channel_id character(1),                                                                                                                   +
     promo_id numeric(6,0),                                                                                                                     +
     quantity_sold numeric(3,0),                                                                                                                +
     amount_sold numeric(10,2)                                                                                                                  +
 )                                                                                                                                              +
 WITH (orientation=row, compression=no)                                                                                                         +
 PARTITION BY RANGE (time_id)                                                                                                                   +
 INTERVAL ('1 day')                                                                                                                             +
 (                                                                                                                                              +
     PARTITION p1 VALUES LESS THAN ('2019-02-01 00:00:00') TABLESPACE pg_default,                                                               +
     PARTITION p2 VALUES LESS THAN ('2019-02-02 00:00:00') TABLESPACE pg_default                                                                +
 )                                                                                                                                              +
 ENABLE ROW MOVEMENT;                                                                                                                           +
 CREATE INDEX sales_prod_id_idx ON sales USING btree (prod_id) LOCAL(PARTITION p1_prod_id_idx, PARTITION p2_prod_id_idx)  TABLESPACE pg_default;
(1 row)

dbtest=# 

3、第二种方法,直接查询pg_class

btest=# select pg_get_tabledef(oid) from pg_class where relname ='sales';
                                                                 pg_get_tabledef                                                                 
-------------------------------------------------------------------------------------------------------------------------------------------------
 SET search_path = public;                                                                                                                      +
 CREATE TABLE sales (                                                                                                                           +
     prod_id numeric(6,0),                                                                                                                      +
     cust_id numeric,                                                                                                                           +
     time_id timestamp(0) without time zone,                                                                                                    +
     channel_id character(1),                                                                                                                   +
     promo_id numeric(6,0),                                                                                                                     +
     quantity_sold numeric(3,0),                                                                                                                +
     amount_sold numeric(10,2)                                                                                                                  +
 )                                                                                                                                              +
 WITH (orientation=row, compression=no)                                                                                                         +
 PARTITION BY RANGE (time_id)                                                                                                                   +
 INTERVAL ('1 day')                                                                                                                             +
 (                                                                                                                                              +
     PARTITION p1 VALUES LESS THAN ('2019-02-01 00:00:00') TABLESPACE pg_default,                                                               +
     PARTITION p2 VALUES LESS THAN ('2019-02-02 00:00:00') TABLESPACE pg_default                                                                +
 )                                                                                                                                              +
 ENABLE ROW MOVEMENT;                                                                                                                           +
 CREATE INDEX sales_prod_id_idx ON sales USING btree (prod_id) LOCAL(PARTITION p1_prod_id_idx, PARTITION p2_prod_id_idx)  TABLESPACE pg_default;
(1 row)

dbtest=# 

二、 索引的ddl语句

1、直接查询pg_get_indexdef函数

dbtest=# CREATE TABLE staff(
dbtest(#    ID             INT      NOT NULL,
dbtest(#    NAME           char(8)    NOT NULL,
dbtest(#    AGE            INT     ,
dbtest(#    ADDRESS        CHAR(50),
dbtest(#    SALARY         REAL
dbtest(# );
CREATE TABLE
dbtest=# 
dbtest=# \d
                         List of relations
 Schema |  Name  | Type  | Owner |             Storage              
--------+--------+-------+-------+----------------------------------
 public | staff  | table | omm   | {orientation=row,compression=no}
 public | th_hhd | table | omm   | {orientation=row,compression=no}
(2 rows)
dbtest=# \d staff
        Table "public.staff"
 Column  |     Type      | Modifiers 
---------+---------------+-----------
 id      | integer       | not null
 name    | character(8)  | not null
 age     | integer       | 
 address | character(50) | 
 salary  | real          | 

dbtest=# create index on staff(id);
CREATE INDEX
dbtest=# select oid,relname from pg_class where relname='staff_id_idx';
  oid   |   relname    
--------+--------------
 155517 | staff_id_idx
(1 row)

dbtest=# 
    
    
    
MogDB=# CREATE TABLE sales
mogdb-# (prod_id NUMBER(6),
MogDB(#  cust_id NUMBER,
MogDB(#  time_id DATE,
MogDB(#  channel_id CHAR(1),
MogDB(#  promo_id NUMBER(6),
MogDB(#  quantity_sold NUMBER(3),
MogDB(#  amount_sold NUMBER(10,2)
MogDB(# )
PARTITION BY RANGE( time_id) INTERVAL('1 day')
mogdb-# mogdb-# (
MogDB(#  partition p1 VALUES LESS THAN ('2019-02-01 00:00:00'),
MogDB(#  partition p2 VALUES LESS THAN ('2019-02-02 00:00:00')
MogDB(# );
CREATE TABLE
MogDB=# create index index_sales on sales(prod_id) local (PARTITION idx_p1 ,PARTITION idx_p2);
CREATE INDEX
MogDB=# -- 插入数据没有匹配的分区,新创建一个分区,并将数据插入该分区
MogDB=# INSERT INTO sales VALUES(1, 12, '2019-02-05 00:00:00', 'a', 1, 1, 1);
INSERT 0 1
MogDB=# select oid from pg_class where relname = 'index_sales';
  oid
-------
 24632
(1 row)
MogDB=# select * from pg_get_indexdef(24632, true);
                                                     pg_get_indexdef
--------------------------------------------------------------------------------------------------------------------------
 CREATE INDEX index_sales ON sales USING btree (prod_id) LOCAL(PARTITION idx_p1, PARTITION idx_p2)  TABLESPACE pg_default
(1 row)
MogDB=# select * from pg_get_indexdef(24632, false);
                                                                    pg_get_indexdef

------------------------------------------------------------------------------------------------------------------------------------
--------------------
 CREATE INDEX index_sales ON sales USING btree (prod_id) LOCAL(PARTITION idx_p1, PARTITION idx_p2, PARTITION sys_p1_prod_id_idx)  TA
BLESPACE pg_default
(1 row    

2、第二种方法,直接查询pg_class


dbtest=# select pg_get_indexdef(a.oid) from pg_class a   where a.relname='staff_id_idx' ;
                              pg_get_indexdef                              
---------------------------------------------------------------------------
 CREATE INDEX staff_id_idx ON staff USING btree (id) TABLESPACE pg_default
(1 row)

dbtest=# 

三、获取函数的ddl语句

1、直接查询pg_get_functiondef函数

dbtest=#  select oid  from pg_proc where proname='ap_panwei_drop_partition';
  oid   
--------
 155518
(1 row)


dbtest=# select pg_get_functiondef(155518);
                                                                     pg_get_functiondef                                                                      
-------------------------------------------------------------------------------------------------------------------------------------------------------------
 (1,"CREATE OR REPLACE PROCEDURE public.ap_panwei_drop_partition()                                                                                          
 AS  DECLARE                                                                                                                                                
 begin                                                                                                                                                      
 for cc in (select a.relname                                                                                                                                
 from pg_partition a join pg_class b on (a.parentid = b.oid)                                                                                                
 where a.parttype = 'p' and b.relname = 'aopen_api_cdrrsp_0' and substr(a.relname,6) < to_char(date_trunc('day',current_date) - interval'60 day','yyyymmdd')
 order by 1) loop                                                                                                                                           
                
 execute immediate 'alter table AOPEN_API_CDRREQ_0 drop partition '||cc.relname;                                                                            
 execute immediate 'alter table AOPEN_API_CDRREQ_1 drop partition '||cc.relname;                                                                            
 execute immediate 'alter table AOPEN_API_CDRRSP_0 drop partition '||cc.relname;                                                                            
 execute immediate 'alter table AOPEN_API_CDRRSP_1 drop partition '||cc.relname;                                                                            
                                                                                                                                                            
 execute immediate 'alter table AOPEN_API_CDRREQ_NEW_0 drop partition '||cc.relname;                                                                        
 execute immediate 'alter table AOPEN_API_CDRREQ_NEW_1 drop partition '||cc.relname;                                                                        
 execute immediate 'alter table AOPEN_API_CDRRSP_NEW_0 drop partition '||cc.relname;                                                                        
 execute immediate 'alter table AOPEN_API_CDRRSP_NEW_1 drop partition '||cc.relname;                                                                        
                                                                                                                                                            
 execute immediate 'alter table AOPEN_API_CDRTHIRDLOG_0 drop partition '||cc.relname;                                                                       
 execute immediate 'alter table AOPEN_API_CDRTHIRDLOG_1 drop partition '||cc.relname;                                                                       
                                                                                                                                                            
 end loop;                                                                                                                                                  
 end;                                                                                                                                                       
 /                                                                                                                                                          
 ")                                                                                                                                                       

2、第二种方法,直接查询pg_class

select pg_get_functiondef(oid)  from pg_proc where proname='ap_panwei_drop_partition';
------------------------------------------------------------------------------------------------------------------------------------------------------------
 (1,"CREATE OR REPLACE PROCEDURE public.ap_panwei_drop_partition()                                                                                          
 AS  DECLARE                                                                                                                                                
 begin                                                                                                                                                      
 for cc in (select a.relname                                                                                                                                
 from pg_partition a join pg_class b on (a.parentid = b.oid)                                                                                                
 where a.parttype = 'p' and b.relname = 'aopen_api_cdrrsp_0' and substr(a.relname,6) < to_char(date_trunc('day',current_date) - interval'60 day','yyyymmdd')
 order by 1) loop                                                                                                                                           
                                                                                                                                                            
 execute immediate 'alter table AOPEN_API_CDRREQ_0 drop partition '||cc.relname;                                                                            
 execute immediate 'alter table AOPEN_API_CDRREQ_1 drop partition '||cc.relname;                                                                            
 execute immediate 'alter table AOPEN_API_CDRRSP_0 drop partition '||cc.relname;                                                                            
 execute immediate 'alter table AOPEN_API_CDRRSP_1 drop partition '||cc.relname;                                                                            
                                                                                                                                                            
 execute immediate 'alter table AOPEN_API_CDRREQ_NEW_0 drop partition '||cc.relname;                                                                        
 execute immediate 'alter table AOPEN_API_CDRREQ_NEW_1 drop partition '||cc.relname;                                                                        
 execute immediate 'alter table AOPEN_API_CDRRSP_NEW_0 drop partition '||cc.relname;                                                                        
 execute immediate 'alter table AOPEN_API_CDRRSP_NEW_1 drop partition '||cc.relname;                                                                        
                                                                                                                                                            
 execute immediate 'alter table AOPEN_API_CDRTHIRDLOG_0 drop partition '||cc.relname;                                                                       
 execute immediate 'alter table AOPEN_API_CDRTHIRDLOG_1 drop partition '||cc.relname;                                                                       
                                                                                                                                                            
 end loop;                                                                                                                                                  
 end;                                                                                                                                                       
 /                                   

四、获取视图的ddl语句

1、直接查询pg_views视图

dbtest=# select * from pg_views where viewname='v_th';
 schemaname | viewname | viewowner |              definition               
------------+----------+-----------+---------------------------------------
 public     | v_th     | omm       | SELECT count(*) AS count FROM th_hhd;

2、第二种方法,直接查询pg_class

dbtest=#  select pg_get_viewdef(a.oid) from pg_class a, pg_views b  where a.relname=b.viewname and b.viewname='v_th' ;
            pg_get_viewdef             
---------------------------------------
 SELECT count(*) AS count FROM th_hhd;
(1 row)

dbtest=# 

3、第三种方法,直接查询pg_get_viewdef

dbtest=# select oid from pg_class where relname='v_th';
  oid   
--------
 155548
(1 row)

dbtest=# select * from pg_get_viewdef(155548);
            pg_get_viewdef             
---------------------------------------
 SELECT count(*) AS count FROM th_hhd;
(1 row)

五、获取RULE 的ddl语句


dbtest=# select * from PG_RULES;
 schemaname |  tablename  |   rulename    |                                                                     definition                                                                      
------------+-------------+---------------+-----------------------------------------------------------------------------------------------------------------------------------------------------
 pg_catalog | pg_settings | pg_settings_u | CREATE RULE pg_settings_u AS ON UPDATE TO pg_settings WHERE (new.name = old.name) DO SELECT set_config(old.name, new.setting, false) AS set_config;
 pg_catalog | pg_settings | pg_settings_n | CREATE RULE pg_settings_n AS ON UPDATE TO pg_settings DO INSTEAD NOTHING;
 public     | t1          | t1_ins        | CREATE RULE t1_ins AS ON INSERT TO t1 DO INSTEAD INSERT INTO t2 (id) VALUES (new.id);
(3 rows)

六、 获取 物化视图 的ddl语句

1、直接查询pg_get_viewdef函数

dbtest=#  CREATE MATERIALIZED VIEW mv_t3 AS select count(*) from t3
dbtest-# ;
CREATE MATERIALIZED VIEW

dbtest=# select * from pg_get_viewdef('mv_t3');
          pg_get_viewdef           
-----------------------------------
 SELECT count(*) AS count FROM t3;
(1 row)

dbtest=# 

七、获取 触发器的ddl语句


dbtest=#  select pg_get_triggerdef(oid) from pg_trigger where tgname='warehouse_log';
                                                        pg_get_triggerdef                                                         
----------------------------------------------------------------------------------------------------------------------------------
 CREATE TRIGGER warehouse_log AFTER INSERT OR DELETE OR UPDATE ON warehouse FOR EACH ROW EXECUTE PROCEDURE record_warehouse_log()
(1 row)

dbtest=# 

标签:语句,磐维,get,partition,relname,pg,DDL,dbtest,id
From: https://www.cnblogs.com/xinxin1222/p/18021978

相关文章

  • ptk安装磐维(cmdb)+zookeeper+shardingsphere
    目录一、概览1.1、ShardingSphere-Proxy1.2、ShardingSphere特性二、环境准备2.1、ip规划2.2、修改主机名2.3、关闭防火墙和透明大页(所有节点)2.4配置yum,安装系统包2.5修改系统参数2.6创建omm用户和用户组及目录三、PTK安装磐维数据库(所有节点都要操作)3.1PTK介绍3.2下......
  • useEffect中return语句的执行时机
    概要:在开发过程中我发现了一个问题,在useEffect中写的return函数并没有执行,于是在此基础上进行了查证和测试.一、useEffect的使用方法1.两个参数,第二个参数为空数组useEffect(()=>{console.log('111')},[])结果:执行一次2.两个参数,第二个参数不为空数组......
  • 磐维2.0 之pg_stat_statements插件
    目录一、概念描述二、安装插件三、pg_stat_statements视图四、pg_stat_statements相关参数五、测试验证一、概念描述pg_stat_statements是pg的一个扩展插件,通常用于统计数据库的资源开销,分析TOPSQL,找出慢查询。二、安装插件testdb=#testdb=#createextensionpg_stat_sta......
  • MogDB 学习笔记之 -- truncate 属于dml语句
    概念描述验证create语句、alter语句、truncate语句、drop语句是属于ddl还是dml测试验证1、环境准备修改log_statement参数miao=#showlog_statement;log_statement---------------none(1row)miao=#ALTERDATABASEmiaoSETlog_statementTOddl;ALTERDATABA......
  • 解决MyBatis Mapper 的XML文件SQL语句无法自动提示问题
    一、问题1.问题场景IDEA中MyBatis编写mapper的SQL语句的时候无法提示SQL和数据库2.问题描述无法正常方便的使用IDEA的提示功能,更准确无误的编写代码3.本解决方案优势亲测可用,一劳永逸(IDEA版本IntelliJIDEA2021.1.3 )目的在于对Mybatis的Mapper.XML中sql语句进行提示......
  • 存储过程分页以及参数拼接sql语句
    1.C#调用存储过程,带参数返回的功能,而且是参数化拼接,这样就可以防止sql注入System.Data.SqlClient.SqlParameter[]parameters={newSystem.Data.SqlClient.SqlParameter("@i",100),......
  • 02 SQL更新语句执行流程
    02SQL更新语句执行流程与查询流程不一样的是,更新流程还涉及两个重要的日志模块。​redolog(重做日志)和binlog(归档日志)​redolog物理日志binlog逻辑日......
  • finally语句块相关面试题
    publicstaticvoidm(){try{System.out.println("try...");System.exit(0);}finally{System.out.println("finally...");}}上述程序中,finally语句块中的内容还能被执行吗?答:不能被执行......
  • linux awk语句中next 和 continue的区别
     next是跳过当前行(awk自身是列循环和行循环的结合);continue是跳过当前循环(跳过列循环); 001、next;跳过当前行(base)[b20223040323@admin1test2]$lsa.txt(base)[b20223040323@admin1test2]$cata.txt##测试文本001002003004005006007008......
  • PaddleNLP命名实体识别环境搭建&推理测试
    引子最近手上接了一个活儿,基于文本语料的实体抽取任务,调研了一圈发现目前开源轮子做的比较好的也就是PaddleNLP(大模型那种巨废资源,且幻觉严重的,不予考虑)。OK,那就让我们开始吧。一、命名实体识别概念命名实体识别(NamedEntitiesRecognition,NER)是自然语言处理的一个基础任务。其......