Dit lijkt veel op een transactieprobleem, waarbij je niet COMMIT
. bent het wijzigen van uw transacties nadat u heeft gewerkt, zodat de wijzigingen verloren gaan. Als uw SQLite-stuurprogramma standaard is ingesteld op COMMIT
transacties die zijn gesloten zonder een expliciete COMMIT
of terugdraaien, en uw Pg-stuurprogramma is standaard ROLLBACK
, zou je het beschreven gedrag krijgen. Hetzelfde zal gebeuren als de SQLite standaard elke instructie automatisch uitvoert en het stuurprogramma van het Pg-stuurprogramma standaard een transactie opent.
Dit is een van de vele goede redenen om voor het testen dezelfde lokale database te gebruiken die u gaat implementeren wanneer u live wilt gaan.
Als je een normale Pg-instantie had, zou ik je zeggen om log_statement = 'all'
in te schakelen in postgresql.conf
, herlaad Pg en bekijk de logs. Dat kan niet op Heroku, maar je hebt wel toegang tot de Pg-logs met heroku logs --ps postgres
. Probeer ALTER USER my_heroku_user SET log_statement = 'all';
uit te voeren , opnieuw testen en de logs bekijken.
U kunt ook Pg lokaal installeren.
Andere, minder waarschijnlijke mogelijkheden die in je opkomen:
- Je gebruikt langlopende SERIALIZABLE-transacties voor leesbewerkingen, dus hun momentopname wordt nooit bijgewerkt. Vrij onwaarschijnlijk.
- Machtigingen op database-objecten veroorzaken
INSERT
s,UPDATE
s, enz. mislukken en uw app negeert de resulterende fouten. Nogmaals, onwaarschijnlijk. - Je hebt
DO INSTEAD
regels die niet doen wat je verwacht, ofBEFORE
triggers dieNULL
retourneren , waardoor operaties geruisloos worden omgezet in no-ops. Lijkt onwaarschijnlijk als je met SQLite test. - Je schrijft naar een andere DB dan je leest. Niet onmogelijk in setups die proberen te lezen uit een cluster van hot standbys, enz.