Jeśli masz wiele wartości w kluczu podstawowym, musisz odwoływać się do niego inaczej jako do klucza obcego.
Zasadniczo, kiedy mówisz
FlightID char (20) REFERENCES Flight(FlightID) ON DELETE CASCADE,
PostgreSQL sprawdza ten klucz podstawowy, który nie istnieje (ponieważ kluczem podstawowym w tej tabeli jest (flightid, flightdate)).
Więc upuść REFERENCES
klauzule podczas odwoływania się do tabeli lotu i dodaj
FOREIGN KEY (FlightID, FlightDate) REFERENCES Flight (FlightID, FlightDate)
W sposób, który masz w niektórych innych definicjach tabel.