sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cuál es la forma más elegante de almacenar la marca de tiempo con nanosec en postgresql?

Usar numeric como tipo base de nanomarcas de tiempo. La función convierte un valor numérico en su representación de marca de tiempo textual:

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

También puede convertir fácilmente valores numéricos en marcas de tiempo normales en los casos en que la superprecisión no sea necesaria, por ejemplo:

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)