Questo suona molto come un problema di transazione, in cui non sei COMMIT
modificando le tue transazioni dopo aver lavorato, quindi le modifiche andranno perse. Se il tuo driver SQLite è predefinito su COMMIT
transazioni che vengono chiuse senza un esplicito COMMIT
o rollback e il tuo driver Pg è impostato su ROLLBACK
, otterresti il comportamento descritto. Lo stesso accadrà se per impostazione predefinita SQLite esegue il commit automatico di ciascuna istruzione e il driver del driver Pg apre una transazione per impostazione predefinita.
Questo è uno dei tanti buoni motivi per utilizzare lo stesso database locale per i test in cui andrai a distribuire quando vorrai andare in diretta.
Se fossi su una normale istanza Pg ti direi di abilitare log_statement = 'all'
in postgresql.conf
, ricarica Pg e guarda i log. Non puoi farlo su Heroku, ma hai accesso ai log di Pg con heroku logs --ps postgres
. Prova a eseguire ALTER USER my_heroku_user SET log_statement = 'all';
, ritestare ed esaminare i log.
In alternativa, installa Pg in locale.
Altre possibilità meno probabili che mi vengono in mente:
- Stai utilizzando transazioni SERIALIZABLE di lunga durata per le letture, quindi il loro snapshot non viene mai aggiornato. Abbastanza improbabile.
- Le autorizzazioni sugli oggetti del database stanno causando
INSERT
s,UPDATE
s, ecc. per non riuscire e la tua app sta ignorando gli errori risultanti. Ancora una volta, improbabile. - Hai
DO INSTEAD
regole che non fanno quello che ti aspetti, oBEFORE
trigger che restituisconoNULL
, trasformando così silenziosamente le operazioni in no-ops. Sembra improbabile se stai testando con SQLite. - Stai scrivendo su un DB diverso da quello da cui stai leggendo. Non impossibile in configurazioni che tentano di leggere da un cluster di hot standby, ecc.