Trafodion 从元数据信息查找对象所属表

今天遇到一个问题,在创建表的时候因为指定了contraint名称而报冲突错误,如下

create table test
...
constraint aaa primary key (test_id)
+>);

*** ERROR[8102] The operation is prevented by a unique constraint.

*** ERROR[1423] Insert into metadata table OBJECTS failed.

--- SQL operation failed with errors.

更换constraint名称aaa为其他或者是移除”constraint aaa”(即使用数据库系统生成的名称)之后可以正常创建表,所以怀疑是constraint aaa在当前数据库已存在,那么该如何去检验呢?
我们知道,Trafodion中有一个元数据相关的schema,用get schemas可以看到,通过set set schema进去可以看到下面有相关的元数据表,用于保存对象的元数据信息,

SQL>get schemas;

Schemas in Catalog TRAFODION
============================

SEABASE
_LIBMGR_
_MD_
_REPOS_
_TENANT_MD_

--- SQL operation complete.

SQL>set schema "_MD_";

--- SQL operation complete.

SQL>get tables;

Tables in Schema TRAFODION._MD_
===============================

AUTHS
COLUMNS
DEFAULTS
INDEXES
KEYS
LIBRARIES
LIBRARIES_USAGE
OBJECTS
REF_CONSTRAINTS
ROUTINES
SEQ_GEN
TABLES
TABLE_CONSTRAINTS
TEXT
UNIQUE_REF_CONSTR_USAGE
VERSIONS
VIEWS
VIEWS_USAGE

--- SQL operation complete.

上面的元数据表中最重要的一个是OJBECTS表,它保存所有的对象的信息,包括OBJECT_NAME、OBJECT_UID等,因此我们可以基于OBJECTS表查找constraints aaa,

>>select object_name, object_type, object_uid from "_MD_".objects where object_name = 'AAA' ;

OBJECT_NAME                                                                                                                                                                                                                                                       OBJECT_TYPE  OBJECT_UID
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  -----------  --------------------

AAA                                                                                                                                                                                                                                                  PK            5004197302713865672

--- 1 row(s) selected.

通过上面SQL语句找到aaa对应的的OBJECT_ID,然后通过OBJECT_ID在TABLE_CONSTRAINTS找到对应的TABLE_UID,

>>select * from "_MD_".table_constraints where constraint_uid = 5004197302713865672;

TABLE_UID             CONSTRAINT_UID        CONSTRAINT_TYPE  DISABLED  DROPPABLE  IS_DEFERRABLE  ENFORCED  VALIDATED  LAST_VALIDATED        COL_COUNT    INDEX_UID             FLAGS
--------------------  --------------------  ---------------  --------  ---------  -------------  --------  ---------  --------------------  -----------  --------------------  --------------------

5004197302713865655   5004197302713865672  P                N         N          N              Y         Y            212367304638767804            3                     0                     0

--- 1 row(s) selected.

通过以下结果可以发现,5004197302713865655即为contraint aaa所在表的UID,下面我们通过这个UID再去OBJECTS表中查找对应的表名称,

>>select * from objects where object_uid =  5004197302713865655 ;

CATALOG_NAME                                                                                                                                                                                                                                                      SCHEMA_NAME                                                                                                                                                                                                                                                       OBJECT_NAME                                                                                                                                                                                                                                                       OBJECT_TYPE  OBJECT_UID            CREATE_TIME           REDEF_TIME            VALID_DEF  DROPPABLE  OBJECT_OWNER  SCHEMA_OWNER  FLAGS
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------  -----------  --------------------  --------------------  --------------------  ---------  ---------  ------------  ------------  --------------------

TRAFODION                                                                                                                                                                                                                                                         SEABASE                                                                                                                                                                                                                                                          STG_TEST                                                                                                                                                                                                                                           BT            5004197302713865655    212367304638561613    212367304642149588  Y          N                 33333         33333                     0

--- 1 row(s) selected.

那么,STG_TEST就是我们要找的表了,这时,我们可以通过SHOWDDL STG_TEST来查看此表的DDL或者找到原始的DDL来确认是否这个表上有constraint aaa了。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值