Vous utilisez DROP avec l'option CASCADE. Ainsi, toute suppression de tables ayant une intégrité référentielle supprimera également la table enfant associée à la table parent.
Pour dépanner si c'est réellement ce qui se passe, avant d'exécuter votre code, prenez un instantané des tables existantes avec leur OID (je pense que pg_tables ou pg_relations devraient avoir cette information). Exécutez le code et vérifiez l'OID du message d'erreur avec l'instantané pour le nom de la table.
Edit :C'est peut-être parce que les plans sont mis en cache dans PostgreSQL (donc dans Redshift) pour les fonctions. Il s'agit d'un bogue documenté jusqu'à la version 8.2, vous pouvez donc rechercher un correctif. Le plan sera mis en cache en fonction de la première exécution de la fonction, mais pour la deuxième exécution, certains des objets auront obtenu de nouveaux OID en raison de leur recréation.http://merlinmoncure.blogspot.ie/2007/09/as-previously-stated-postgresql-8.html
http://www.postgresql.org/message-id/example @sqldat.com