sql >> Base de Datos >  >> RDS >> PostgreSQL

Agregar una tabla de usuarios/cuentas a Postgres en Django View

Mi dinero está en un nombre mal escrito. Veo en el mensaje de error que tienes

OmniCloud_App_accounts
OmniCloud_App_user

La segunda tabla usa singular. No hay una segunda mesa como esta por casualidad:

OmniCloud_App_users

Además, el uso de identificadores de mayúsculas y minúsculas en PostgreSQL es una gran fuente de reputación aquí en SO. Te morderá tarde o temprano. Las víctimas de esa locura son asiduos aquí. Tal vez cualquier tabla con este nombre, y olvidó las comillas dobles en "OmniCloud_App_user" en algún lugar?

omnicloud_app_user

Es eso o la transacción que guarda al usuario aún no se ha confirmado. ¿Puede solo crear el usuario (y ninguna cuenta todavía) y verificar si termina en la base de datos correcta en la tabla y con la ID correcta?

Editar:herramientas para diagnosticar el problema

Si sabes que se están creando usuarios, entonces la pregunta es:¿la restricción de clave externa user_id_refs_id_468fbcec324e93d2 mira el lugar correcto? misma base de datos? Mismo esquema? ¿Misma mesa?

Para averiguar qué tablas existen en su base de datos, intente la siguiente consulta (si tiene los privilegios necesarios):

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';

Muestra todas las tablas en todos los esquemas que tienen "usuario" en el nombre, sin distinción entre mayúsculas y minúsculas. Además, si la tabla tiene factores desencadenantes (podría causa su problema) y cuántas filas hay en él (estimación actualizada por ANALYZE ). Podría darte una pista...

También puede usar el meta-comando \d del cliente de línea de comandos estándar (terminal interactivo) psql .

Ejecutaría un caso de prueba y haría que el servidor de postgres registre todo lo que obtenga. Establezca este parámetro para ese propósito:

set log_statement = 'all';

El manual sobre parámetros de registro .

El manual sobre cómo establecer parámetros .