问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

postgresql怎么查看表的创建时间

发布网友 发布时间:2022-04-22 10:32

我来回答

1个回答

热心网友 时间:2022-04-09 05:58

方法一:通过查找表数据文件方式
这种方法通过查找表的数据文件的方式从而确定表的创建时间,但是这种方法并不能准备查询表的创建
时间,而且有时候,这种方法得到的信息还有可能是错误的,下面大致演示下。

--1.1 创建表并插入数据

francs=> create table test_ctime (id int4 primary key ,name varchar(32));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_ctime_pkey" for table "test_ctime"
CREATE TABLE
francs=> insert into test_ctime select generate_series(1,10000),'create_time test';
INSERT 0 10000
francs=> \d test_ctime;
Table "francs.test_ctime"
Column | Type | Modifiers
--------+-----------------------+-----------
id | integer | not null
name | character varying(32) |
Indexes:
"test_ctime_pkey" PRIMARY KEY, btree (id)

francs=> \dt+ test_ctime;
List of relations
Schema | Name | Type | Owner | Size | Description
--------+------------+-------+--------+--------+-------------
francs | test_ctime | table | francs | 536 kB |
(1 row)

备注:表创建好了,接下来演示如何定位表的物理文件。

--1.2 定位表所在的表空间

francs=> select relname,relfilenode,reltablespace from pg_class where relname='test_ctime';
relname | relfilenode | reltablespace
------------+-------------+---------------
test_ctime | 24650 | 0
(1 row)

备注:在 PostgreSQL 的逻辑结构体系中,表位于数据库中,同时表位于表空间上,面表空间对应系统上一个
文件目录,每个表由一个或者多个文件组成; 根据上面的结果,表 test_ctime 的 reltablespace
值为 0,表示位于所属数据库的默认表空间,注意 relfilenode 值为 24650。

--1.3 查询数据库 francs 的默认表空间

francs=> select oid,datname,dattablespace from pg_database where datname='francs';
oid | datname | dattablespace
-------+---------+---------------
16386 | francs | 16385

备注:上面查出数据库 francs 的默认表空间的 oid 为 16385。

--1.4 查找 oid 为 16385 的表空间

francs=> select oid,* from pg_tablespace where oid=16385;
oid | spcname | spcowner | spcacl | spcoptions
-------+------------+----------+-----------------------------------------+------------
16385 | tbs_francs | 10 | {postgres=C/postgres,francs=C/postgres} |
(1 row)

备注:查了半天才查到表 test_ctime 的默认表空间为 tbs_francs,这里之所以饶这么大圈,是为
了展示 postgresql 中的一些逻辑结构关系,如果自己对环境比较熟悉,可以直接定位到
哪个表空间。

--1.5 查询表空间 tbs_francs 对应的物理目录

francs=> \db
List of tablespaces
Name | Owner | Location
------------+----------+------------------------------------------
pg_default | postgres |
pg_global | postgres |
tbs_francs | postgres | /database/1922/pgdata1/pg_tbs/tbs_francs
(3 rows)

备注:表空间 tbs_francs 的数据目录为 /database/1922/pgdata1/pg_tbs/tbs_francs。

--1.6 进入数据目录

[postgres@redhat6 16386]$ cd /database/1922/pgdata1/pg_tbs/tbs_francs
[postgres@redhat6 tbs_francs]$ ll
total 4.0K
drwx------. 4 postgres postgres 4.0K May 22 10:35 PG_9.2_201204301
[postgres@redhat6 tbs_francs]$ cd PG_9.2_201204301/
[postgres@redhat6 PG_9.2_201204301]$ ll
total 16K
drwx------. 2 postgres postgres 12K Jun 26 19:03 16386
drwx------. 2 postgres postgres 4.0K May 22 10:37 pgsql_tmp

备注:根据前面的步骤 1.3 查询的信息知道 16386 为数据库 francs 的 oid。 再根据步骤 1.2 的信息知道
表 test_ctime 的 relfilenode 值为 24650

