Dette lyder meget som et transaktionsproblem, hvor du ikke er COMMIT
ting dine transaktioner, efter du har udført arbejde, så ændringerne går tabt. Hvis din SQLite-driver som standard er COMMIT
ting transaktioner, der er lukket uden en eksplicit COMMIT
eller rollback, og din Pg-driver er som standard ROLLBACK
, ville du få den opførsel beskrevet. Det samme vil ske, hvis SQLite som standard indstiller hver sætning automatisk, og Pg-driveren som standard åbner en transaktion.
Dette er en af de mange gode grunde til at bruge den samme lokale database til test, som du vil implementere til, når du vil gå live.
Hvis du var på en normal Pg-instans, ville jeg bede dig aktivere log_statement = 'all'
i postgresql.conf
, genindlæs side, og se logfilerne. Du kan ikke gøre det på Heroku, men du har adgang til Pg-logfilerne med heroku logs --ps postgres
. Prøv at køre ALTER USER my_heroku_user SET log_statement = 'all';
, gentestning og undersøgelse af logfilerne.
Alternativt kan du installere Pg lokalt.
Andre mindre sandsynlige muligheder, der kommer til at tænke på:
- Du bruger langvarige SERIALIZABLE-transaktioner til læsninger, så deres øjebliksbillede bliver aldrig opdateret. Temmelig usandsynligt.
- Tilladelser på databaseobjekter forårsager
INSERT
s,UPDATE
s osv. mislykkes, og din app ignorerer de resulterende fejl. Igen, usandsynligt. - Du har
DO INSTEAD
regler, der ikke gør, hvad du forventer, ellerBEFORE
triggere, der returnererNULL
, hvilket stille og roligt forvandler operationer til no-ops. Virker usandsynligt, hvis du tester med SQLite. - Du skriver til en anden DB, end du læser fra. Ikke umuligt i opsætninger, der forsøger at læse fra en klynge af varme standbyer osv.