PostgreSQL: время создания таблицы - PullRequest
34 голосов
/ 05 апреля 2010

Как найти время создания таблицы в Postgresql.

Пример,

Если я создал файл, я могу найти время создания файла, подобное тому, которое я хочу знать время создания таблицы..

Ответы [ 8 ]

18 голосов
/ 05 апреля 2010

Вы не можете - информация нигде не записывается. Просмотр файлов таблиц не обязательно даст вам правильную информацию - есть операции с таблицами, которые создадут для вас новый файл, в этом случае дата будет сброшена.

15 голосов
/ 05 апреля 2010

Я просмотрел таблицы pg_ * и не смог найти там время создания. Можно найти файлы таблицы, но тогда в Linux вы не можете получить время создания файла. Поэтому я думаю, что ответ заключается в том, что вы можете найти эту информацию только в Windows, выполнив следующие действия:

  • получить идентификатор базы данных с помощью select datname, datdba from pg_database;
  • получить идентификатор файла filedede с select relname, relfilenode from pg_class;
  • найти файл таблицы и посмотреть время его создания; Я думаю, что местоположение должно быть что-то вроде <PostgreSQL folder>/main/base/<database id>/<table filenode id> (не уверен, что это в Windows).
2 голосов
/ 05 апреля 2010

Я не думаю, что это возможно из PostgreSQL, но вы, вероятно, найдете его во время создания файла базовой таблицы.

0 голосов
/ 15 февраля 2019

Я попробовал другой подход, чтобы получить дату создания таблицы. Предположим, у вас есть инвентаризация таблиц в вашей базе данных, где вы можете сохранить дату создания таблиц. Затем вы можете запустить что-то вроде этого, чтобы получить существующие даты создания таблицы:

    SELECT pg_tables.tablename, inventory.created_at
      FROM pg_tables
INNER JOIN inventory
        ON pg_tables.tablename = inventory.tablename

Для моего варианта использования это нормально, потому что я работаю с набором динамических таблиц, которые мне нужно отслеживать.

0 голосов
/ 17 сентября 2018

Я пытаюсь пойти другим путем для получения этого. Начиная с этого обсуждения мое решение было:

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();

Таким образом, вы получаете таблицу, в которой записаны все таблицы создания.

0 голосов
/ 09 мая 2017

Предлагаемый здесь :

SELECT oid FROM pg_database WHERE datname = 'mydb';

Тогда (при условии, что oid равно 12345):

ls -l $PGDATA/base/12345/PG_VERSION

Этот обходной путь предполагает, что PG_VERSION наименее вероятно будет изменен после создания.

Примечание: если PGDATA не определено, отметьте Где PostgreSQL хранит базу данных?

0 голосов
/ 07 ноября 2014

- запрос

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)

0 голосов
/ 02 мая 2013

Вы можете получить это из 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...