PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O aplicativo Rails no Heroku não pode gravar no banco de dados PostgreSQL, apenas ler


Isso soa muito como um problema de transação, onde você não está COMMIT ting suas transações depois de trabalhar, então as alterações são perdidas. Se o padrão do seu driver SQLite for COMMIT ting transações que são fechadas sem um COMMIT explícito ou rollback, e seu driver Pg padroniza para ROLLBACK , você obteria o comportamento descrito. O mesmo acontecerá se o SQLite usar como padrão a confirmação automática de cada instrução por padrão, e o driver do driver Pg usar como padrão a abertura de uma transação.

Esse é um dos muitos bons motivos para usar o mesmo banco de dados local para teste no qual você vai implantar quando quiser entrar em operação.

Se você estivesse em uma instância normal do Pg, eu diria para você habilitar log_statement = 'all' em postgresql.conf , recarregue o Pg e observe os logs. Você não pode fazer isso no Heroku, mas você tem acesso aos logs do Pg com heroku logs --ps postgres . Tente executar ALTER USER my_heroku_user SET log_statement = 'all'; , testando novamente e examinando os logs.

Como alternativa, instale o Pg localmente.

Outras possibilidades menos prováveis ​​que vêm à mente:
  • Você está usando transações SERIALIZABLE de longa duração para leituras, de modo que o instantâneo nunca é atualizado. Bastante improvável.
  • Permissões em objetos de banco de dados estão causando INSERT s, UPDATE s, etc para falhar, e seu aplicativo está ignorando os erros resultantes. Novamente, improvável.
  • Você tem DO INSTEAD regras que não fazem o que você espera, ou BEFORE gatilhos que retornam NULL , transformando silenciosamente as operações em no-ops. Parece improvável se você estiver testando com SQLite.
  • Você está escrevendo para um banco de dados diferente do que está lendo. Não é impossível em configurações que estão tentando ler de um cluster de hot standbys etc.