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

Adicionando uma tabela de usuários/contas ao Postgres no Django View


Meu dinheiro está em um nome com erros ortográficos. Percebo na mensagem de erro que você tem
OmniCloud_App_accounts
OmniCloud_App_user

A segunda tabela usa singular. Não há uma segunda tabela como esta por acaso:
OmniCloud_App_users

Além disso, usar identificadores de maiúsculas e minúsculas no PostgreSQL é uma grande fonte de reputação aqui no SO. Ele vai te morder mais cedo ou mais tarde. As vítimas dessa loucura são regulares aqui. Qualquer tabela com esse nome talvez - e você esqueceu as aspas duplas em "OmniCloud_App_user" em algum lugar?
omnicloud_app_user

É isso ou a transação que salva o usuário ainda não foi confirmada. Você pode apenas criar o usuário (e nenhuma conta ainda) e verificar se ele acaba no banco de dados correto na tabela e com o ID correto?

Editar:ferramentas para diagnosticar o problema


Se você sabe que os usuários estão sendo criados, a pergunta é:a restrição de chave estrangeira user_id_refs_id_468fbcec324e93d2 olha no lugar certo? Mesmo banco de dados? Mesmo esquema? Mesma mesa?

Para descobrir quais tabelas existem em seu banco de dados, tente a seguinte consulta (se você tiver os privilégios necessários):
SELECT n.nspname AS schema_name
      ,c.relname AS table_name
      ,c.relhastriggers
      ,c.reltuples
FROM   pg_catalog.pg_class c
LEFT   JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE  c.relname ~~* '%user%'
AND    c.relkind = 'r'
AND    nspname <> 'pg_catalog';

Mostra todas as tabelas em todos os esquemas que possuem "usuário" no nome, não diferenciando maiúsculas de minúsculas. Além disso, se a tabela tiver gatilhos (poderia causar seu problema) e quantas linhas estão nele (estimativa atualizada por ANALYZE ). Pode te dar uma pista...

Você também pode usar o meta-comando \d do cliente de linha de comando padrão (terminal interativo) psql .

Eu executaria um caso de teste e faria com que o servidor postgres registrasse tudo o que obtivesse. Defina este parâmetro para essa finalidade:
set log_statement = 'all';

O manual sobre parâmetros de log .

O manual sobre como definir parâmetros .