Thread View: de.comp.datenbanken.misc
15 messages
15 total messages
Started by lrz1035@rsli.de
Sun, 12 Jul 2015 16:44
PostgreSQL und current_user
Author: lrz1035@rsli.de
Date: Sun, 12 Jul 2015 16:44
Date: Sun, 12 Jul 2015 16:44
39 lines
2005 bytes
2005 bytes
Hallo! Eine Tabelle in PostgreSQL hat eine Spalte, die mit "default current_user" definiert ist (siehe unten, die Spalte username, allerdings auf 72 Zeichen abgeschnitten wegen Usenet-Konformität). Füttere ich die Tabelle über ein selbstgebautes Shellscript (und in Folge über psql), passt alles - die Datenbank setzt den aktuellen User ein. Erfasse ich von einem Windows-Client mit Openoffice Base aus Daten, bleibt das Feld username leer. Anbildung über ODBC, in Windows als Benutzer-DSN mit "User Name" eingetragen. Bei Aunty Entity - äh, Tante Gurgel fand ich leider nichts passendes. Vielleicht hatte ja jemand hier draußen schon einmal diese Konstellation und konnte sie erfolgreich lösen (außer mit einem Makro in Base)? V* Tabelle »public.tanken« Spalte | Typ | At ------------+--------------------------------+-------------------------- id | integer | not null Vorgabewert next fahrzeug | numeric(2,0) | not null datum | date | not null kmstand | numeric(6,0) | not null Vorgabewert 0 gefahren | numeric(7,1) | not null Vorgabewert 0 liter | numeric(7,2) | not null Vorgabewert 0 betrag | numeric(7,2) | not null Vorgabewert 0 verbrauch | numeric(5,2) | not null Vorgabewert 0 marke | character varying(30) | not null Vorgabewert '':: zahlung | character varying(30) | not null Vorgabewert '':: literpreis | numeric(7,3) | not null Vorgabewert 0 username | character(8) | not null Vorgabewert "cur zugriff | timestamp(0) without time zone | not null Vorgabewert now( Indexe: "tanken_fahrzeug_key" UNIQUE, btree (fahrzeug, datum) Fremdschlüssel-Constraints: "ckfz" FOREIGN KEY (fahrzeug) REFERENCES fahrzeug(nr) MATCH FULL
Re: PostgreSQL und current_user
Author: Florian Weimer
Date: Sun, 12 Jul 2015 19:52
Date: Sun, 12 Jul 2015 19:52
8 lines
311 bytes
311 bytes
* Volker Englisch: > Erfasse ich von einem Windows-Client mit Openoffice Base aus Daten, > bleibt das Feld username leer. Ich vermute, daß das einfach das Verhalten von OpenOffice ist. Um sicher zu sein, könntest Du Statement-Logging in PostgreSQL einschalten und schauen, was der Client tatsächlich schickt.
Re: PostgreSQL und current_user
Author: "Peter J. Holzer
Date: Sun, 12 Jul 2015 20:51
Date: Sun, 12 Jul 2015 20:51
29 lines
1291 bytes
1291 bytes
On 2015-07-12 16:44, Volker Englisch <lrz1035@rsli.de> wrote: > Eine Tabelle in PostgreSQL hat eine Spalte, die mit "default > current_user" definiert ist (siehe unten, die Spalte username, > allerdings auf 72 Zeichen abgeschnitten wegen Usenet-Konformität). [...] > username | character(8) | not null Vorgabewert "cur [...] > Füttere ich die Tabelle über ein selbstgebautes Shellscript (und in > Folge über psql), passt alles - die Datenbank setzt den aktuellen User > ein. > > Erfasse ich von einem Windows-Client mit Openoffice Base aus Daten, > bleibt das Feld username leer. Anbildung über ODBC, in Windows als > Benutzer-DSN mit "User Name" eingetragen. Mit "leer" meinst Du einen Leerstring? NULL kann es ja nicht sein, da die Spalte als NOT NULL definiert ist. Wenn Openoffice explizit einen Leerstring einfügt, dann wird der natürlich auch eingefügt und nicht der Defaultwert. Der Defaultwert wird nur eingefügt, wenn die Spalte gar nicht im INSERT-Statement vorkommt. hp -- _ | Peter J. Holzer | Fluch der elektronischen Textverarbeitung: |_|_) | | Man feilt solange an seinen Text um, bis | | | hjp@hjp.at | die Satzbestandteile des Satzes nicht mehr __/ | http://www.hjp.at/ | zusammenpaßt. -- Ralph Babel
Re: PostgreSQL und current_user
Author: may@informatik.u
Date: Sun, 12 Jul 2015 21:11
Date: Sun, 12 Jul 2015 21:11
39 lines
1429 bytes
1429 bytes
Volker Englisch <lrz1035@rsli.de> wrote: > Hallo! > > Eine Tabelle in PostgreSQL hat eine Spalte, die mit "default > current_user" definiert ist (siehe unten, die Spalte username, > allerdings auf 72 Zeichen abgeschnitten wegen Usenet-Konformität). > Füttere ich die Tabelle über ein selbstgebautes Shellscript (und in > Folge über psql), passt alles - die Datenbank setzt den aktuellen User > ein. > > Erfasse ich von einem Windows-Client mit Openoffice Base aus Daten, > bleibt das Feld username leer. Anbildung über ODBC, Also ueber ein INSERT-Statement? Wie wird das zusammengesetzt? INSERT INTO ... (spaltennamen) VALUES (...) (und nur die Spaltennamen angegeben, die Du haben willst uns username *nicht* dabei - dann sollte es den Default einsetzen), oder INSERT INTO ... VALUES(alle spalten)? Falls zweites: liefert die Datenerfassung einen Nullwert oder leeren String - bei letzterem wird er natuerlich nicht durch den Default ersetzt? > in Windows als > Benutzer-DSN mit "User Name" eingetragen. > > Bei Aunty Entity - äh, Tante Gurgel fand ich leider nichts passendes. > Vielleicht hatte ja jemand hier draußen schon einmal diese > Konstellation und konnte sie erfolgreich lösen (außer mit einem Makro > in Base)? Trigger? Hat PostgreSQL BEFORE-Trigger? So etwa als BEFORE INSERT INTO ... WHEN username = "" (OR username IS NULL um ganz sicher zu gehen ...) BEGIN NEW:username := $currentuser. END; Wolfgang
Re: PostgreSQL und current_user
Author: lrz1035@rsli.de
Date: Mon, 13 Jul 2015 08:07
Date: Mon, 13 Jul 2015 08:07
24 lines
996 bytes
996 bytes
Wolfgang May schrieb... > Volker Englisch <lrz1035@rsli.de> wrote: >> Eine Tabelle in PostgreSQL hat eine Spalte, die mit "default >> current_user" definiert ist (siehe unten, die Spalte username, >> allerdings auf 72 Zeichen abgeschnitten wegen Usenet-Konformität). >> Füttere ich die Tabelle über ein selbstgebautes Shellscript (und in >> Folge über psql), passt alles - die Datenbank setzt den aktuellen User >> ein. >> >> Erfasse ich von einem Windows-Client mit Openoffice Base aus Daten, >> bleibt das Feld username leer. Anbildung über ODBC, > > Also ueber ein INSERT-Statement? > oder > INSERT INTO ... VALUES(alle spalten)? > Falls zweites: liefert die Datenerfassung einen Nullwert oder leeren String - > bei letzterem wird er natuerlich nicht durch den Default ersetzt? Das war es. Ich hab das Feld jetzt so eingestellt, dass zwar kein Eintrag erforderlich ist und die Eingabe auch gesperrt ist, aber ein Nullwert an die Datenbank übergeben wird. Jetzt funktioniert es. Danke! V*
Re: PostgreSQL und current_user
Author: lrz1035@rsli.de
Date: Mon, 13 Jul 2015 08:08
Date: Mon, 13 Jul 2015 08:08
27 lines
1209 bytes
1209 bytes
Peter J. Holzer schrieb... > On 2015-07-12 16:44, Volker Englisch <lrz1035@rsli.de> wrote: >> Eine Tabelle in PostgreSQL hat eine Spalte, die mit "default >> current_user" definiert ist (siehe unten, die Spalte username, >> allerdings auf 72 Zeichen abgeschnitten wegen Usenet-Konformität). > [...] >> username | character(8) | not null Vorgabewert "cur > [...] >> Füttere ich die Tabelle über ein selbstgebautes Shellscript (und in >> Folge über psql), passt alles - die Datenbank setzt den aktuellen User >> ein. >> >> Erfasse ich von einem Windows-Client mit Openoffice Base aus Daten, >> bleibt das Feld username leer. Anbildung über ODBC, in Windows als >> Benutzer-DSN mit "User Name" eingetragen. > > Mit "leer" meinst Du einen Leerstring? NULL kann es ja nicht sein, da > die Spalte als NOT NULL definiert ist. > > Wenn Openoffice explizit einen Leerstring einfügt, dann wird der > natürlich auch eingefügt und nicht der Defaultwert. Der Defaultwert wird > nur eingefügt, wenn die Spalte gar nicht im INSERT-Statement vorkommt. Interessanterweise doch. Es funktioniert, wenn ein NULL übergeben wird. Bisher war es ein Leerstringm und deshalb hatte es nicht funktioniert... V*
Re: PostgreSQL und current_user
Author: lrz1035@rsli.de
Date: Mon, 13 Jul 2015 08:10
Date: Mon, 13 Jul 2015 08:10
13 lines
489 bytes
489 bytes
Florian Weimer schrieb... >> Erfasse ich von einem Windows-Client mit Openoffice Base aus Daten, >> bleibt das Feld username leer. > > Ich vermute, daß das einfach das Verhalten von OpenOffice ist. > > Um sicher zu sein, könntest Du Statement-Logging in PostgreSQL > einschalten und schauen, was der Client tatsächlich schickt. Der Fehler war, dass OpenOffice einen Leerstring an PostgreSQL übergeben hat. In OpenOffice umgestellt auf die Übergabe von NULL hat das Problem gelöst... V*
Re: PostgreSQL und current_user
Author: "Peter J. Holzer
Date: Mon, 13 Jul 2015 20:03
Date: Mon, 13 Jul 2015 20:03
47 lines
1404 bytes
1404 bytes
On 2015-07-13 08:08, Volker Englisch <lrz1035@rsli.de> wrote: > Peter J. Holzer schrieb... >> Der Defaultwert wird nur eingefügt, wenn die Spalte gar nicht im >> INSERT-Statement vorkommt. > > Interessanterweise doch. Es funktioniert, wenn ein NULL übergeben wird. > Bisher war es ein Leerstringm und deshalb hatte es nicht > funktioniert... Welche Version von PostgreSQL ist das? Hier mit einer (zugegeben nicht ganz taufrischen 9.1): wds=> create table foo (a varchar not null default 'a', b varchar not null default 'b'); CREATE TABLE wds=> insert into foo values('X', 'Y'); INSERT 0 1 wds=> insert into foo values('X', NULL); ERROR: null value in column "b" violates not-null constraint wds=> insert into foo(a, b) values('X', NULL); ERROR: null value in column "b" violates not-null constraint Explizites Insert von NULL mag PostgreSQL trotz default wert nicht. Wenn ich die Spalte aber ganz weglasse: wds=> insert into foo(a) values('X'); INSERT 0 1 wds=> insert into foo(b) values('Y'); INSERT 0 1 funktioniert das wie erwartet: wds=> select * from foo; a | b ---+--- X | Y X | b a | Y (3 rows) hp -- _ | Peter J. Holzer | Fluch der elektronischen Textverarbeitung: |_|_) | | Man feilt solange an seinen Text um, bis | | | hjp@hjp.at | die Satzbestandteile des Satzes nicht mehr __/ | http://www.hjp.at/ | zusammenpaßt. -- Ralph Babel
Re: PostgreSQL und current_user
Author: "Peter J. Holzer
Date: Mon, 13 Jul 2015 21:12
Date: Mon, 13 Jul 2015 21:12
47 lines
1404 bytes
1404 bytes
On 2015-07-13 08:08, Volker Englisch <lrz1035@rsli.de> wrote: > Peter J. Holzer schrieb... >> Der Defaultwert wird nur eingefügt, wenn die Spalte gar nicht im >> INSERT-Statement vorkommt. > > Interessanterweise doch. Es funktioniert, wenn ein NULL übergeben wird. > Bisher war es ein Leerstringm und deshalb hatte es nicht > funktioniert... Welche Version von PostgreSQL ist das? Hier mit einer (zugegeben nicht ganz taufrischen) 9.1: wds=> create table foo (a varchar not null default 'a', b varchar not null default 'b'); CREATE TABLE wds=> insert into foo values('X', 'Y'); INSERT 0 1 wds=> insert into foo values('X', NULL); ERROR: null value in column "b" violates not-null constraint wds=> insert into foo(a, b) values('X', NULL); ERROR: null value in column "b" violates not-null constraint Explizites Insert von NULL mag PostgreSQL trotz default wert nicht. Wenn ich die Spalte aber ganz weglasse: wds=> insert into foo(a) values('X'); INSERT 0 1 wds=> insert into foo(b) values('Y'); INSERT 0 1 funktioniert das wie erwartet: wds=> select * from foo; a | b ---+--- X | Y X | b a | Y (3 rows) hp -- _ | Peter J. Holzer | Fluch der elektronischen Textverarbeitung: |_|_) | | Man feilt solange an seinen Text um, bis | | | hjp@hjp.at | die Satzbestandteile des Satzes nicht mehr __/ | http://www.hjp.at/ | zusammenpaßt. -- Ralph Babel
Re: PostgreSQL und current_user
Author: lrz1035@rsli.de
Date: Wed, 15 Jul 2015 07:04
Date: Wed, 15 Jul 2015 07:04
27 lines
1043 bytes
1043 bytes
Peter J. Holzer schrieb... > On 2015-07-13 08:08, Volker Englisch <lrz1035@rsli.de> wrote: >> Peter J. Holzer schrieb... >>> Der Defaultwert wird nur eingefügt, wenn die Spalte gar nicht im >>> INSERT-Statement vorkommt. >> >> Interessanterweise doch. Es funktioniert, wenn ein NULL übergeben wird. >> Bisher war es ein Leerstringm und deshalb hatte es nicht >> funktioniert... > > Welche Version von PostgreSQL ist das? Hier mit einer (zugegeben nicht > ganz taufrischen) 9.1: Hier ist es eine - detto - 8.4. > wds=> insert into foo values('X', NULL); > ERROR: null value in column "b" violates not-null constraint Faszinierend. Ich habe Deine Beispiele mal nachvollzogen und bekomme die gleichen Ergebnisse. Daraus kann eigentlich nur folgen, dass Openoffice Base keinen NULL-Wert übergibt, obwohl ich in der Felddefinition "Eingabe erforderlich = Nein" und "Leere Eingabe ist NULL = ja" definiert habe. Jetzt muss ich nur noch heraus bekommen, wie ich das SQL-Statement zu Gesicht bekommen kann, das Base an die Datenbank schickt. V*
Re: PostgreSQL und current_user
Author: Stefan+Usenet@Fr
Date: Wed, 15 Jul 2015 12:32
Date: Wed, 15 Jul 2015 12:32
23 lines
896 bytes
896 bytes
On Wed, 15 Jul 2015 09:04:45 Volker Englisch wrote: > > wds=> insert into foo values('X', NULL); > > ERROR: null value in column "b" violates not-null constraint > Daraus kann eigentlich nur folgen, dass Openoffice Base keinen > NULL-Wert übergibt, obwohl ich in der Felddefinition "Eingabe > erforderlich = Nein" und "Leere Eingabe ist NULL = ja" definiert habe. > Jetzt muss ich nur noch heraus bekommen, wie ich das SQL-Statement zu > Gesicht bekommen kann, das Base an die Datenbank schickt. # alter database $DATABASE set log_statement = 'all'; Danach dann einfach in der passenden Log-Datei mitlesen (und hinterher im eigenen Interesse nicht vergessen, ein 'none' nachzureichen). Servus, Stefan -- http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich Offizieller Erstbesucher(TM) von mmeike Wie konnte man 2015 Jahre ohne Stefan wohl ueberleben. (Sloganizer)
Re: PostgreSQL und current_user
Author: lrz1035@rsli.de
Date: Thu, 16 Jul 2015 07:23
Date: Thu, 16 Jul 2015 07:23
28 lines
1018 bytes
1018 bytes
Stefan Froehlich schrieb... > On Wed, 15 Jul 2015 09:04:45 Volker Englisch wrote: >> Daraus kann eigentlich nur folgen, dass Openoffice Base keinen >> NULL-Wert übergibt, obwohl ich in der Felddefinition "Eingabe >> erforderlich = Nein" und "Leere Eingabe ist NULL = ja" definiert habe. >> Jetzt muss ich nur noch heraus bekommen, wie ich das SQL-Statement zu >> Gesicht bekommen kann, das Base an die Datenbank schickt. > > # alter database $DATABASE set log_statement = 'all'; > > Danach dann einfach in der passenden Log-Datei mitlesen (und hinterher > im eigenen Interesse nicht vergessen, ein 'none' nachzureichen). Gute Idee - wenn ich das Teil nur dazu überreden könnte, _überhaupt_ zu loggen... $ grep ^log postgresql.conf |log_destination = 'syslog' |syslog_facility = 'local5' |syslog_ident = 'pgsql' |log_min_messages = warning $ grep ^local syslog.conf |local5.* /var/log/postgres.log In postgres.log kommt aber genau gar nichts an :-( Ich bin also erst noch an der Lösung dieses Problems... V*
Re: PostgreSQL und current_user
Author: Stefan+Usenet@Fr
Date: Fri, 17 Jul 2015 21:47
Date: Fri, 17 Jul 2015 21:47
25 lines
820 bytes
820 bytes
On Fri, 17 Jul 2015 22:21:27 Peter J. Holzer wrote: > > wenn ich [PostgreSQL] nur dazu überreden könnte, _überhaupt_ zu > > loggen... > > $ grep ^log postgresql.conf > >|log_destination = 'syslog' > >|syslog_facility = 'local5' > >|syslog_ident = 'pgsql' > >|log_min_messages = warning > ^^^^^^^^^^^^^^^^^^^^^^^^^^ > Du loggst da nur Warnungen und schlimmeres. Dass ein Datenbank > Statements ausführt, sollte aber eher normal sein. Setz das mal auf > "info". Das sollte für log_statement = 'all' eigentlich keine Rolle spielen (sagt das Manual implizit und sagt auch rein empirisch meine Installation). Servus, Stefan -- http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich Offizieller Erstbesucher(TM) von mmeike Stefan - die durchschlagendste Potenz von ferklig! (Sloganizer)
Re: PostgreSQL und current_user
Author: "Peter J. Holzer
Date: Fri, 17 Jul 2015 22:21
Date: Fri, 17 Jul 2015 22:21
34 lines
1393 bytes
1393 bytes
On 2015-07-16 07:23, Volker Englisch <lrz1035@rsli.de> wrote: > Stefan Froehlich schrieb... >> On Wed, 15 Jul 2015 09:04:45 Volker Englisch wrote: >>> Daraus kann eigentlich nur folgen, dass Openoffice Base keinen >>> NULL-Wert übergibt, obwohl ich in der Felddefinition "Eingabe >>> erforderlich = Nein" und "Leere Eingabe ist NULL = ja" definiert habe. >>> Jetzt muss ich nur noch heraus bekommen, wie ich das SQL-Statement zu >>> Gesicht bekommen kann, das Base an die Datenbank schickt. >> >> # alter database $DATABASE set log_statement = 'all'; >> >> Danach dann einfach in der passenden Log-Datei mitlesen (und hinterher >> im eigenen Interesse nicht vergessen, ein 'none' nachzureichen). > > Gute Idee - wenn ich das Teil nur dazu überreden könnte, _überhaupt_ zu > loggen... > > $ grep ^log postgresql.conf >|log_destination = 'syslog' >|syslog_facility = 'local5' >|syslog_ident = 'pgsql' >|log_min_messages = warning ^^^^^^^^^^^^^^^^^^^^^^^^^^ Du loggst da nur Warnungen und schlimmeres. Dass ein Datenbank Statements ausführt, sollte aber eher normal sein. Setz das mal auf "info". hp -- _ | Peter J. Holzer | Fluch der elektronischen Textverarbeitung: |_|_) | | Man feilt solange an seinen Text um, bis | | | hjp@hjp.at | die Satzbestandteile des Satzes nicht mehr __/ | http://www.hjp.at/ | zusammenpaßt. -- Ralph Babel
Re: PostgreSQL und current_user
Author: lrz1035@rsli.de
Date: Sat, 18 Jul 2015 15:43
Date: Sat, 18 Jul 2015 15:43
26 lines
1016 bytes
1016 bytes
Stefan Froehlich schrieb... > On Fri, 17 Jul 2015 22:21:27 Peter J. Holzer wrote: >> > wenn ich [PostgreSQL] nur dazu überreden könnte, _überhaupt_ zu >> > loggen... > >> > $ grep ^log postgresql.conf >> >|log_destination = 'syslog' >> >|syslog_facility = 'local5' >> >|syslog_ident = 'pgsql' >> >|log_min_messages = warning >> ^^^^^^^^^^^^^^^^^^^^^^^^^^ >> Du loggst da nur Warnungen und schlimmeres. Dass ein Datenbank >> Statements ausführt, sollte aber eher normal sein. Setz das mal auf >> "info". > > Das sollte für log_statement = 'all' eigentlich keine Rolle spielen (sagt > das Manual implizit und sagt auch rein empirisch meine Installation). Dazu komme ich jetzt dann... Nachdem mein syslog keine Anstalten macht, die Ausgabe von local5 irgendwo hinloggen zu wollen, habe ich PostgreSQL auf das Logging über stderr umgestellt. Erste Tests sehen erfolgversprechend aus ;-) Sobald ich wieder an den fraglichen Client komme, werde ich berichten, wie das Statement von OOo Base genau aussieht. V*
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads