Tengo una columna de marca de tiempo en una tabla PostgreSQL (13.3) en Supabase. Actualmente almacena marcas de tiempo con una resolución de microsegundos. Quiero enviar las marcas de tiempo a un cliente de JavaScript y usarlas para consultar (a través de Supabase) las filas que coinciden exactamente con este valor de marca de tiempo. Los objetos de fecha de Javascript eliminan los microsegundos y solo almacenan los milisegundos. Podría almacenar la cadena de microsegundos junto con el objeto Fecha (que necesito para la presentación en varios componentes de la interfaz de usuario) en el cliente de JavaScript, pero esto parece innecesariamente complicado y propenso a errores, ya que los datos duplicados podrían perder la sincronización.
¿Es posible forzar que los valores de marca de tiempo creados en PostgreSQL tengan siempre una resolución de milisegundos y no de microsegundos? Actualmente estoy usando lo siguiente para CREATE TABLE y dentro de la función upsert:
CREATE TABLE abc ( -- other fields modified_at timestamp without time zone DEFAULT now()::timestamp(3) NOT NULL ); UPDATE abc SET -- other fields modified_at = now()::timestamp(3) WHERE modified_at = item.modified_at;Relacionado con esta pregunta .
La marca de tiempo acepta un argumento para la cantidad de lugares decimales que se deben mantener para que pueda definir su tabla usando:
modified_at timestamp(3) without time zone DEFAULT now() NOT NULLEsto significa que siempre tendrá 000 microsegundos que siempre funcionarán con el objeto Date de Javascript.
Si quieres puedes usar CREAR DOMINIO :
create domain js_ts timestamptz(3); create table js_tz_test(id int, ts_fld js_ts); \d js_tz_test Table "public.js_tz_test" Column | Type | Collation | Nullable | Default --------+---------+-----------+----------+--------- id | integer | | | ts_fld | js_ts | insert into js_tz_test values (1, now()); select * from js_tz_test ; id | ts_fld ----+---------------------------- 1 | 2021-09-29 09:00:45.626-07 select now()::js_ts; now ---------------------------- 2021-09-29 09:04:55.388-07