Buen día, estoy intento crear un código único concatenado tomando datos de la función ROW_NUMBER debería hacer lo siguiente:
Tengo una base de datos postgresql que contiene datos geográficos para ser visualizados en un software GIS. Básicamente es una tabla donde se guardan datos sobre centros poblados, estos centros poblados tienen datos que al concatenarlos se intenta crear códigos únicos. id(serial) Ccentpob (Primary Key) Nombre (Character) cod_cent (Fk_Key) sim_cent (Fk_Key) row_number (Integer) 1 La Guaira 24 VAR 2 Maiquetía 24 VAR 3 Cabudare 13 LAR 4 Barquisimeto 13 LAR 5 Maracay 05 ARA 6 Palo Negro 05 ARA Utilizando una consulta con la función ROW_NUMBER, logro numerar de cada Centro Poblado en función a la entidad federal que pertenecen: SELECT Id,ccentpob,nombre,cod_cent,sim_cent, ROW_NUMBER ( ) OVER (PARTITION BY cent) la cual me permite, llevar una secuencia de los datos en función a sus diferentes entidades federales centros poblados. Por lo que esta consulta queda así: id(serial) Ccentpob (Primary Key) Nombre (Character) cod_cent (Fk_Key) sim_cent (Fk_Key) row_number (Integer) 1 La Guaira 24 VAR 1 2 Maiquetía 24 VAR 2 3 Cabudare 13 LAR 1 4 Barquisimeto 13 LAR 2 5 Los Crepusculos 13 LAR 3 6 Palo Negro 05 ARA 1 Hasta aquí todo funciona perfecto. Al probar esto como una consulta intento ponerlo en un función que permita utilizar un trigger, que se va a activar cada que que al insertar un dato desde el SIG, se enumere el dato siguiendo la secuencia. Lo que me va a permita concatenar los datos para crear el ccentpob que es el único dato que me falta. La función que utilizo es la siguiente: CREATE TRIGGER row_number BEFORE INSERT ON nombres_geograficos.ba_2202_100101_n_vargas_centros_poblados FOR EACH ROW EXECUTE PROCEDURE nombres_geograficos.row_number(); CREATE OR REPLACE FUNCTION nombres_geograficos.row_number() RETURNS TRIGGER AS ' DECLARE row_number numeric; BEGIN IF NEW.cent IS NOT NULL THEN row_number := (SELECT ROW_NUMBER ( ) OVER (PARTITION BY cent) FROM nombres_geograficos.ba_2202_100101_n_vargas_centros_poblados); END IF; RETURN NEW; END' language PLPGSQL; Compilo todo y no me da error, pero cuando intento usar el Qgis 2.18 me da un error… y no me almacena el dato. Dice que el dato no esta almacenado, estoy consiente que el ROW_NUMBER es un dato temporal, sea parte de la tabla para así poder ejecutar mi trigger con éxito. Alguien tiene alguna sugerencia. Se lo agradecería de verdad.