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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
INSERT ... SELECT
syntax zum schieben von Daten von einer Tabelle in eine andere:Natürlich die
WHERE NOT EXISTS
Teil ist nur eine Möglichkeit zu prüfen, für Unterschiede. In der Tabelle ist das andere. Welche die beste ist, hängt von Ihrem tatsächlichen Daten.Anderen Hinweis: Beide Tabellen haben
num serial
. Aber nur Daten aus einer Tabelle in die andere dies bedeutet, dass beideSERIAL
s sind die gegeneinander kämpfen. Sie sollten machen, dass eine Ebeneint
in der zweiten Tabelle.serial
ist einint
zusammen mit neuen Sequenz Sie können nicht erstellen Sie eineserial
mit einem "shared" - Sequenz. Sie können erstellen einen 'int' - Spalte mit einem Standardwert verwenden einer vorhandenen Sequenz wenn. Wie die "ownership" der gemeinsamen Sequenz gehandhabt wird... weiß ich nicht.owned by
Teil. Aber ich denke, es dient nur zum herstellen der Abhängigkeit (zum aktivierenDROP ... CASCADE
Kaskade nach der Reihenfolge), so können Sie wählen, um zu tun, ohne den "Besitz" Teil. Verlassen würde die Reihenfolge verwaist, auf einemDROP table ... CASCADE
Die relevanten Kapitel im Handbuch ist 39.9. Trigger-Verfahren. Der Beispiele gibt es vor allem Beispiel 39-4. Einen PL/pgSQL Trigger-Verfahren Für die Überwachung werden kann, einen besseren Startpunkt als Ihre aktuelle code.
srid=70066
in der geometrie-Spalte mitsrid = 4326
.