Fehlermeldung beim einbinden einen Foreigen_key?

mickyturbo

Fleissiger Benutzer
Beiträge
54
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.
 
Werbung:
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.
 
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
 
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 ;-)
 
Werbung:
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 ?

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:
Zurück
Oben