Hallo Forum,
ich möchte bestimmte Einträge löschen. Die entsprechenden Tabellen aus denen ich lösche hole ich mir via einfacher Select Abfrage. Das Resultat ist eine Tabelle mit einer Spalte. Die dortigen Einträge möchte ich nacheinander durchgehen, dies gelingt mir auch, sprich ich kann es über eine RAISE NOTICE Anweisung ausgeben lassen. Vervollständige ich mein Statement jedoch um ein Delete erhalte ich eine Fehlermeldung. Eventuell könnt ihr mir helfen.
mit besten Grüßen und vielen Dank
Balli
FOR tableField IN
SELECT table_name FROM information_schema.tables
WHERE lower(table_name) LIKE 'field_data%' OR lower(table_name) LIKE 'field_revision%' OR lower(table_name) = 'search_api_item' --//Ergebnis wird als tableField abgelegt
LOOP
RAISE NOTICE 'Tabelle: %', tableField.table_name; --//Ausgabe der obigen Selectanweisung funktioniert auch!!!
DELETE
FROM tableField.table_name --//ein Eintrag nach dem anderen durchgehen und eventuell löschen, jedoch funktioniert hier der Aufruf nicht.
WHERE entity_type='node'
AND entity_id = nodeID ;
END LOOP;
Folgende Fehlermeldung erhalte ich:
NOTICE: Tabelle: field_data_comment_body
ERROR: relation "tablefield.table_name" does not exist
LINE 2: FROM tableField.table_name
^
QUERY: DELETE
FROM tableField.table_name
WHERE entity_type='node' -- muss hier rein, sonst werden evtl. auch Collection gelöscht, die zuufällig die selbe ID haben wie der Node
AND entity_id = nodeID
CONTEXT: PL/pgSQL function node_del(integer) line 141 at SQL statement
Fehler
ERROR: relation "tablefield.table_name" does not exist
SQL Status:42P01
Kontext:PL/pgSQL function node_del(integer) line 141 at SQL statement