1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Fehlermeldung beim einbinden einen Foreigen_key?

Dieses Thema im Forum "PostgreSQL" wurde erstellt von mickyturbo, 22 Januar 2018.

  1. mickyturbo

    mickyturbo Fleissiger Benutzer

    Hallo bin neu im bereich DB (Postgresql),

    möchte Tabelle Users mit Tabelle exchainge_login verbinden, dazu habe ich zur Vorhanden Tabelle Users einen Foreigen Key erstellen wollen der auf Tabelle Exchainge-login referenziert, bekomme aber untere Fehlermeldung.

    Tabelle Users : code pkey
    Tabelle exchainge_login: user_code pkey


    Tabelle Users
    [vorname, nachname, code]
    'Amadeus','Andreas','aa'
    'Loko','Antonijo','lc'
    'Promme','Andreas','pa'
    'johanna','hanzen','jh

    Tabelle exchainge-login
    [user-code, email, password]
    'pa','a.promme@email','GDE#Ra7bL'
    'ae','a.etzholz@email.de','#dsfdsfwgfdsf'


    FEHLER: Einfügen oder Aktualisieren in Tabelle „users“ verletzt Fremdschlüssel-Constraint „users_exchaing_fkey“
    DETAIL: Schlüssel (code)=(jh) ist nicht in Tabelle „exchainge_login“ vorhanden.

    ich nutze pgAdmin 4 und habe die Tabelle exchainge-login hinterher eingefügt die DB war schon vorhanden.

    Die Fehlermeldung sagt aus das code = jh nicht vorhanden ist, aber es müssen doch nicht alle vorhanden sein, sind doch 2 verschiedene Tabellen, oder doch ?

    Vielen Dank.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Willkommen bei PostgreSQL!

    Bitte zeige uns reale Ausgaben von \dt und/oder select * from ..., nicht irgendwas. Laut Deine Angaben fehlt in Users bei code hinten das '. Vermutlich (!) sind da irgend welche Probleme mit Leerzeichen oder so. Zeig doch mal die Ausgabe, wenn Du da sichtbare Zeichen drum herum plazierst, also z.B. select '|' || code || '|' from users.
     
    mickyturbo gefällt das.
  3. mickyturbo

    mickyturbo Fleissiger Benutzer

    Hi,

    danke für deine schnelle Antwort, hoffe so ist es besser. Musste allerdings die Nachnamen weglöschen /editieren da es sich um reelle Personen handelt.

    INFO: ich habe die letzten 3 User angelegt, warum steht dahinter immer ein + Zeichen ??

    # SELECT * FROM users;
    surname | givenname | code
    -------------+------------+----------
    H | Jutta | jh
    D | Detlef | dd
    S | Elaheh | es
    T | Marvin | mt
    A | Zgodzinski | az
    R | André | are
    J | Heim | jhe
    L | Marcus | mli
    S +| Serdar +| ssa
    | |
    E +| Andreas | ae
    | |
    p +| Andreas | ap



    Frage: hier steht das (+) ebenso (von mir angelegt)! Warum ?

    # SELECT * FROM exchainge_login;
    user_code | email | password
    -----------+-----------------------+------------
    ap +| a.promme@mail.de | Xc#Ra7bL +
    | |
    ae +| a.etzkjolz@mail.de | #Start2018+
    | |
    ssa +| s.sarefdg@mail.de | Ra4bLXc#
    | |
    (3 Zeilen)


    # \dt
    Liste der Relationen
    Schema | Name | Typ | Eigentümer
    --------+---------------------------+---------+------------
    public | __software_licenses_BAK | Tabelle | postgres
    public | _def_adaptertypes | Tabelle | postgres
    public | _def_equipmenttypes | Tabelle | postgres
    public | _def_softwaretypes | Tabelle | postgres
    public | _std_sw | Tabelle | postgres
    public | com | Tabelle | postgres
    public | com_equipment | Tabelle | postgres
    public | comdata_simcard | Tabelle | postgres
    public | equipment | Tabelle | postgres
    public | equipment_net_old | Tabelle | postgres
    public | equipmentdata_biospw | Tabelle | postgres
    public | equipmentdata_inv | Tabelle | postgres
    public | equipmentdata_imei | Tabelle | postgres
    public | equipmentdata_login | Tabelle | postgres
    public | equipmentdata_name | Tabelle | postgres
    public | equipmentdata_priv_name | Tabelle | postgres
    public | equipmentdata_room | Tabelle | postgres
    public | equipmentdata_screenspecs | Tabelle | postgres
    public | equipmentdata_storage | Tabelle | postgres
    public | exchainge_login | Tabelle | postgres
    public | net_ipaddresses | Tabelle | postgres
    public | net_macaddresses | Tabelle | postgres
    public | net_routes | Tabelle | postgres
    public | office_locations | Tabelle | postgres
    public | office_netsockets | Tabelle | postgres
    public | office_rooms | Tabelle | postgres
    public | patchpanel_equipment | Tabelle | postgres
    public | software_licenses | Tabelle | postgres
    public | software_licenses_av | Tabelle | postgres
    public | software_licenses_bp | Tabelle | postgres
    public | software_licenses_ca | Tabelle | postgres
    public | software_licenses_cl | Tabelle | postgres
    public | software_licenses_hp | Tabelle | postgres
    public | software_licenses_ma | Tabelle | postgres
    public | software_licenses_me | Tabelle | postgres
    public | software_licenses_mv | Tabelle | postgres
    public | software_licenses_of | Tabelle | postgres
    public | software_licenses_os | Tabelle | postgres
    public | software_licenses_pe | Tabelle | postgres
    public | software_licenses_sm | Tabelle | postgres
    public | software_licenses_vp | Tabelle | postgres
    public | software_licenses_zp | Tabelle | postgres
    public | software_main | Tabelle | postgres
    public | users | Tabelle | postgres
    public | users_equipment | Tabelle | postgres
    (45 Zeilen)

    Danke
     
  4. akretschmer

    akretschmer Datenbank-Guru

    Das hilft nicht. Das, was Du machst, mal kurz nachvollzogen:

    Code:
    test=# create table u (name text, code text primary key);
    CREATE TABLE
    test=*# create table l (code text references u, datum date);
    CREATE TABLE
    test=*# insert into u values ('user1','u ');
    INSERT 0 1
    test=*# insert into l values ('u', current_date);
    FEHLER:  Einfügen oder Aktualisieren in Tabelle »l« verletzt Fremdschlüssel-Constraint »l_code_fkey«
    DETAIL:  Schlüssel (code)=(u) ist nicht in Tabelle »u« vorhanden.
    
    Und was Du machen sollst:

    Code:
    test=*# select name, '|' || code || '|' from u;
     name  | ?column?
    -------+----------
     user1 | |u |
    (1 row)
    
    Da wirst Du sehen, daß hier z.B. nach dem 'u' in der code-Spalte ein Leerzeichen steht. Exakt sowas vermute ich bei Dir auch ;-)
     
  5. mickyturbo

    mickyturbo Fleissiger Benutzer

    oh jehhh!!!
    Super vielen Dank, so ein kleiner Copy & Past fehler.

    DANKE
     
    akretschmer gefällt das.
  6. akretschmer

    akretschmer Datenbank-Guru

    Um diese Frage noch zu beantworten:

    Code:
    test=# create table bla(name text);
    CREATE TABLE
    test=*# insert into bla values ('Line 1');
    INSERT 0 1
    test=*# insert into bla values (E'Line 2\n');
    INSERT 0 1
    test=*# select * from bla;
      name 
    --------
    Line 1
    Line 2+
    (2 rows)
    
    test=*# insert into bla values ('Line 3');
    INSERT 0 1
    test=*# select * from bla;
      name 
    --------
    Line 1
    Line 2+
    Line 3
    (3 rows)
    
    test=*#
    
    Das + ist also ein Newline, mit E'xxx \n' kannst Du solche speziellen Zeichen via z.B. hier \n eingeben.
     
    Zuletzt bearbeitet: 23 Januar 2018
    mickyturbo gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden