Quiero almacenar la identificación del documento en forma de (IP-01, IP-02, IP-03) en la tabla de secuencias. Traté de usar la función de incremento automático en una cadena, pero mostró un error de que solo puede funcionar en un valor INTEGER.
Quiero almacenarlo de tal forma que pueda almacenar y buscar fácilmente en forma de (IP-0X). Así que por favor alguien me puede ayudar
Así que te daré una idea básica, la implementación depende de ti. No hay una función predeterminada disponible con la que pueda incrementar automáticamente el valor de la cadena. Es posible que mi solución no sea la forma óptima de hacerlo, pero supongo que resolverá su problema.
Hay 2 opciones, puede implementar alguna lógica para lograr nuestro resultado requerido.
Al usar la utilidad de count de secuencia, puede contar el número total de columnas y generar la cadena deseada.
//wherever you are creating the document add following const count = (await Document.count()) + 1; const newId = 'IP-' + count; await Document.create({ id: newId, ... });Debe crear una función que devolverá la cadena de identificación en el patrón requerido.
CREATE OR REPLACE FUNCTION get_id() RETURNS varchar LANGUAGE plpgsql AS $$ BEGIN RETURN (SELECT 'IP-' || (SELECT count(1) from table_name) + 1); END; $$;Ahora solo necesita establecer el valor predeterminado de su campo de identificación para llamar a la función.
Antes de realizar los cambios a continuación, debe asegurarse de haber creado la función get_id en su base de datos o, de lo contrario, obtendrá un error de función no definida de la base de datos.
\\add this to file where you define your model id: { type: Sequelize.STRING, defaultValue: Sequelize.fn('get_id') }Aquí hay una demostración de la solución a nivel de base de datos. ENLACE
Puede usar un enfoque más en lugar de contar la cantidad de columnas que puede mantener una Secuencia en su base de datos y obtener el siguiente valor Integer de eso.
CREATE SEQUENCE document_id_seq INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1; -- Then create your get_id function as below: CREATE OR REPLACE FUNCTION get_id() RETURNS varchar LANGUAGE plpgsql AS $$ BEGIN RETURN (SELECT 'IP-' || nextval('document_id_seq')); END; $$;