You can convert your Oracle query from a hierarchical query to a recursive query in the form:
WITH cycles (path, root_id, child_node_id) AS (
SELECT ',' || child_node_id,
parent_node_id AS root_id,
child_node_id
FROM alf_child_assoc
WHERE parent_node_id > child_node_id
UNION ALL
SELECT c.path || ',' || a.child_node_id,
c.root_id,
a.child_node_id
FROM cycles c
INNER JOIN alf_child_assoc a
ON (c.child_node_id = a.parent_node_id)
WHERE a.parent_node_id != c.root_id
)
SELECT path
FROM cycles
WHERE child_node_id = root_id
Oracle db<>fiddle here
Then all you need to do to convert to PostgreSQL is to add the RECURSIVE keyword:
WITH RECURSIVE cycles (path, root_id, child_node_id) AS (
SELECT ',' || child_node_id,
parent_node_id AS root_id,
child_node_id
FROM alf_child_assoc
WHERE parent_node_id > child_node_id
UNION ALL
SELECT c.path || ',' || a.child_node_id,
c.root_id,
a.child_node_id
FROM cycles c
INNER JOIN alf_child_assoc a
ON (c.child_node_id = a.parent_node_id)
WHERE a.parent_node_id != c.root_id
)
SELECT path
FROM cycles
WHERE child_node_id = root_id
Which, for the sample data:
CREATE TABLE alf_child_assoc (
child_node_id NUMERIC(10,0),
parent_node_id NUMERIC(10,0)
);
INSERT INTO alf_child_assoc (child_node_id, parent_node_id) VALUES (2, 1);
INSERT INTO alf_child_assoc (child_node_id, parent_node_id) VALUES (3, 2);
INSERT INTO alf_child_assoc (child_node_id, parent_node_id) VALUES (1, 3);
Outputs:
PostgreSQL db<>fiddle here