PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara mendapatkan Waktu Pembuatan Database di PostgreSQL 9.0?

Di PostgreSQL, waktu pembuatan database tidak disimpan di salah satu pg_catalogs. Jadi timbul pertanyaan, bagaimana kita tahu kapan database dibuat.

Untuk setiap database, sebuah direktori dibuat dengan nomor database-oid di bawah $PGDATA/base bersama dengan satu set OID,OID_fsm,OID_vm, PG_VERSION file untuk setiap Obyek (Tabel/Indeks/Tampilan/ dll.,).

Setiap OID,OID_fsm,OID_vm, file akan diperbarui sesuai perubahan yang dibuat di tingkat basis data. Namun, file PG_VERSION tidak akan pernah diperbarui pada setiap perubahan yang dilakukan pada database. Jadi, kita akan menggunakan timestamp dari file PG_VERSION sebagai waktu pembuatan database. Saya yakin akan ada peluang untuk mengubah stempel waktu PG_VERSION, tetapi saya tidak yakin dalam hal apa perubahan ini terjadi.

Untuk mendapatkan stempel waktu PG_VERSION, saya memerlukan sesuatu yang menjalankan perintah OS di tingkat Instance PG. Jadi, saya menggunakan fungsi pl/perlu yang dibuat oleh salah satu rekan saya Vibhor Kumar.

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

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

Dan, salah satu fungsinya untuk mendapatkan database 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';

Keluaran:

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

Akan kembali dengan lebih banyak barang :). Kirimkan komentar Anda jika ada, mereka akan sangat dihargai.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana pgBouncer membantu mempercepat Django

  2. Pemantauan Kinerja &Audit PostgreSQL - Sumber Daya Teratas

  3. Perbedaan antara cap waktu dengan/tanpa zona waktu di PostgreSQL

  4. Postgres Ubah Integer Kolom ke Boolean

  5. Alternatif PGTune - Konfigurasi PostgreSQL ClusterControl