spalte umbenennen

Hallo,

ich kenne mich ehrlich gesagt mit triggern nicht besonders aus. Wenn ich eine SQL abfrage habe wie z.B.
ALTER TABLE test RENAME COLUMN Wert1 TO WERT2;
muss ich dann unbedingt eine Funktion in c schreiben oder ist es auch möglich dies in plpgsql zu schreiben. Wenn ja wie.
Und ist es überhaupt möglich jede beliebige sql mit plpgsql “abzubilden”?
Die Dokus zu plpgsql finde ich etwas dürftig oder kennt da jemand eine gute Hilfe?
Vielen Dank schon einmal

Jürgen

Also ich kann gerade nicht wirklich erkennen, was du erreichen möchtest und was dies genau mit Triggern zu tun hat. Kannst du das bitte mal als Problem formulieren?

Danke

http://www.postgresql.org/docs/8.2/static/plpgsql.html
diese doku kenne ich übrigens, falls mir das jemand empfiehlt

ich weiß auch, dass es dort einen Absatz zu rename gibt, die folgendermaßen aussieht
RENAME id TO user_id;

meine funktion müsste demnach etwa so aussehen:
CREATE FUNCTION test() RETURNS trigger AS
DECLARE
wert1 double precision;
BEGIN
RENAME wert1 TO wert2;
END;
LANGUAGE ‘plpgsql’ VOLATILE;

aber da fehlt wohl noch etwas. Vielleicht kann mir jemand auf die Sprünge helfen. danke jürgen

Du bist auf dem Holzweg.

Das RENAME, das du meinst, dient dazu, deklarierte Variablen umzubenennen.

Das RENAME, das du suchst, dürfte sich bei ALTER TABLE befinden.

ok
ich versuchs zu erklären:
ich muss Datensätze zu meiner Tabelle hinzufügen, die sich nur beim Namen einer Spalte unterscheiden. Damit diese Daten bei einem Update eingefügt werden, muss ich beim Update den Spaltennamen ändern und anschließend wieder zurücksetzen.

nun, in der doku steht:

Using the RENAME declaration you can change the name of a variable, record or row.

aber ich schau dann mal bei alter table nach.

Das wird, denke ich schiefgehen. Der Parser wird dir noch vor dem Aufrufen deiner Funktion einen Fehler werfen, wenn der Trigger für die Tabelle gerufen wird.

Aber:
An sich ist das eine Aufgabe für die Applikation, du solltest nie und nimmer live in deiner DB das Layout ändern. Wirklich nie!

Innerhalb der Funktion, das ändert jedoch (zum Glück) nicht das Design der Datenbank.

nun erst mal danke für die erklärung,

trotzdem bleibt mein Problem bestehen, denn meine sql wird von shp2pgsql automatisch erzeugt, so dass mir dann nur bleibt die sql Datei abzuändern. Das muss man dann aber leider bei jedem Update machen.

Bitte nicht alles verqirlen. Du hast 2 Tabellen, ta1 und ta2, die sich im Namen der Spalten unterscheiden, sonst gleich sind?

test=*# select * from ta1;
 id | name1
----+-------
  1 | 1
(1 row)

test=*# select * from ta2;
 id | name2
----+-------
  2 | 2
(1 row)

test=*# insert into ta1 (id, name1) select id, name2 from ta2;
INSERT 0 1
test=*# select * from ta1;
 id | name1
----+-------
  1 | 1
  2 | 2
(2 rows)

Erklärt und löst dies Dein Problem?


Andreas

nicht ganz,

es gibt keine zweite tabelle, sondern nur eine sql Datei, die die Attribute aus einer dbf (shape Datei für postgisler) in diese tabelle einfügen soll. Ich dachte aber auch gerade daran die Daten zuerst in eine andere Tabelle zu lesen, dann von dort aus die Daten zu kopieren und anschließend die Tabelle wieder zu droppen oder so ähnlich.

vielleicht muss ich noch hinzufügen, dass es sich bei meiner tabelle um eine geom tabelle handelt, ich also die postgis erweiterung benutze. deshalb muss ich meine sql auch mit dem shapeloader erzeugen, damit die geometrie tabelle und die geom spalte angelegt werden.
trotzdem mal danke für all die hinweise
jürgen