如何在Postgresql中找到表创建时间。
示例,
如果我创建了一个文件,我可以找到文件创建时间,就像我想知道表创建时间一样。
答案 0 :(得分:18)
您不能 - 信息不会记录在任何地方。查看表格文件不一定能为您提供正确的信息 - 有些表操作会为您创建一个新文件,在这种情况下日期会重置。
答案 1 :(得分:15)
我查看了pg_ *表,我在那里找不到任何创建时间。可以找到表文件,但是在Linux上你无法获得文件创建时间。所以我认为答案是你只能在Windows上找到这些信息,使用以下步骤:
select datname, datdba from pg_database;
select relname, relfilenode from pg_class;
<PostgreSQL folder>/main/base/<database id>/<table filenode id>
(不确定它在Windows上是什么)。答案 2 :(得分:2)
我不认为它可能来自PostgreSQL,但您可能会在基础表文件的创建时间内找到它。
答案 3 :(得分:0)
我正在尝试采用另一种方式来获取此信息。 从service instance开始,我的解决方法是:
DROP TABLE IF EXISTS t_create_history CASCADE;
CREATE TABLE t_create_history (
gid serial primary key,
object_type varchar(20),
schema_name varchar(50),
object_identity varchar(200),
creation_date timestamp without time zone
);
--delete event trigger before dropping function
DROP EVENT TRIGGER IF EXISTS t_create_history_trigger;
--create history function
DROP FUNCTION IF EXISTS public.t_create_history_func();
CREATE OR REPLACE FUNCTION t_create_history_func()
RETURNS event_trigger
LANGUAGE plpgsql
AS $$
DECLARE
obj record;
BEGIN
FOR obj IN SELECT * FROM pg_event_trigger_ddl_commands () WHERE command_tag in ('SELECT INTO','CREATE TABLE','CREATE TABLE AS')
LOOP
INSERT INTO public.t_create_history (object_type, schema_name, object_identity, creation_date) SELECT obj.object_type, obj.schema_name, obj.object_identity, now();
END LOOP;
END;
$$;
--ALTER EVENT TRIGGER t_create_history_trigger DISABLE;
--DROP EVENT TRIGGER t_create_history_trigger;
CREATE EVENT TRIGGER t_create_history_trigger ON ddl_command_end
WHEN TAG IN ('SELECT INTO','CREATE TABLE','CREATE TABLE AS')
EXECUTE PROCEDURE t_create_history_func();
通过这种方式,您可以获得一个记录所有创建表的表。
答案 4 :(得分:0)
我尝试了另一种方法来获取表创建日期。假设您的数据库中有一个表清单,您可以在其中保存表的创建日期。然后,您可以运行以下命令来获取现有表创建日期:
SELECT pg_tables.tablename, inventory.created_at
FROM pg_tables
INNER JOIN inventory
ON pg_tables.tablename = inventory.tablename
在我的用例中可以,因为我使用一组需要跟踪的动态表。
答案 5 :(得分:0)
<data-dir>/<relation-file-path>
答案 6 :(得分:-3)
您可以从pg_stat_last_operation获取此信息。以下是如何做到这一点:
select * from pg_stat_last_operation where objid = 'table_name'::regclass order by statime;
此表存储以下操作:
select distinct staactionname from pg_stat_last_operation;
staactionname
---------------
ALTER
ANALYZE
CREATE
PARTITION
PRIVILEGE
VACUUM
(6 rows)
答案 7 :(得分:-3)
- 查询
select pslo.stasubtype, pc.relname, pslo.statime
from pg_stat_last_operation pslo
join pg_class pc on(pc.relfilenode = pslo.objid)
and pslo.staactionname = 'CREATE'
Order By pslo.statime desc
将有助于实现预期的结果
(在greenplum尝试过)