sql >> Database >  >> RDS >> PostgreSQL

Rails-app op Heroku kan niet schrijven naar PostgreSQL-database, alleen lezen

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, of BEFORE triggers die NULL 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.



  1. MySQL joins en COUNT(*) van een andere tafel

  2. Accent- en hoofdletterongevoelige sortering in Oracle met LIKE

  3. Help me met mijn SQL-query (heb het nodig om altijd ten minste één rij te retourneren.)

  4. Hoe de getelde waarden te krijgen met een kommascheidingsteken als een enkele rijwaarde?