in reply to Re: Hashing temporal tables in PostgreSQL
in thread Hash generate and find tampered tables in PostgreSQL

Hi Erix, Thanks for the note. I have corrected the name as PostgreSQL. Yes I tried with md5() function but it seems like it is just taking the given string and created the hash value. I think it is impossible to get the meta_data hash value at once in PostgreSQL like in Oracle. Because oracle does have a function to call metadata "dbms_metadata.get_ddl()".
  • Comment on Re^2: Hashing temporal tables in PostgreSQL

Replies are listed 'Best First'.
Re^3: Hashing temporal tables in PostgreSQL
by Corion (Patriarch) on Sep 22, 2017 at 06:28 UTC

    If you want the schema information to hash it, the most generic way would be the catalog methods of DBI:

    my $sth = $dbh->table_info(); my $tables = $sth->fetchall_arrayref(); print Dumper @$tables;
      Hi Corion, Hashing here means not taking values to a hash, what I meant was to generate a hash/checksum(by using hashing algo like sha1,sha256,md5, etc) value in each table definition in each schema. As an example below is the test file i am generating in Oracle database. In there, I have created temporary table and generate hash values and inserted into a temporary table. #SCHEMA_NAME,OBJECT_TYPE,TABLE_NAME,HASH_VALUE,CREATED_TIME TEST_USER,TABLE,USER_DETAILS,30D841C3EEA693D1436D9B7978903527F9D0DDB6,25-SEP-17

        So that hashvalue

        30D841C3EEA693D1436D9B7978903527F9D0DDB6

        is the result of hashing the string "#SCHEMA_NAME,OBJECT_TYPE,TABLE_NAME,HASH_VALUE,CREATED_TIME TEST_USER,TABLE,USER_DETAILS" ?

        Isn't that trivially done in postgres easily with Corion's retrieval values (or mine), and postgres' md5() function (or similar functions from perl, or pgcrypto) ? Where are you having problems?

        Also, do you mean 'temporary' where you wrote 'temporal'? And why 'temporary', or 'temporal'?

Re^3: Hashing temporal tables in PostgreSQL
by erix (Prior) on Sep 22, 2017 at 06:20 UTC

    I don't really see the problem. That oracle get_dll() just gets you the metadata. Every database can give you metadata.

    An easy way in postgres is to use the views in schema information_schema. To see a list in psql:

    \dv information_schema.
    select table_schema , table_name , data_type from information_schema.columns where table_schema = 'public' and table_name= 'pgbench_accounts' order by ordinal_position;

    and use something like that to md5 (or another checksum), either as a whole or on a row-by-row basis, or both.