Also jetzt genauer:
Die Spalte Artikel und Zeit sind der PK.
Typ von Zeit ist timestamp.
Spalte id ist leer und muß nachträglich gefüllt werden.
Soll eine einmalige Aktion sein, später dann mit Insert-Trigger in der Form
BEGIN
new.id=(select max(id) from tabelle where artikel = new.artikel group by artikel)+1;
RETURN new;
END;
Geht auch schon, muß eben nur noch die id Werte vor Einsatz des Triggers generieren.
update mySchema.“myTable” set myIdColumn = nextval(‘mySchema.“myTable_myIdColumn_seq”’::regclass);
voila
ich hab das jetzt mal ein bissel verallgemeinert …
das funktioniert auf jeden fall einfach mal so, wenn die Tabelle sowie den Primary-Key (autowert) mit dem PGAdmin erzeugt hast. Dann sollte für diesen Primary-Key eben auch eine entsprechende Sequence existieren … (diese Sequence sollte sich ueber eben diesen PGAdmin leicht ermitteln lassen -> Table wählen und rechts Reiter “Abhängige” anzeigen)
Also du kannst dir natürlich so eine Sequence auch selbst basteln - aber ich denke mal das brauchst du nicht - weil schon alles da.
Gruß
Steffen
— NACHTRACH —
wenn du keine Seqence auf deiner id-spalte hast und eine moechtest CREATE SEQUENCE mySchema.“mySequence” INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1;
ALTER TABLE mySchema.“myTable_myIdColumn_seq” OWNER TO <der owner eben - am besten jener von der Tabelle>;
ich hab das jetzt mal ein bissel verallgemeinert …
das funktioniert auf jeden fall einfach mal so, wenn die Tabelle sowie den Primary-Key (autowert) mit dem PGAdmin erzeugt hast.
Der PK geht über (artikel,zeit).
Dann sollte für diesen Primary-Key eben auch eine entsprechende > Sequence > existieren … (diese > Sequence > sollte sich ueber eben diesen PGAdmin leicht ermitteln lassen → Table wählen und rechts Reiter “Abhängige” anzeigen)
Wird nicht funktionieren.
Also du kannst dir natürlich so eine > Sequence > auch selbst basteln - aber ich denke mal das brauchst du nicht - weil schon alles da.
Gruß
Steffen
Er wird mehrere Sequencen brauchen - für jeden Artikel eine.
er will mit max(id) ne id-spalte fuellen - da muessen doch die alarmglocken laeuten … er redet von einer einmaligen aktion - weil der bisherige key nicht mehr der zukuenftige sein wird … er will eine id-spalte einfuehren …
Ähm. Der Fragesteller will sowas wie eine fortlaufende Zählung nach einer Gruppierung, diese Spalte als id zu bezeichnen ist allerdings irreführend. Das ändert nix daran, daß es ein Stück weit unhöflich ist, sein Problem als Quatsch zu bezeichnen ohne eine Lösung bieten zu können.
Davon abgesehen, mir ist egal, wie DU Dich hier zum Affen machst. Du bist nicht verpflichtet zu antworten, insbesondere dann, wenn Du nix inhaltliches beitragen kannst. Man kann es Dir allerdings auch nicht verbieten. Ich zumindest nicht.
Falls Du ein Problem mit meiner Person hast, dann sag mir das per eMail und vergewaltige nicht das Forum.
und zweitens … habe ich sehrwohl gesehen, dass er da groben Unfug anstellt um einen “PRIMARY KEY” zu erzeugen. In seinem Beispiel sind doppelt PK’s vorhanden - es muss sich damit also um fehlerhafte Daten handeln - eben sein Problem - keine richtigen Keys erzeugen zu können.
Daher denke ich, dass am besten geholfen ist, wenn man darauf aufmerksam macht.
Damit reduziert sich sein Problem auf die Erzeugung eindeutiger Schluesselwerte - eben Primary Keys - die wie er sagt für bestehende Daten erzeugen möchte. Der Trigger wäre mit der Sequence auch obsolete und das Ganze wesentlich näher am konventionellen Weg.
es muss sich damit also um fehlerhafte Daten handeln
Behauptung ohne Beweis.
Damit reduziert sich sein Problem auf die Erzeugung eindeutiger Schluesselwerte - eben Primary Keys - die wie er sagt für bestehende Daten erzeugen möchte.
Nein.
Der Trigger wäre mit der Sequence auch obsolete und das Ganze wesentlich näher am konventionellen Weg.
es ist eine Beispiel-Tabelle … wie er die erzeugt hat ist uninteressant… er spricht bei der Spalte id von einem PK - fuer den die obigen Daten einfach nicht die Kriterien erfuellen die eine Spalte zu einem PK machen.
Nein. Der PK liegt weder auf id noch soll er es tun. Der PK ist anders definiert, das sagte der Fragesteller bereits einmal, und ich habe es extra für Dich nochmals wiederholt. Wer lesen kann, ist klar im Vorteil.
So, ich beende das hier nun mal. Sollte jemand etwas sinnvolles Posten wollen bitte kurz Info an mich dann mache ich den Thread wieder auf. Ansonsten bring das hin und her niemanden etwas.