sql >> Databáze >  >> RDS >> PostgreSQL

Přidání tabulky uživatelů/účtů do Postgres v Django View

Moje peníze jsou na špatně napsané jméno. V chybové zprávě jsem si všiml, že máte

OmniCloud_App_accounts
OmniCloud_App_user

Druhá tabulka používá jednotné číslo. Druhý stůl zde není náhodou:

OmniCloud_App_users

Také použití smíšených identifikátorů případu v PostgreSQL je skvělým zdrojem reputace zde na SO. Dříve nebo později vás to kousne. Oběti této pošetilosti jsou zde pravidelné. Možná jakákoli tabulka s tímto názvem – a zapomněli jste na dvojité uvozovky v "OmniCloud_App_user" někde?

omnicloud_app_user

Buď je to tím, nebo transakce zachraňující uživatele ještě nebyla potvrzena. Můžete pouze vytvořit uživatele (a zatím žádné účty) a zkontrolovat, zda skončí ve správné databázi v tabulce a se správným ID?

Upravit:nástroje pro diagnostiku problému

Pokud víte že uživatelé jsou vytvářeni, pak otázka zní:má omezení cizího klíče user_id_refs_id_468fbcec324e93d2 podívat se na správné místo? Stejná databáze? Stejné schéma? Stejný stůl?

Chcete-li zjistit, které tabulky ve vaší databázi existují, zkuste následující dotaz (pokud máte potřebná oprávnění):

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

Zobrazuje všechny tabulky ve všech schématech, které mají v názvu "user", bez ohledu na velikost písmen. Navíc, pokud tabulka obsahuje spouštěče (mohlo způsobit váš problém) a kolik řádků je v něm (odhad aktualizován ANALYZE ). Mohl by vám dát vodítko ...

Můžete také použít meta-příkaz \d standardního klienta příkazového řádku (interaktivní terminál) psql .

Spustil bych testovací případ a nechal postgres server zaprotokolovat vše, co dostane. Pro tento účel nastavte tento parametr:

set log_statement = 'all';

Příručka o parametrech protokolování .

Manuál jak nastavit parametry .



  1. Naklonujte databázi SQLite

  2. Démon MySQL se odmítá spustit pomocí Nelze spustit server:Připojit k portu TCP/IP:Adresa se již používá (není).

  3. Mohu ukládat pole v hstore pomocí Rails

  4. Použití DISTINCT a COUNT společně v dotazu MySQL