金仓数据库KingbaseES 如何查看表的创建时间

文章介绍了在KingbaseES数据库中查看表和数据库创建时间的两种方法:通过查找表和数据库的物理文件,以及通过数据库日志。指出了在使用`CLUSTERTABLE`命令后,表的物理文件创建时间可能会变化。建议使用查看物理文件的方式,但要注意`CLUSTER`操作的影响。同时,文章提到了`ALTERTABLE`等操作不会改变数据库的OID,即最初创建时间不变。
摘要由CSDN通过智能技术生成

前言

在oracle数据库中,可以通过查看数据字典dba_objects得到表的创建时间。在KingbaseES中如何查看表的创建时间呢?KingbaseES数据库中无法通过数据字典查看有关信息,但可以通过其他方法实现。

1、通过查找表和数据库的物理文件方式

TEST=# create table test4 (id int primary key);  
CREATE TABLE  
TEST=#  
TEST=# select now();  
now  
-------------------------------  
2023-03-09 11:07:52.575930+08  
(1 row)

insert into test4 select generate_series(1,1000);

TEST=# \dt+ test4;  
List of relations  
Schema | Name | Type | Owner | Size | Description  
--------+-------+-------+--------+-------+-------------  
public | test4 | table | system | 64 kB |  
(1 row)

TEST=# \d test4  
Table "public.test4"  
Column | Type | Collation | Nullable | Default  
--------+---------+-----------+----------+---------  
id | integer | | not null |  
Indexes:  
"test4_pkey" PRIMARY KEY, btree (id)

查看表的物理文件位置

TEST=# select sys_relation_filepath('test4');  
sys_relation_filepath  
----------------------  
base/12145/41214  
(1 row)

表test4的创建时间为11:08

[kingbase7@localhost 12145]$ ll 41214  
-rw------- 1 kingbase7 kingbase7 40960 Mar 9 11:08 41214

如果表上的relfilenode发生改变,那么我们查看到的表文件创建时间就不准确, 例如:

TEST=# cluster verbose test4 using test4_pkey;  
INFO: clustering "public.test4" using index scan on "test4_pkey"  
INFO: "test4": found 0 removable, 1000 nonremovable row versions in 5 pages  
DETAIL: 0 dead row versions cannot be removed yet.  
CPU: user: 0.00 s, system: 0.00 s, elapsed: 0.00 s.  
CLUSTER

再查看表的relfilenode改变了,文件的创建时间也变为最新的,这是因为cluster命令根据索引重新组织了表。

TEST=# select sys_relation_filepath('test4');  
sys_relation_filepath  
----------------------  
base/12145/41234  
(1 row)

kingbase7@localhost 12145]$ ll 41234  
-rw------- 1 kingbase7 kingbase7 40960 Mar 9 11:23 41234

但是通常的alter table 操作不会有表的relfilenode改变这个问题,例如

ALTER TABLE test4 add COLUMN word text;  
ALTER TABLE test4 add CHECK (word <> '');  
ALTER TABLE test4 rename to test2

查看数据库创建时间:

TEST=# create database test_ty;  
CREATE DATABASE  
TEST=# select now();  
now  
-------------------------------  
2023-03-08 17:02:15.615326+08  
(1 row)

查看数据库oid

TEST=# select oid,datname,dattablespace from sys_database where datname='test_ty';  
oid | datname | dattablespace  
-------+---------+---------------  
41213 | test_ty | 1663  
(1 row)

操作系统查看数据库oid 41213创建时间为17:02

[kingbase7@localhost base]$ ll  
drwx
------ 
2 kingbase7 kingbase7 8192 Mar 8 17:02 41213

实际测试以下语法均不会改变数据库的oid。也就是系统查看的数据库最初创建时间不会变。

ALTER DATABASE name RENAME TO new_name;  
ALTER DATABASE test_ty owner TO u1;  
ALTER DATABASE test_ty RESET ALL;

2、通过数据库日志查看表,数据库的创建时间。

在配置文件KINGBASE.CONF中加入 log_statement = 'ddl' # none, ddl, mod, all

创建表:

TEST=# select now();  
now  
-------------------------------  
2023-03-09 11:31:03.686769+08  
(1 row)

TEST=# create table test_bak as select \* from test4;  
SELECT 1000

创建数据接:

TEST=# select now();  
now  
-------------------------------  
2023-03-09 11:32:42.028259+08  
(1 row)

TEST=# create database test\_tx;  
CREATE DATABASE

查看数据库日志:

2023-03-09 11:31:04.312 CST [19483] LOG: statement: create table test_bak as select * from test4;  
2023-03-09 11:32:42.772 CST [19483] LOG: statement: create database test_tx;

总结:

以上两种方法可以查看数据库和表的创建时间,建议使用第一种方法,避免第二种方法频繁的ddl引起日志大小增加。

第一种方法在使用cluster table后会改变表的relfilenode,进而在操作系统上查到的表的创建时间不是原始创建时间。 更多信息,参见https://help.kingbase.com.cn/v8/index.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值