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, ouBEFORE
gatilhos que retornamNULL
, 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.