@akretschmer Diese Möglichkeit scheint mir doch um einiges einfacher zu sein.
test=*# set lc_numeric=‘de_DE.UTF-8’;
Es kommt aber eine Fehlermeldung. (Habs direkt in die Konsole eingetragen)
select to_char(123456789, '999G999G999');
Das geht aber.
invalid value for parameter "lc_numeric": "de_DE.UTF-8"
@ads: Vielleicht geh ich das noch später an, ist halt echt ein Aufwand. Erst die Funktionen, Operatoren, Klassen. Da wäre ich eine ganze Weile beschäftigt.
Du brauchst nicht alles davon, jedenfalls nicht, wenn du den Datentyp nur zum Speichern von Daten nutzen willst.
Die Operatoren ect. sind notwendig, wenn du mit anderen Datentypen interagieren möchtest, also z. B. Vergleiche durchführen oder Casten auf andere Typen.
Was genau willst Du denn machen damit? So, wie ich Dich verstanden habe, geht es nur darum, ‘normale’ Zahlen in einer bestimmten Formatierung EIN/Auszugeben. Dazu nannte ich eine Lösung.
Hast Du allerdings irgend was besonderes an solchen Zahlen, ich spinne mal: 100.001.010 * 2 soll 100.001.020 sein, dann brauchst halt echt einen neuen Datentypen und dazu die passenden Rechenoperatoren und so weiter.
Logo, habe noch nicht ein Lastenheft erstellen müssen. Was kommt da alles rein?
Der Datentyp soll im Format 000.000.000 sein.
Also drei Pakete mit je 3 Zahlen welche 0-9 umfassen können
Das Trennzeichen ist ein Punkt
Der Datentyp muss als PrimaryKey verwendet werden können
Es muss keine Addition etc stattfinden können.
Da ich immer gerne auch etwas lernen möchte würde ich auch gerne den Weg dazu sehen. Auf der postgres.org Seite steht ja schon etwas dazu. Bei mir hat es aber noch nicht klick gemacht.
Da geht es schon los … für die Indexunterstützung (Primary Key) musst du Operatoren für deinen Datentyp haben. Schließlich muss die Datenbank zumindest herausfinden können, ob zwei Datensätze gleich sind. Also müssen Vergleiche möglich sein.
Wie weise ich darauf aber einen Fremdschlüssel zu? (Eine andere Spalte in einer anderen Tabelle soll hier auf alle Primary Keys den Fremdschlüssel haben)
Ich habe noch nicht dazu gesagt, dass die Werte in den Einzelspalten durchaus mehrfach vorkommen können. (z.B. 344) Die Gesamtzahl ist aber einmalig. (344.333.444 und 344.333.445).
test=*# create table t1 (a int, b int, c int, primary key(a,b,c));
NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "t1_pkey" for table "t1"
CREATE TABLE
Zeit: 5,162 ms
test=*# create table t2 (a int, b int, c int, foreign key(a,b,c) references t1);
CREATE TABLE
Zeit: 28,862 ms
CREATE TABLE / PRIMARY KEY will create implicit index "t1_pkey" for table "t1"
CREATE TABLE t2 (a int, b int, c int, foreign key(a,b,c) references t1);
Sprich, die Anzahl der Schlüssel muss immer gleich sein. (hier 3: a,b,c)
Macht es dann aber nicht mehr Sinn, einfach noch eine ID-Spalte (etwa Serial) hinzuzufügen und auf diese zu verweisen.?
Ich möchte ja, dass eine Spalte auf 3 Spalten den Fremdschlüssel hat. Und nicht, dass ein Schlüssel 3 Spalten mit 3 Spalten “verknüpft”.
In t1 habe ich einen zusammengesetzten Schlüssel: a, b, c.
t2 soll auf diese Schlüssel verweisen. Müssen deshalb Spalten a, b, c (aus t1) in t2 vorhanden sein? Oder kann man der Spalte x in t2 a, b, c zusammen zuweisen.
Du wolltest doch dir drei Spalten als Foreign Key haben, also musst du auch darauf verweisen.
Wenn du eine Sequenz einführst, ist das nicht mehr der von dir gewünschte Primärschlüssel sondern du tauscht deinen Natural Key gegen einen technischen Schlüssel aus.