PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

L'app Rails su Heroku non può scrivere nel database PostgreSQL, solo leggere

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, o BEFORE trigger che restituiscono NULL , 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.