Soy nuevo en postgresql y necesito un poco de ayuda. Tengo una tabla llamada productos.
ID Product Parent_ID 1 laptop Null 2 Camera 1 3 Iphone 1 4 Mouse 2 5 Printer 2 6 Scanner 3 7 HardDisk 3Quiero crear una función en postgres para obtener la jerarquía de la cadena principal de cualquier valor que pase como si pasara 4, entonces mi salida debería ser
id parent_id 1 Null 2 1 4 2Sugeriría usar la cláusula "recursiva con". Compruebe amablemente a continuación la consulta.
WITH RECURSIVE recursiveTable AS ( SELECT id, parent_id FROM table_name WHERE id = 4 -- you can pass an id here to get the output UNION ALL SELECT t.id, t.parent_id FROM table_name t JOIN recursiveTable rt ON t.id = rt.parent_id ) SELECT * FROM recursiveTablePuede leer más sobre la cláusula recursiva con en sus sitios web oficiales. O puede consultar un par de ejemplos.
Aquí hay un enlace http://technobytz.com/recursive-query-e Evaluation-postgresql.html
Función: Prueba esto
CREATE OR REPLACE FUNCTION function_name(param_id INT) RETURNS TABLE ( id INT, parent_id INT ) AS $$ BEGIN RETURN QUERY WITH RECURSIVE recursiveTable AS ( SELECT t.id, t.parent_id FROM table_name t WHERE t.id = param_id -- you can pass an id here to get the output UNION ALL SELECT t.id, t.parent_id FROM table_name t JOIN recursiveTable rt ON t.id = rt.parent_id ) SELECT * FROM recursiveTable ; END; $$ LANGUAGE 'plpgsql';Ejecución de la función: seleccione * from function_name(4)