PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Qual è il modo più elegante per archiviare timestamp con nanosec in postgresql?

Usa numeric come tipo di base di nano timestamp. La funzione converte un valore numerico nella sua rappresentazione di timestamp testuale:

create or replace function nanotimestamp_as_text(numeric)
returns text language sql immutable as $$
    select concat(to_timestamp(trunc($1))::timestamp::text, ltrim(($1- trunc($1))::text, '0'))
$$;

Puoi anche convertire facilmente i valori numerici in timestamp regolari nei casi in cui la super precisione non è necessaria, ad esempio:

with my_data(nano_timestamp) as (
    select 1508327235.388551234::numeric
)

select 
    to_timestamp(nano_timestamp)::timestamp,
    nanotimestamp_as_text(nano_timestamp)
from my_data;

        to_timestamp        |     nanotimestamp_as_text     
----------------------------+-------------------------------
 2017-10-18 13:47:15.388551 | 2017-10-18 13:47:15.388551234
(1 row)