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

Aggiunta di una tabella utente/account a Postgres in Django View

I miei soldi sono su un nome sbagliato. Noto nel messaggio di errore che hai

OmniCloud_App_accounts
OmniCloud_App_user

La seconda tabella usa il singolare. Non c'è un secondo tavolo come questo per caso:

OmniCloud_App_users

Inoltre, l'utilizzo di identificatori di casi misti in PostgreSQL è un'ottima fonte di reputazione qui su SO. Ti morderà prima o poi. Le vittime di quella follia sono clienti abituali qui. Qualsiasi tabella con questo nome forse - e hai dimenticato le virgolette in "OmniCloud_App_user" da qualche parte?

omnicloud_app_user

O è quello o la transazione che salva l'utente non è stata ancora impegnata. Puoi solo creare l'utente (e nessun account ancora) e controllare se finisce nel database giusto nella tabella e con l'ID giusto?

Modifica:strumenti per diagnosticare il problema

Se sai che gli utenti vengono creati, quindi la domanda è:il vincolo della chiave esterna user_id_refs_id_468fbcec324e93d2 guarda nel posto giusto? Stesso database? Stesso schema? Stesso tavolo?

Per scoprire quali tabelle esistono nel tuo database, prova la seguente query (se hai i privilegi necessari):

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 tutte le tabelle in tutti gli schemi che hanno "utente" nel nome, senza distinzione tra maiuscole e minuscole. Inoltre se la tabella ha attivatori (potrebbe causa il tuo problema) e quante righe contiene (stima aggiornata da ANALYZE ). Potrebbe darti una guida...

Puoi anche usare il metacomando \d del client a riga di comando standard (terminale interattivo) psql .

Vorrei eseguire un test case e fare in modo che il server postgres registri tutto ciò che ottiene. Impostare questo parametro a tale scopo:

set log_statement = 'all';

Il manuale sui logging-parameters .

Il manuale su come impostare i parametri .