KingbaseES 如何查看表的创建时间
前言
在oracle数据库中,我们可以查看数据字典dba_objects得到表的创建时间。
在Kingbase数据库中如何查看表的创建时间呢,可以通过以下方法实现。
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 pg_relation_filepath('test4');
pg_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 pg_relation_filepath('test4');
pg_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 pg_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;
3、从数据库系统表中获取表的创建时间
test=# select o.* from _obj o join sys_class s on o.objectoid=s.oid and s.relname='members';
objectoid | objectkind | creator | createdxid | changedxid | createdts | changedts | createdcsn | changedcsn
| fbqlimited | minfbqxid | minfbqts | minfbqcsn
-----------+------------+---------+------------+------------+-------------------------------+-------------------------------+-------------+-------------
+------------+-----------+-------------------------------+-------------
24576 | p | 10 | 1046 | 1046 | 2023-11-10 14:47:03.590996+08 | 2023-11-10 14:47:03.590996+08 | 65536000000 | 65536000000
| f | 1046 | 2023-11-10 14:47:03.590996+08 | 65536000000
(1 row)
总结:
以上方法可以查看数据库和表的创建时间,建议使用第三种方法,避免第二种方法频繁的ddl引起日志大小增加。
第一种方法在使用cluster table后会改变表的relfilenode,进而在操作系统上查到的表的创建时间不是原始创建时间。
KINGBASE研究院
分类:
数据库运维
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!