Automatisch DB Stuktur ändern

Hey All,

ich möchte dass sich die Datenbankstruktur automatisch von einer Datei ableitet.

Ein kleines Beispiel:

Ich habe in der jetzigen Programm-Version ein eine Datenbank die wie folgt aussieht:

Meine Datenbankdatei Version 1
CREATE TABLE test(
id serial,
name text
)

Jetzt kommt in der meiner Software in neues Feature hinzu. (Geburtsdatum)
Meine Datenbankdatei Version 2
CREATE TABLE test(
id serial,
name text,
bday date
)

Bisher habe ich eine Upgradescript geschrieben:
ALTER TABLE test ADD COLUMN bday date;

Den letzten Schritt möchte ich automatisieren.
PostgreSQL soll also in meine Datenbankdatei schauen und selbständig das ALTER TABLE, etc durchführen.

Ich will quasi nur eine Datei pflegen.

Geht das mit PostgreSQL? Wenn ja wie?

Dank und Gruß

Ronny

nicht wirklich, aber schau mal hier: https://wiki.postgresql.org/wiki/Change_management_tools_and_techniques

Den letzten Schritt möchte ich automatisieren.
PostgreSQL soll also in meine Datenbankdatei schauen und selbständig das ALTER TABLE, etc durchführen.

Das wird nicht klappen. Du suchst nach einem automatisierten Diff zwischen zwei Definitionen einer Tabelle und das kann nie 100% korrekt aufgelöst werden.

Nimm mal das folgende (sehr einfache) Beispiel. Was wäre die korrekte Transformation in dem folgenden Fall:

  1. Version der Tabelle:
CREATE TABLE test
(
  id serial,
  name text
);
  1. Version der Tabelle:
CREATE TABLE test
[code]
(
  id serial,
  first_name varchar(20)
)

Du kannst zwischen den beiden folgenden Änderungen wählen:

alter table test alter name type varchar(20);
alter table test rename name to first_name;



alter table test 
  drop name, 
  add first_name varchar(20)

Im ersten Fall bleiben alle Daten erhalten im zweiten Fall nicht.

Du solltest bei Deinem Vorgehen bleiben und die Änderungen via Skripts machen (die in die Versionskontrolle der Anwendung gehören - das ist genauso Source Code with Java, C# oder HTML)

Schau Dir Tools wie Liquibase und Flyway diese machen das alles etwas einfacher, weil sie sich merken welche Änderungen bereits ausgeführt wurden.