PostgreSQL Fallback auf alte Tabelle

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

PostgreSQL Fallback auf alte Tabelle

Beitrag von Michl »

Servus,

ich bin am entwerfen eines Programms und nutze dafür zur Zeit eine lokale PostgreSQL Datenbank (PostgreSQL 10) mit SQLDB (64bit Lazarus Trunk, FPC 3.0.4). Dabei wird eine Tabelle mit Standardeinträgen befüllt. Da ich einen Standardeintrag vergessen hatte, habe ich die Befüllung der Standardeinträge um diesen Wert erweitert. Lösche ich die komplette Datenbank und starte ich das Programm, wird die Tabelle automatisch befüllt und alle Einträge sind da.

Wenn ich das Programm dann wieder neu starte, sind alle Einträge da, außer der neu hinzugefügte.
Öffne ich PgAdmin, sehe ich alle Einträge, auch den neu hinzugefügten - im Programm allerdings nicht.

Um das Problem einzugrenzen, habe ich ein Testprogramm geschrieben, die Datenbank gelöscht und nur die eine Tabelle mit dem Namen erstellt und befüllt. Diese zeigt das gleiche Problem. Beim ersten Start sind alle Einträge i.O. Beim zweiten Start fehlt der Eintrag.

Als nächstes habe ich die Datenbank wieder gelöscht, eine andere Datenbank mit einem anderen Namen erstellt, dort die Tabelle mit gleichen Namen erstellt und befüllt. Diese zeigte wieder zuerst alle Daten an und beim nächsten Programmstart fehlte der zusätzliche Eintrag. Also ich sehe bei dieser Datenbank die fehlerhafte Tabelle einer anderen Datenbank.

Als nächstes habe ich die Datenbank wieder gelöscht und eine neue Datenbank erstellt, dort die Tabelle unter einem anderen Namen erstellt und befüllt. Dieses funktionierte nun richtig.

Wenn ich das Testprogramm auf Zeos umstelle, werden die Daten korrekt angezeigt, auch mit dem entsprechendem Tabellennamen. Starte ich das Programm mit SQLDB, wird die fehlerhafte Tabelle angezeigt, obwohl die Datenbank und die Tabelle mit Zeos erstellt wurden.

Ich vermute, daß irgendwo die Tabelle temporär (gecacht) gespeichert ist und bei einem Neustart darauf zugegriffen wird. PgAdmin und Zeos zeigen die Daten korrekt an, SQLDB nicht.

Ein Minimalbeispiel kann ich leider nicht erstellen, da es nur bei der speziellen Tabelle mit nur dem Namen auftritt.

Hat jemand schon mal so ein ähnliches Problem gehabt oder eine Idee wo ich suchen könnte?

[EDIT]
Auch ein VACUUM bringt keinen Erfolg (https://www.postgresql.org/docs/9.1/sql-vacuum.html).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

Antworten