Alle Fremdschlüssel-Einschränkungen (foreign key constraints) in PostgreSQL löschen

Hat man in PostgreSQL Fremdschlüssel-Einschränkungen („foreign key constraints“) gesetzt, kann man Tabellen die verknüpft sind nicht mehr so einfach leeren, ohne diese Constraints vorher zu löschen.

In bestimmten (eher seltenen) Fällen kommt man in die Situation wo man alle gesetzten Constraints automatisch löschen möchte. Deshalb hier ein Code-Schnippsel um dies in PHP und Doctrine durchzuführen:

function dropForeignKeyConstraints($entityManager) {
    $q = 'SELECT \'ALTER TABLE "\'||nspname||\'"."\'||relname||\'" DROP CONSTRAINT "\'||conname||\'";\' as stmt
            FROM pg_constraint 
            INNER JOIN pg_class ON conrelid=pg_class.oid 
            INNER JOIN pg_namespace ON pg_namespace.oid=pg_class.relnamespace 
            WHERE contype=\'f\'
            ORDER BY CASE WHEN contype=\'f\' THEN 0 ELSE 1 END,contype,nspname,relname,conname';
    $connection = $entityManager->getConnection();
    $result = $connection->fetchAll($q);
    foreach ($result as $row) {
        $stmt = $row['stmt'];
        $connection->executeUpdate($stmt);
    }
}