Det här låter mycket som ett transaktionsproblem, där du inte är COMMIT
göra dina transaktioner efter att du har arbetat, så att ändringarna går förlorade. Om din SQLite-drivrutin har som standard COMMIT
transaktioner som avslutas utan en uttrycklig COMMIT
eller rollback, och din Pg-drivrutin är som standard ROLLBACK
, skulle du få beteendet beskrivet. Samma sak kommer att hända om SQLite standardinställer att autocommitting varje sats som standard, och Pg-drivrutinen som standard öppnar en transaktion.
Detta är ett av många goda skäl att använda samma lokala databas för testning som du ska distribuera till när du vill gå live.
Om du var på en normal Pg-instans skulle jag säga till dig att aktivera log_statement = 'all'
i postgresql.conf
, ladda om sidan och titta på loggarna. Du kan inte göra det på Heroku, men du har tillgång till Pg-loggarna med heroku logs --ps postgres
. Testa att köra ALTER USER my_heroku_user SET log_statement = 'all';
, testa om och undersöka loggarna.
Alternativt, installera Pg lokalt.
Andra mindre troliga möjligheter som kommer att tänka på:
- Du använder långvariga SERIALIZABLE-transaktioner för läsningar, så deras ögonblicksbild uppdateras aldrig. Ganska osannolikt.
- Behörigheter för databasobjekt orsakar
INSERT
s,UPDATE
s, etc misslyckas, och din app ignorerar de resulterande felen. Återigen, osannolikt. - Du har
DO INSTEAD
regler som inte gör som du förväntar dig, ellerBEFORE
triggers som returnerarNULL
, vilket tyst förvandlar operationer till no-ops. Verkar osannolikt om du testar med SQLite. - Du skriver till en annan DB än du läser från. Inte omöjligt i inställningar som försöker läsa från ett kluster av heta standbylägen, etc.