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

Rails App på Heroku kan ikke skrive til PostgreSQL-database, kun læse

Dette lyder meget som et transaktionsproblem, hvor du ikke er COMMIT ting dine transaktioner, efter du har udført arbejde, så ændringerne går tabt. Hvis din SQLite-driver som standard er COMMIT ting transaktioner, der er lukket uden en eksplicit COMMIT eller rollback, og din Pg-driver er som standard ROLLBACK , ville du få den opførsel beskrevet. Det samme vil ske, hvis SQLite som standard indstiller hver sætning automatisk, og Pg-driveren som standard åbner en transaktion.

Dette er en af ​​de mange gode grunde til at bruge den samme lokale database til test, som du vil implementere til, når du vil gå live.

Hvis du var på en normal Pg-instans, ville jeg bede dig aktivere log_statement = 'all' i postgresql.conf , genindlæs side, og se logfilerne. Du kan ikke gøre det på Heroku, men du har adgang til Pg-logfilerne med heroku logs --ps postgres . Prøv at køre ALTER USER my_heroku_user SET log_statement = 'all'; , gentestning og undersøgelse af logfilerne.

Alternativt kan du installere Pg lokalt.

Andre mindre sandsynlige muligheder, der kommer til at tænke på:

  • Du bruger langvarige SERIALIZABLE-transaktioner til læsninger, så deres øjebliksbillede bliver aldrig opdateret. Temmelig usandsynligt.
  • Tilladelser på databaseobjekter forårsager INSERT s, UPDATE s osv. mislykkes, og din app ignorerer de resulterende fejl. Igen, usandsynligt.
  • Du har DO INSTEAD regler, der ikke gør, hvad du forventer, eller BEFORE triggere, der returnerer NULL , hvilket stille og roligt forvandler operationer til no-ops. Virker usandsynligt, hvis du tester med SQLite.
  • Du skriver til en anden DB, end du læser fra. Ikke umuligt i opsætninger, der forsøger at læse fra en klynge af varme standbyer osv.



  1. Sådan sletter du et SQL Server Agent-job i Azure Data Studio

  2. Hvordan fjerner man dårlige tegn, der ikke er egnede til utf8-kodning i MySQL?

  3. django karaktersæt med MySQL weirdness

  4. Codeigniter, mysql, select_max og tilføj 1 før du indsætter endnu en post