sql >> Databáze >  >> RDS >> PostgreSQL

Jak získat čas vytvoření databáze v PostgreSQL 9.0?

V PostgreSQL není čas vytvoření databáze uložen v žádném z pg_catalogs. Nabízí se tedy otázka, jak víme, kdy byla databáze vytvořena.

Pro každou databázi je vytvořen adresář s číslem ID databáze pod $PGDATA/base spolu se sadou OID,OID_fsm,OID_vm, PG_VERSION soubory pro každý objekt (tabulky/indexy/zobrazení/atd.,).

Každý soubor OID, OID_fsm, OID_vm bude aktualizován podle změn provedených na úrovni databáze. Soubor PG_VERSION však nebude nikdy aktualizován o žádných změnách provedených v databázi. Jako čas vytvoření databáze tedy použijeme časové razítko souboru PG_VERSION. Věřím, že bude šance na změnu časového razítka PG_VERSION, ale nejsem si jistý, v jakém případě k této změně dojde.

Abych získal časové razítko PG_VERSION, potřebuji něco, co provede příkaz OS na úrovni instance PG. Použil jsem tedy funkci pl/perlu vytvořenou jedním z mých kolegů Vibhorem Kumarem.

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

Funkce 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;

A jedna funkce pro získání databázového oidu.

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';

Výstup:

=# 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)

Vrátí se s dalšími věcmi :). Případně zveřejněte své komentáře, velmi je oceníme.


  1. MySQL pivot řádek do dynamického počtu sloupců

  2. Jak předat proměnnou null do uložené procedury SQL z kódu C#.net

  3. SQL Server INFORMATION_SCHEMA Zobrazení | Podívejte se, zda existuje tabulka

  4. Postgres a indexy cizích klíčů a primárních klíčů