DELETE über LOOP

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

Hallo ballibum,

PostgreSQL interpretiert tableField.table_name als Tabellenname.
Du musst das SQL-Statement dynamisch zusammen bauen und dann mit execute ausführen.

Gruß frastr

ack, siehe frastr. Den String zusammensetzen und via execute ausführen, die Doku enthält dazu auch Beispiele. Wenn Du die komplette Tabelle löschen willst, also alle Einträge, kommst Du mit TRUNCATE erheblich schneller, hast keine dead tupel und so.