PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да получите време за създаване на база данни в PostgreSQL 9.0?

В PostgreSQL времето за създаване на база данни не се съхранява в нито един от pg_catalogs. Така че възниква въпросът как да разберем кога е създадена базата данни.

За всяка база данни се създава директория с номер на база данни под $PGDATA/base заедно с набор от OID's,OID_fsm,OID_vm, PG_VERSION файлове за всеки обект (таблици/индекси/изглед/ и т.н.).

Всеки OID,OID_fsm,OID_vm, файлове ще бъдат актуализирани според промените, направени на ниво база данни. Файлът PG_VERSION обаче никога няма да бъде актуализиран за промени, направени в базата данни. Така че ще използваме времеви печат на файла PG_VERSION като време за създаване на база данни. Вярвам, че ще има шанс за промяна на времевата марка PG_VERSION, но не съм сигурен в кой случай се случват тези промени.

За да получа времеви печат на PG_VERSION, имам нужда от нещо, което изпълнява командата на ОС на ниво PG екземпляр. И така, използвах функцията pl/perlu, създадена от един от моя колега Вибхор Кумар.

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

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;

И една функция за получаване на oid на базата данни.

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

Изход:

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

Ще се върна с още неща :). Публикувайте вашите коментари, ако има такива, те ще бъдат високо оценени.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматизиране на одитите на сигурността за PostgreSQL

  2. pgDash Diagnostics Алтернативи - PostgreSQL управление на заявки с ClusterControl

  3. Използване на row_to_json() с вложени съединения

  4. Търсене в пълен текст от PostgreSQL 8.3

  5. Как да променя колона PG на NULLABLE TRUE?