Nie rób
param.Value = dt.ToShortDateString();
zostaw tylko
param.Value = dt;
Próbujesz wstawić ciąg do pola DateTime - na pewno PostgreSQL będzie narzekał.
użyj NpgsqlTypes.NpgsqlDbType.Timestamp, jeśli chcesz uniknąć utraty informacji o czasie