PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak uzyskać czas tworzenia bazy danych w PostgreSQL 9.0?

W PostgreSQL czas utworzenia bazy danych nie jest przechowywany w żadnym z pg_catalogs. Powstaje więc pytanie, skąd wiemy, kiedy została utworzona baza danych.

Dla każdej bazy danych tworzony jest katalog z numerem identyfikacyjnym bazy danych pod $PGDATA/base wraz z zestawem OID,OID_fsm,OID_vm, PG_VERSION pliki dla każdego obiektu (tabele/indeksy/widok/ itp.).

Każdy plik OID,OID_fsm,OID_vm, zostanie zaktualizowany zgodnie ze zmianami wprowadzonymi na poziomie bazy danych. Jednak plik PG_VERSION nigdy nie zostanie zaktualizowany o jakiekolwiek zmiany dokonane w bazie danych. Tak więc użyjemy znacznika czasu pliku PG_VERSION jako czasu utworzenia bazy danych. Wierzę, że będzie istniała szansa na zmianę znacznika czasu PG_VERSION, ale nie jestem pewien, w którym przypadku te zmiany nastąpią.

Aby uzyskać znacznik czasu PG_VERSION, potrzebuję czegoś, co wykonuje polecenie systemu operacyjnego na poziomie wystąpienia PG. Użyłem więc funkcji pl/perlu stworzonej przez jednego z moich kolegów Vibhora Kumara.

http://vibhork.blogspot.com/2011/04/plperl-functions-for-getting-number-of.html

Funkcja pl/perlu

CREATE OR REPLACE FUNCTION execute_shell(text) returns setof text
as
$$
$output=`$_[0] 2>&1`;
@output=split(/[nr]+/,$output);
foreach $out (@output)
{ return_next($out);
}
return undef;
$$ language plperlu;

I jedna funkcja, aby uzyskać oid bazy danych.

CREATE OR REPLACE FUNCTION public.get_pg_version_loc(dbname varchar) RETURNS text AS
$body$
DECLARE
dbname ALIAS FOR $1;
data_dir text;
db_oid text;
os_execute text;
BEGIN
SELECT INTO db_oid oid from pg_database where datname = dbname;
show data_directory into data_dir;
os_execute := 'stat -c "%y" '||data_dir||'/base/'||db_oid||'/PG_VERSION';
return os_execute;
END;
$body$
LANGUAGE 'plpgsql';

Wyjście:

=# select datname,execute_shell(get_pg_version_loc(datname::text)) as "DB_Createion_Time"
-# from pg_database where datname not in ('template0','template1');
datname | DB_Createion_Time
--------------+-------------------------------------
postgres | 2011-01-10 21:48:37.222016571 +0530
provider | 2011-05-26 11:40:14.253434477 +0530
pgbench_test | 2011-08-14 16:52:21.689198728 +0530
pgpool | 2011-08-26 12:30:19.864134713 +0530
(4 rows)

Wrócimy z większą ilością rzeczy :). Opublikuj swoje komentarze, jeśli takie istnieją, będą one bardzo cenne.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PG::Błąd:SELECT DISTINCT, ORDER BY wyrażenia muszą pojawić się na liście wyboru

  2. Postgresql:Skryptowanie wykonania psql z hasłem

  3. Adapter Postgresql (pg):nie można połączyć się z serwerem

  4. Funkcje okna lub wspólne wyrażenia tabelowe:policz poprzednie wiersze w zakresie

  5. Zdobądź drzewo rodziców + dzieci z pg-obietnicą