Tengo una tabla de postgres con dos columnas (un identificador y una fecha) que son una clave principal compuesta. Me gustaría codificar la concatenación en otra columna, generando este valor cada vez que se inserta un nuevo registro. Para eso, estoy tratando de modificar mi tabla para crear una columna generada:
ALTER TABLE my_table ADD COLUMN hash_id_date VARCHAR(50) GENERATED ALWAYS AS (MD5(my_table.original_id||'-'||my_table.time)) STORED;Esto me plantea el siguiente error:
ERROR: syntax error at or near "(" LINE 4: GENERATED ALWAYS AS (MD5(my_table.original_id,'-',my_table.t... ^ SQL state: 42601 Character: 178 Me estoy volviendo loco por encontrar dónde está el error de sintaxis... He leído sobre funciones STABLE e IMMUTABLE y las columnas generadas siempre deben tener una función IMMUTABLE como expresión. Por lo que sé, MD5 es IMMUTABLE , pero el mensaje de error ni siquiera es capaz de alcanzar ese nivel.
¿Alguna ayuda?
Suponiendo que la funcionalidad básica para calcular el MD5 es común, puede crear una función para el cálculo. Use esta función donde sea necesario, incluida la actualización de sus filas actuales e invoque desde un activador en su tabla. Si el cálculo MD5 en particular no es tan común, simplemente puede poner el cálculo en la función de activación y también usarlo en una actualización independiente para las filas actuales. Vea aquí, por ejemplo, con la suposición de que es común en su aplicación.