Start mit pgAdmin

Hallo,

versuche mich gerade in SQL einzuarbeiten, scheitere aber bereits bei der Erstellung und dem Befüllen der Tabellen und dem Vergeben der Primär- und Fremdschlüssel.
Ich habe leider keinen Anfänger-Thread gefunden und hoffe trotzdem, hier bin ich richtig.
Ich versuche das mit pgAdminIII, nicht postgreSQL, weil ich eine Phobie vor Eingabeaufforderungen habe. Es wäre schön, wenn mir jemand auf die Sprünge helfen könnte, ich verzweifle langsam. Vielen Dank

Ich möchte eine Tabelle ‚personal‘ erstellen und die darauffolgend dann per INSERT über csv befüllen.

CREATE TABLE personal
(
Personalnummer Numeric(5,0) NOT NULL,
Vorname CHAR(30),
Name CHAR (30) NOT NULL,
Strasse CHAR (30),
PLZ CHAR (6),
Ort CHAR (30),
Geburt DATETIME,
Geschlecht CHAR (1),
Gehalt NUMERIC(6,2)
CONSTRAINT pnr PRIMARY KEY (Personalnummer)
)
;

Wenn ich die Abfrage in pgAdminIII ausführe, erhalte ich:

FEHLER:  Syntaxfehler bei »(«
LINE 12: CONSTRAINT pnr PRIMARY KEY (Personalnummer)
                                    ^
 
 
********** Fehler **********
 
FEHLER: Syntaxfehler bei »(«
SQL Status:42601
Zeichen:239

Was mache ich falsch?
Danke Carsten

Hi,

fehlt da nicht nach dem Gehalt NUMERIC(6,2) ein Komma?

cu tb

Exakt. Außerdem gibt es DATETIME nicht und ich wage zu bezweifeln, ob NUMERIC sinnvoll für eine personalnummer ist. Ob es sinnvoll ist,Namen und Straße auf eine fixe Länge zu begrenzen sei dahingestellt.


Andreas

Vielen Dank mit Komma und DATE komme ich weiter. Ich werde sicherlich noch weitere solcher Anfängerfehlerfragen haben bis ich es kann. Bin ich damit hier richtig oder besser unter “SQL”? Eine Beginner-Columne habe ich nicht finden können.

Ja, SQL wäre vielleicht besser. Im übrigen, der Commandozeilen-Client ist es wert, zumindest mal angesehen zu werden. Ich arbyte NUR damit.

Andreas

Vielleicht komme ich irgendwann über diesen Umweg zur Commandozeile. ZUerst möchte ich aleinigermaßen klar kommen. Mein Ziel wäre für euch ein Kinderspiel (5 Tabellen normalisieren, referenzieren, eine Spalte aus alter dBase Datei importieren, Daten bereinigen und richtige Formate setzen). Für mich ist es sehr schwer, da ich’s nur schwer lerne und leider wenig Zeit habe. Und ich möchte auch nicht zu sehr nerven.
Carsten

Mit solch einem überschaubaren Projekt anzufangen ist sicher kein falscher Start. Viel Erfolg!

Andreas

Hi,

ich bin neu hier, genauso wie in der Materie PostgreSQL und PostGIS.
Da ich ebenfalls ein Problem direkt zum Start hin mit dem pgAdmin habe, schreibe ich es einfach mal in diesen Thread. Falls ich hier falsch bin, bitte verschieben.
Es geht um folgendes: Ich habe eine Testdatenbank mit PostgreSQL 9.4 erstellt und 2 Tabellen erstellt.
Die Erste heißt Projekte und besteht aus 2 Spalten (Projektnummer, Projektname). Ich habe diese mit dem Datenimport gefüllt und habe den PrimaryKey auf Projektnummer gelegt…
Alles super… alles einfach… nun zur Zweiten: Hier gibt es 5 Spalten (Projektnummer, Bohrungsname, Rechtswert, Hochwert, Ansatzhöhe). Hier habe ich den PrimaryKey auf Bohrungsname gelegt… Funktioniert auch super. Vorher habe ich natürlich wieder Datensätze importiert… Nun kommt das Problem:
Ich möchte den ForeignKey setzen, also die Spalte Projektnummer aus der TAbelle Bohrungen mit der Spalte Projektnummer (welche PK ist) aus der TAbelle Projekte verknüpfen und bekomme folgenden Fehler:
FEHLER: Einfügen oder Aktualisieren in Tabelle “Bohrungen” verletzt Fremdschlüssel-Constraint “Projektnummer”
DETAIL: Schlüssel (Projektnummer)=(215219) ist nicht in Tabelle “Projekte” vorhanden.
Tatsächlich ist diese Projektnummer abre dort vorhanden.
Ich verstehe den Fehler einfach nicht.
Es wäre super wenn jemand einen Lösungsvorschlag hat… Ich tippe mal auf irgendwelche Indizies oder sowas… Denn vor einer Woche hat das mit den selben Tabellen einwandfrei funktioniert.

-- Table: "Projekte"

-- DROP TABLE "Projekte";

CREATE TABLE "Projekte"
(
  "Projektnummer" character varying(264) NOT NULL,
  "Projektname" character varying(264),
  CONSTRAINT "Projektnummer" PRIMARY KEY ("Projektnummer")
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "Projekte"
  OWNER TO postgres;
GRANT ALL ON TABLE "Projekte" TO postgres;
GRANT ALL ON TABLE "Projekte" TO public;



-- Table: "Bohrungen"

-- DROP TABLE "Bohrungen";

CREATE TABLE "Bohrungen"
(
  "Projektnummer" character varying(264) NOT NULL,
  "Bohrungsname" character varying(264) NOT NULL,
  "Rechtswert" character varying(264),
  "Hochwert" character varying(264),
  "Ansatzhoehe" character varying(264),
  CONSTRAINT "Bohrungsname" PRIMARY KEY ("Bohrungsname"),
  CONSTRAINT "Projektnummer" FOREIGN KEY ("Projektnummer")
      REFERENCES "Projekte" ("Projektnummer") MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "Bohrungen"
  OWNER TO postgres;
GRANT ALL ON TABLE "Bohrungen" TO public;
REVOKE ALL ON TABLE "Bohrungen" FROM postgres;

-- Index: "fki_Projektnummer"

-- DROP INDEX "fki_Projektnummer";

CREATE INDEX "fki_Projektnummer"
  ON "Bohrungen"
  USING btree
  ("Projektnummer" COLLATE pg_catalog."default");

Wenn der Fehler so kommt, wird auch was wahres dran sein. Warum verwendest Du für eine NUMMER (projektnummer) einen varchar? Vermutlich hast Du da Leerzeichen im String, daher der Fehler.

Allgemein: Du scheints bisher nur einen Datentypen zu kennen, oder? “Ansatzhoehe” klingt für mich auch nach INT oder Numerisch, nicht aber varchar(264).

hi, nunja ich kenne nicht nur den einen Datentyp, aber genau darum geht es bei dieser Testdatenbank… ich muss rausfinden wie es am besten passt.
Mit dem Leerzeichen, ist eine gute Richtung… Habe ich auch schon überprüft… Ist leider nicht so… aber ich werde mal die Projektnummer auf Integer setzen und mal schauen. Bei der Ansatzhöhe bin ich mir noch nicht sicher ob das m NN mit in die einzelnen Zeilen kommt oder eben einfach in den Spaltennamen.
Ich melde mich

Hallo!
Eine Projektnummer kann man schon als varchar darstellen, da können auch alphanumerische Zeichen drin sein. Ich mache das wenn möglich so, das ich eine interne id per serial vergebe, die kein Nutzer zu Gesicht bekommt und die Projektnummer als Unique und für den Nutzer sichtbar mache. So bleibt mein Datenmodell immer konsistent, egal was passiert :wink:
Für Ansatzpunkthöhe würde ich numeric verwenden und ein Feld ‘srid’ einführen, das das koodinatensystem enthält. So kannst du Koordinaten verschiedener Systeme verwenden. Ähnliches kannst du auch für die Höhenangabe machen, z.B. zur Unterscheidung SKN oder NN.

Gruß Uwe

PS: Ich baue gerade eine recht umfangreiche Aufschlußdatenbank, frag also ruhig :wink:

nun sagt er mir, dass 215001 eine ungültige Eingabesyntax für ganze Zahlen ist… langsam bin ich verwirrt

hi uwe… ja wir versuchen auch gerade eine seeehr umfangreiche AUfschlußdatenbank zu bauen, inklusive der einzelnen Schichten pro Bohrung ^^

Gute Idee mit dem Koordinatensystem… Aber wir verwenden nur das GK4 bzw messen nur damit ein oder rechnen um ^^

also heißt das du vergibst eine art interne ID unabhängig von der Projektnummer? aber ich versuche ja meine Bohrungen dem entsprechenden projekt zuzuweisen… die ganze geschichte soll später mit QGIS dargestellt werden ^^


-- Table: "Projekte"

-- DROP TABLE "Projekte";

CREATE TABLE "Projekte"
(
  "Projektnummer" integer NOT NULL,
  "Projektname" character varying(264),
  CONSTRAINT "Projektname" PRIMARY KEY ("Projektnummer")
)
WITH (
  OIDS=FALSE
);
ALTER TABLE "Projekte"
  OWNER TO postgres;

zeig doch mal die genaue Fehlermeldung und das Statement dazu.

zeigen kann ich das leider nicht, da ich es über die Importmaske von pgadmin mache…

da steht dann einfach:

FEHLER: ungültige Eingabesyntax für ganze Zahl:“215001”
CONTEXT: COPY Projekte, Zeile 1, Spalte Projektnummer: 215001"

Sehe ich da ein " mit?

test=*# select '215001'::int;
  int4
--------
 215001
(1 row)

test=*# select '215001"'::int;
ERROR:  invalid input syntax for integer: "215001""
LINE 1: select '215001"'::int;

ne sorry hatte nur ein " davor vergessen… so steht es einfach in dieser fehlermeldung

muss ich meiner txt ein komam als trennzeichen setzen oder irgendwas anderes??? bisher hat es super mit tabstopps geklappt… aber das funktioniert mit dem integer nicht…

hier mal die zu importierenden Daten (Projektname gekürzt)

215001	 Rue
215002	 Bau
215003	 EFH
215004	 Bet
215005	 B 2
215006	 Kan
215007	 Ers
215008	 Akt
215009	 Neu
215010	 Ori
215011	 Was
215012	 Ber
215013	 Mas
215014	 Umb
215015	 BV 
215016	 Neu
215017	 LPB
215018	 Fac
215019	 Ers
215020	 Beb
215021	 Kin
215022	 P u
215023	 Aus
215024	 Umw
215025	 Ver
215026	 Umw
215027	 Bew
215028	 Woh
215029	 Ber
215030	 Ori
215031	 Sta
215032	 St 
215033	 San
215034	 Abf
215035	 Gru
215036	 Gru
215037	 Fre
215038	 Bau
215039	 ori
215040	 San
215041	 Bau
215042	 K28
215043	 Pol
215044	 San
215045	 Ori
215046	 Ver
215047	 Abf
215048	 Was
215049	 Woh
215050	 Bru
215051	 Ber
215052	 Abn
215054	 Nut
215053	 Zwe
215055	 EFH
215056	 ins
215057	 Umb
215058	 Feu
215059	 Mac
215060	 Mac
215061	 Bew
215062	 Sta
215063	 Ers
215064	 Aus
215065	 San  
215066	 Ber
215067	 Ers
215068	 Erw
215069	 Neu
215070	 GW_
215071	 Ber
215072	 Rad
215073	 Nie
215074	 4 E
215075	 Hel
215076	 Det
215077	 KCW
215078	 Geo
215082	 Ber
215079	 Aus
215080	 Hyd
215083	 Kre
215081	 ehe
215084	 Abf
215085	 Ges
215086	 Meh
215087	 Ers
215088	 LPB
215089	 San
215090	 Kri
215091	 Reg
215092	 GW_
215093	 Ber
215094	 Ros
215095	 Lae
215096	 Ber
215097	 Umg
215098	 Ori
215099	 Erw
215100	 Kan
215101	 Fus
215102	 San
215103	 Ver
215104	 Tec
215105	 Hal
215106	 Ber
215107	 Ska
215108	 Gew
215109	 Kop
215110	 PSW
215111	 Ber
215112	 Mon
215113	 Ers
215114	 PSW
215115	 Abf
215116	 Neu
215118	 Bau
215117	 St 
215119	 Ber
215120	 Ori
215121	 Sch
215122	 Det
215123	 Ber
215124	 Sta
215125	 Ver
215126	 Gew
215127	 Gew
215128	 Win
215129	 Ber
215130	 Ber
215131	 Ber
215132	 Bau
215133	 Ber
215134	 EFH
215135	 Neu
215136	 Ber
215137	 Tra
215138	 Aus
215139	 Abf
215140	 Fac
215141	 Fac
215142	 Ber
215143	 Sch
215144	 BV 
215145	 Med
215146	 Ber
215147	 BAB
215148	 Ber
215149	 Beu
215150	 Woh
215151	 Bau
215152	 Hyd
215153	 PSW
215154	 PSW
215155	 Rue
215156	 Stu
215157	 Ori
215158	 Erg
215159	 B 2
215160	 Ber
215161	 Bew
215162	 Sta
215163	 Ber
215164	 Ber
215165	 Ers
215166	 SKZ
215167	 Fac
215168	 Neu
215169	 Ber
215170	 Lag
215171	 Abf
215172	 Erw
215173	 Ber
215174	 Meh
215175	 Ert
215176	 Neu
215177	 Aus
215178	 Ber
215179	 Was
215180	 PSW
215181	 Ver
215182	 Ber
215183	 Ori
215184	 Umg
215185	 Erw
215186	 Erw
215187	 Ori
215188	 Dek
215189	 Abf
215190	 Erg
215191	 Fun
215192	 Anb
215193	 Ers
215194	 BV 
215195	 Ers
215196	 Abf
215197	 Fac
215198	 Zus
215199	 Ers
215200	 Dr.
215201	 Bah
215202	 Hyd
215203	 PSW
215204	 Meh
215205	 Tie
215206	 Bau
215207	 Tan
215208	 Stu
215209	 EFH
215210	 Pro
215211	 GW_
215212	 Was
215213	 Erg
215214	 Anb
215215	 Ber
215216	 Anb
215217	 Ers
215218	 Feu
215219	 BV 
215220	 Ers
215221	 Mod
215222	 Meh
215223	 Was
215224	 Ver
215225	 Bem
215226	 BAB
215227	 Was
215228	 Ber
215229	 Was
215230	 Erw
215231	 Ori
215232	 Fac
215233	 Abb
215234	 Hal
215235	 2. 
215236	 Sta
215237	 Ori
215238	 Gra
215239	 Fel
215240	 Was
215245	 Ber
215241	 Tra
215242	 BV 
215243	 Bau
215244	 GW_
215246	 Ver
215247	 Ver
215248	 Ver
215249	 Pro
215250	 Ver
215251	 Ber
215252	 Bru
215253	 Kan
215254	 Ori
215255	 Ber
215256	 Erw
215257	 Par
215258	 Abf
215260	 Gru
215259	 REW
215261	 Han
215262	 Beb
215263	 Beb
215264	 Sta
215265	 LNG
215266	 GW-
215267	 Ver
215268	 EFH
215270	 St 
215269	 Ber
215271	 Spr
215272	 Anb
215273	 Bau
215274	 Bes
215275	 Stu
215276	 Abf
215277	 Ver
215278	 Ver
215279	 Abf
215280	 Ori
215281	 Ori
215282	 PSW
215283	 Ber

stehen da Tabs zwischen den Spalten?

jap
hat bisher gut geklappt beim import als txt

probier es mal direkt in psql. hier geht es.