Wie erstellen Sie die Funktion in postgresql?

Ich habe zwei Tabellen:

CREATE TABLE filedata_temp
(
 num serial NOT NULL,
 id integer,
 mydata character(25),
 the_geom geometry,
 CONSTRAINT filedata_pkey PRIMARY KEY (num)
)


CREATE TABLE filedata
(
 num serial NOT NULL,
 id integer,
 mydata character(25),
 the_geom geometry,
 CONSTRAINT filedata_temp_pkey PRIMARY KEY (num)
)

will ich machen Funktion, die das einfügen von Zeilen aus der ersten Tabelle in die zweite Tabelle, wenn diese Zeilen nicht vorhanden sind in der zweiten Tabelle. Feld für den Vergleich von Tabellen ist num Feld.

Nach der Lektüre einige Beispiele :

  CREATE OR REPLACE FUNCTION  insert_into_wgs()
  RETURNS void AS
  $BODY$
  BEGIN
insert into filedata 
(
    id,
    mydata,
    the_geom,

)
values
(
    id,
    mydata,
    ST_TRANSFORM(the_geom,4326)
);
 end
 $BODY$
 LANGUAGE 'plpgsql'

So, ich brauche etwas Hilfe/

UPDATE

ich versuche, diese Funktion(Götter der Datenbank ist, sagt es mir)

CREATE OR REPLACE FUNCTION  insert_into_wgs()
RETURNS void AS
$$
BEGIN
 INSERT INTO filedata (id,mydata,the_geom)  
 SELECT id,mydata,ST_TRANSFORM(the_geom,4326)
 FROM filedata_temp
 WHERE id NOT IN (SELECT id FROM filedata);
end;
$$
LANGUAGE 'plpgsql'

Aber nichts einfügen in die Tabelle filedata.

Funktion aufrufen

  ce_proc = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgis","postgres","123456");
  CallableStatement proc = (CallableStatement) ce_proc.prepareCall("{call insert_into_wgs()}");
  proc.execute();
  • Meine Antwort stackoverflow.com/a/11797148/905902 hier sollte genügend material. Es sollte Recht einfach zu ändern Sie die trigger-Funktionen in normale Funktionen. und das wirft in der geometrie-Transformationen, die Sie wollen.
  • Ich bin bereits deine Antwort gelesen. Jetzt habe ich mit ähnlichem Funktion. Bit, wenn ich versuche, verwenden Sie diese Funktion auslösen, bekomme ich ein problem mit der Funktion ST_TRANSFORM(). Also ich will jetzt anlegen-Funktion aufrufen es aus java-code.
  • Sie sollten angeben, ST_transform() mit den richtigen Argumenten (die Werte von der NEUEN.the_geom plus der srid, die Sie wollen). In meinem Beispiel benutze ich einen einfachen cast-zvalue::text, oder ztext::integer, sollten Sie die st_tranform () - Funktion statt. (eventuell mit dem Präfix schema Namen zB öffentlichkeit.st_transform() ) Das ist alles.
  • ich weiß, welche Argumente st_transform() kriegt. Seine Funktion funktioniert, wenn ich es aufrufen in sql-edidor oder insert-oder update einer anderen Tabelle. Aber in meinem Fall seine problem mit srids. Ich update meine vorherigen Frage, und u kann sehen, was st_transform() tun, mit geometrie.
  • BTW: warum werden die Tabellen angezeigt werden, haben zwei keyfields (num, id) und nur eine (id) zu sein scheint, verwendet, während die andere (num) ist als primary key definiert?
  • Seine test-Tabellen, die Felder, die Namen nichts bedeutet.

InformationsquelleAutor Kliver Max | 2012-08-06
Schreibe einen Kommentar