--1.7 查找表 test_ctime 的数据文件

[postgres@redhat6 16386]$ ll 24650
-rw-------. 1 postgres postgres 512K Jun 26 18:57 24650

备注:根据数据文件 24650 知道表的创建时间为 2012-06-26 18:57。但这种方法并不准确,因为
表上的操作可能导致表重新生成文件,接着演示。

--1.8 cluster 表

francs=> cluster verbose test_ctime using test_ctime_pkey;
INFO: clustering "francs.test_ctime" using index scan on "test_ctime_pkey"
INFO: "test_ctime": found 0 removable, 10000 nonremovable row versions in 64 pages
DETAIL: 0 dead row versions cannot be removed yet.
CPU 0.00s/0.03u sec elapsed 0.08 sec.
CLUSTER
francs=> select relname,relfilenode,reltablespace from pg_class where relname='test_ctime';
relname | relfilenode | reltablespace
------------+-------------+---------------
test_ctime | 24655 | 0
(1 row)

备注:表 test_ctime 经过 cluster 操作后,重新生成了数据文件,文件号由原来的 24650 变成了 24655

--1.9 系统上再次查询表数据文件

[postgres@redhat6 16386]$ ll 24650
-rw-------. 1 postgres postgres 0 Jun 26 19:19 24650
[postgres@redhat6 16386]$ ll 24655
-rw-------. 1 postgres postgres 512K Jun 26 19:19 24655

备注:显然新文件的时间 24655 并不是表 test_ctime 的初始创建时间。

--1.10 vacuum full 表

francs=> vacuum full test_ctime;
VACUUM
francs=> select relname,relfilenode,reltablespace from pg_class where relname='test_ctime';
relname | relfilenode | reltablespace
------------+-------------+---------------
test_ctime | 24659 | 0
(1 row)

备注: vacuum full 操作后,同样产生了新文件,新文件号为 24659

--1.11 系统上再次查询表数据文件

[postgres@redhat6 16386]$ ll 24659
-rw-------. 1 postgres postgres 512K Jun 26 19:22 24659
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 postgresql里面怎么得到两个日期相差多少秒,或者多少分钟 pgsql或者通用的SQL如何根据时间按月查询 PostgreSQL sql 时间模糊查询 postgresql数据库怎样对查询出的结果按日期时间排序 postgresql 怎么查一年第几天是什么日期 postgresql根据已知的一个日期,查询数据库中这个日期所属的月份的所有数据 postgresql 全文检索 怎么按时间范围查询 postgreSQL:按日期查询 ACCA专业的学生都要考哪些证书? 国内注会和ACCA证哪个值钱 考ACCA资格证 需要工作经验吗 ACCA证书在澳大利亚有用吗 在中国有用吗 有acca证的人年薪多少? ACCA证书的权威性 拥有acca证的人后来过得怎么样了? acca证书值得考吗 快手免费送手机还要加他微信最后他还要你微信密码手机号还要支付密码这是真的吗? 快手极速版上的卖东西留的手机号码是真的吗? 快手上买手机号让人骗了咋办? 自称快手合作要我的快手号手机号码还有真实姓名是不是骗人的? postgreSQL数据库查询时间久 postgresql如何对上千万条数据的查询进行优化?需要关联两张表,已经对查询时间列做了索引! postgresql怎么让输入数据库的日期有个横线 Pgsql时间戳怎么去掉时区 postgreSQL 怎么把时间字段设置成空 求查询先按日期降序排序后sum累加到某一值的行数据 c语言中如何输入日期? 如何将一个字符串转变成postgresql日期类型 navicat查询orcle查看备份时间 牛肉和萝卜能一起炖吗? 萝卜干和牛肉可以吃吗 牛肉能和胡萝卜一起吃吗? ps是指什么? 牛肉和水萝卜能一起吃吗 英文“PS”是什么意思 牛肉炖萝们的做法 PS是什么意思 ? 如何抓取微信公众号的数据? 请教个问题是什么意思 微信公众号数据怎么抓取?