Willkommen im kivitendo Forum! Hier erweitern und teilen AnwenderInnen und EntwicklerInnen ihr Wissen.

Teste kivitendo!

kivitendo Demo

kivitendo Demo mit Schweizer Kontenplan und neuem Layout

Unterstützt kivitendo mit der Basis-Subskription!

0 Punkte

Hallo,

habe das Problem das die DB nicht bzw. mit einem Fehler aufschlägt:

The database update/creation did not succeed. 
The file sql/Pg-upgrade2/follow_up_done.sql containing the following query failed:
INSERT INTO follow_up_done (follow_up_id, done_at)   
SELECT id, COALESCE(mtime, itime) FROM follow_ups WHERE done IS TRUE
The error message was: ERROR:  
null value in column "done_at" violates not-null constraint
DETAIL:  Failing row contains (8, 15, null, null).
All changes in that file have been reverted.: 
von (2.7k Punkte)

1 Antwort

0 Punkte

Irgendwie hast Du es offenbar geschafft, eine Wiedervorlage zu schließen, ohne dass dabei das Datum in der DB eingetragen wurde. Das sollte theoretisch auch beim Anzeigen der geschlossenen Wiedervorlagen sichtbar sein.

Es sollte (ohne Anspruch auf Korrektheit, ich habe das nicht getestet) gelöst werden können, indem Du den NULL-Wert mit einem beliebigen Datum belegst.

UPDATE follow_up_done SET done_at = '2022-12-06 17:05:37.940307' WHERE done_at = NULL;

Falls Du ein Tool wie PGAdmin installiert hast, geht das auch bequem mit GUI.

DB-Backup machen, ehe Du darin herumspielst! ;-)

VG, Hannes

von (1.9k Punkte)

thx, du meinst evtl. die Tabelle follow_ups. Die Tabelle follow_up_done wird erst mit dem update 3.7.0 bzw. Datenbankupdate angelegt. Aber bei der alten gibt es kein done_at, nur ein done jene hat aber boolean. Das einzige was ich sehe das ein Datum inne hat ist follow_up_date. Ja habe eine GUI PGAdmin.

..kivitendo-erp/sql/Pg-upgrade2/follow_up_done.sql

Denke das dies die Datei / Script ist was bei mir nicht funktioniert, anbei der Inhalt:

-- @tag: follow_up_done
-- @description: Wiedervorlagen: Tabelle für Infos über abgeschlossene WVs
-- @depends: follow_ups

CREATE TABLE follow_up_done (
       id            SERIAL    NOT NULL PRIMARY KEY,
       follow_up_id  INTEGER   NOT NULL UNIQUE REFERENCES follow_ups(id) ON DELETE CASCADE,
       done_at       TIMESTAMP NOT NULL DEFAULT now(),
       employee_id   INTEGER   REFERENCES employee(id)
);

INSERT INTO follow_up_done (follow_up_id, done_at)
  SELECT id, COALESCE(mtime, itime) FROM follow_ups WHERE done IS TRUE;

ALTER TABLE follow_ups DROP COLUMN done;

Habe es nun so gelöst, für die diejenigen die es Interessiert, bestimmt nicht das gelbe vom Ei, aber funzt.

habe die Script Datei wie folgt abgeändert / auskommentiert.

-- @tag: follow_up_done
-- @description: Wiedervorlagen: Tabelle für Infos über abgeschlossene WVs
-- @depends: follow_ups

CREATE TABLE follow_up_done (

   id            SERIAL    NOT NULL PRIMARY KEY,
   follow_up_id  INTEGER   NOT NULL UNIQUE REFERENCES follow_ups(id) ON DELETE CASCADE,
   done_at       TIMESTAMP NOT NULL DEFAULT now(),
   employee_id   INTEGER   REFERENCES employee(id) );

--INSERT INTO follow_up_done (follow_up_id, done_at)
-- SELECT id, COALESCE(mtime, itime) FROM follow_ups WHERE done IS TRUE;

--ALTER TABLE follow_ups DROP COLUMN done;

Wäre doch mal schön wenn ein sich Datenbank Verantwortlicher zu Worte meldet, spätestens beim nächsten Update wird mich die Sache wieder einholen, vermute ich mal.

Hallo,
Ich hatte das Problem bisher noch nicht. Man müsste heir Deine DB überprüfen. Bin zwar nicht der Entwickler hier von aber mit verschieden vielen Mandanten gestestet.

Was gibt denn die Abfrage:

SELECT id, COALESCE(mtime, itime) AS datum FROM follow_ups WHERE done IS TRUE;

für ein Ergebniss? Ist da was Dabei ohne Datum?

Beste Grüße
Werner kivitendodienstleister

Hallo Werner, thx. Anbei das Ergebnis der Select Abfrage:

id	datum
1   	2011-11-26 11:18:42.901018
8    	2012-04-16 11:44:38.868944
2    	2012-04-16 16:07:41.681222
9    	2012-04-16 17:10:59.213029
7    	2012-04-17 21:43:05.975832
4    	2012-04-25 12:24:06.633461
15    	NULL
17    	NULL
14    	2016-06-14 13:59:20.773532
19    	2016-06-26 10:56:34.108587
20    	2016-08-07 11:55:48.17669
21    	2016-11-01 09:24:20.216843
23    	2018-03-24 09:38:08.475474
24    	2018-07-14 13:51:34.383863
27    	2019-03-25 17:06:10.082996
26    	2019-04-07 09:42:33.528485
34    	2021-05-02 09:31:16.81414

17 Datensätze

Also zwei Einträge mit NULL.

Hallo
Entweder kannst du diese jetzt löschen
oder du gibts denen ein itime oder mtime Wert
Dann Sollte das Updatescript durchlaufen.

Wahrscheinlich doch nicht da es schon gelaufen ist und somit registriert.
Du müsstest die Befehle die Du auskommentiert hast von Hand ausführen.

Beste Grüße
Werner kivitendodienstleister

thx Werner, aber denke da noch etwas Hilfe gebrauchen zu können.
Wenn ich versuche die auskommentierten Zeilen via SQL auszuführen, erhalte ich bereits in der ersten fogendes:

SQL-Fehler:

ERROR:  duplicate key value violates unique constraint "follow_up_done_follow_up_id_key"
DETAIL:  Key (follow_up_id)=(1) already exists.

In der Anweisung:

INSERT INTO follow_up_done (follow_up_id, done_at)
  SELECT id, COALESCE(mtime, itime) FROM follow_ups WHERE done IS TRUE;

Ansonsten wäre da noch die zweite Zeile:

ALTER TABLE follow_ups DROP COLUMN done;

oder würde es ausreichen einfach die zweite auszuführen?

Würde wahrscheinlich ausreichen und die Wiedervorlagen müsstest du dann von Hahn schliessen.
Beste Grüße
Werner kivitendodienstleister

alles klar habe 'ALTER TABLE follow_ups DROP COLUMN done;' ausgeführt und die paar Wiedervorlagen händisch erledigt, thx ich denke damit dürfte es sich erledigt haben.

Ähnliche Fragen

0 Punkte
3 Antworten
0 Punkte
1 Antwort
0 Punkte
0 Antworten
0 Punkte
1 Antwort
0 Punkte
1 Antwort
...