🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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
#36400
Author: lrz1035@rsli.de
Date: Sun, 12 Jul 2015 16:44
39 lines
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
#36401
Author: Florian Weimer
Date: Sun, 12 Jul 2015 19:52
8 lines
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
#36402
Author: "Peter J. Holzer
Date: Sun, 12 Jul 2015 20:51
29 lines
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
#36403
Author: may@informatik.u
Date: Sun, 12 Jul 2015 21:11
39 lines
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
#36404
Author: lrz1035@rsli.de
Date: Mon, 13 Jul 2015 08:07
24 lines
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
#36405
Author: lrz1035@rsli.de
Date: Mon, 13 Jul 2015 08:08
27 lines
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
#36406
Author: lrz1035@rsli.de
Date: Mon, 13 Jul 2015 08:10
13 lines
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
#36407
Author: "Peter J. Holzer
Date: Mon, 13 Jul 2015 20:03
47 lines
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
#36408
Author: "Peter J. Holzer
Date: Mon, 13 Jul 2015 21:12
47 lines
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
#36409
Author: lrz1035@rsli.de
Date: Wed, 15 Jul 2015 07:04
27 lines
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
#36410
Author: Stefan+Usenet@Fr
Date: Wed, 15 Jul 2015 12:32
23 lines
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
#36411
Author: lrz1035@rsli.de
Date: Thu, 16 Jul 2015 07:23
28 lines
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
#36413
Author: Stefan+Usenet@Fr
Date: Fri, 17 Jul 2015 21:47
25 lines
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
#36412
Author: "Peter J. Holzer
Date: Fri, 17 Jul 2015 22:21
34 lines
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
#36414
Author: lrz1035@rsli.de
Date: Sat, 18 Jul 2015 15:43
26 lines
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