sql >> Databáze >  >> RDS >> PostgreSQL

Aplikace Rails na Heroku nemůže zapisovat do databáze PostgreSQL, pouze číst

To zní hodně jako problém s transakcí, kde nejste COMMIT po práci, takže změny budou ztraceny. Pokud je výchozí nastavení vašeho ovladače SQLite COMMIT ting transakcí, které jsou uzavřeny bez explicitního COMMIT nebo rollback a váš ovladač Pg se automaticky nastaví na ROLLBACK , dostanete popsané chování. Totéž se stane, pokud SQLite ve výchozím nastavení automaticky zadává každý příkaz a ovladač ovladače Pg jako výchozí otevírá transakci.

Toto je jeden z mnoha dobrých důvodů, proč používat stejnou místní databázi pro testování, do jaké se chystáte nasadit, když chcete spustit.

Pokud byste byli na normální instanci Pg, řekl bych vám, abyste povolili log_statement = 'all' v postgresql.conf , znovu načtěte Pg a sledujte protokoly. Na Heroku to udělat nemůžete, ale máte přístup k Pg logům pomocí heroku logs --ps postgres . Zkuste spustit ALTER USER my_heroku_user SET log_statement = 'all'; , opětovné testování a zkoumání protokolů.

Případně nainstalujte Pg lokálně.

Další méně pravděpodobné možnosti, které vás napadnou:

  • Pro čtení používáte dlouhodobé transakce SERIALIZABLE, takže jejich snímek se nikdy neaktualizuje. Docela nepravděpodobné.
  • Oprávnění k databázovým objektům způsobují INSERT s, UPDATE s atd. selžou a vaše aplikace výsledné chyby ignoruje. Opět nepravděpodobné.
  • Máte možnost DO INSTEAD pravidla, která nedělají to, co očekáváte, nebo BEFORE spouštěče, které vracejí NULL , čímž se operace tiše změní na neoperace. Zdá se to nepravděpodobné, pokud testujete s SQLite.
  • Píšete do jiné DB, než ze které čtete. Není to nemožné v nastaveních, která se pokoušejí číst ze skupiny aktivních pohotovostních režimů atd.



  1. Postgresql - existuje způsob, jak zakázat zobrazování příkazů INSERT při čtení ze souboru?

  2. Dynamické vzorkování Killing Me ve 12c

  3. mysql falešný výběr

  4. Jak vypočítat rozdíl mezi dvěma časovými razítky v Oracle