sql >> Database >  >> RDS >> PostgreSQL

Een gebruikers-/accounttabel toevoegen aan Postgres in Django View

Mijn geld staat op een verkeerd gespelde naam. Ik zie in de foutmelding dat je

OmniCloud_App_accounts
OmniCloud_App_user

Tweede tafel gebruikt enkelvoud. Er is niet toevallig een tweede tafel zoals deze:

OmniCloud_App_users

Ook het gebruik van mixed case-ID's in PostgreSQL is een geweldige bron van reputatie hier op SO. Het zal je vroeg of laat bijten. Slachtoffers van die dwaasheid zijn hier stamgasten. Elke tabel met deze naam misschien - en je bent de dubbele aanhalingstekens vergeten in "OmniCloud_App_user" ergens?

omnicloud_app_user

Het is dat of de transactie die de gebruiker opslaat, is nog niet vastgelegd. Kun je alleen de gebruiker (en nog geen accounts) aanmaken en controleren of deze in de juiste database in de tabel en met het juiste ID terechtkomt?

Bewerken:hulpmiddelen om het probleem te diagnosticeren

Als je weet dat gebruikers worden gemaakt, dan is de vraag:doet de externe sleutelbeperking user_id_refs_id_468fbcec324e93d2 op de goede plek kijken? Zelfde databank? Zelfde schema? Zelfde tafel?

Om erachter te komen welke tabellen in uw database aanwezig zijn, kunt u de volgende zoekopdracht proberen (als u over de benodigde rechten beschikt):

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

Toont alle tabellen in alle schema's die "gebruiker" in de naam hebben, niet hoofdlettergevoelig. Plus als de tafel triggers heeft (zou uw probleem veroorzaken) en hoeveel rijen erin staan ​​(schatting bijgewerkt door ANALYZE ). Kan je een aanwijzing geven ...

U kunt ook het meta-commando \d . gebruiken van de standaard opdrachtregelclient (interactieve terminal) psql .

Ik zou een testcase uitvoeren en de postgres-server alles laten loggen wat het krijgt. Stel hiervoor deze parameter in:

set log_statement = 'all';

De handleiding over logging-parameters .

De handleiding over hoe parameters in te stellen .



  1. Hoe te repareren "profielnaam is niet geldig" bij het bijwerken van een database-e-mailprofiel in SQL Server (T-SQL)

  2. Waarom is Solr zoveel sneller dan Postgres?

  3. hoe maak ik een bestandsupload in Grails die werkt met Oracle?

  4. Vergelijking van twee db-ontwerpen voor interne berichten