Stai usando DROP con l'opzione CASCADE. Pertanto, qualsiasi eliminazione di tabelle con integrità referenziale eliminerà anche la tabella figlio associata alla tabella padre.
Per risolvere se questo è effettivamente ciò che sta accadendo, prima di eseguire il codice, fai un'istantanea delle tabelle esistenti con il loro OID (penso che pg_tables o pg_relations dovrebbero avere queste informazioni). Esegui il codice e controlla l'OID del messaggio di errore con lo snapshot per il nome della tabella.
Modifica:potrebbe essere dovuto al modo in cui i piani vengono memorizzati nella cache in PostgreSQL (quindi in Redshift) per le funzioni. Questo è un bug documentato fino alla 8.2, quindi potresti voler cercare una soluzione. Il piano verrà memorizzato nella cache in base alla prima esecuzione della funzione, ma per la seconda esecuzione alcuni oggetti avrebbero ottenuto nuovi OID a causa della ricreazione.http://merlinmoncure.blogspot.ie/2007/09/as-previously-stated-postgresql-8.html
http://www.postgresql.org/message-id/example @sqldat.com