Thread: Looking for some help with cascading updates...
<br />Here is the question:<br /><br />I have a situation where I need to create triggers to cascade an insert operationto many tables to maintain foreign key constraints. <br /><br />So at a high level<br /><br />INSERT INTO myTable(Name, Address, Zip) VALUES ('Mark', '3 Dingle St.', '01832') <br /><br />myTable has a relation to two other tables,which contain Zip and Address. Before I insert into myTable I want to:<br /><br />Check if '3 Dingle St.' existsin table Address, if not insert it<br />Check if '01832' exists in table Zip and if not insert it <br /><br />I wantto generalize this so that for any insert into myTable, I guarantee that if Zip and Address are not populated they willbe. My insert into myTable always contains full information required for doing the inserts into the other related tables.<br /><br />Help?<br /><br />--Mark<br /><br />
Mark True <darfoo@gmail.com> schrieb: > > Here is the question: > > I have a situation where I need to create triggers to cascade an insert > operation to many tables to maintain foreign key constraints. > > So at a high level > > INSERT INTO myTable (Name, Address, Zip) VALUES ('Mark', '3 Dingle St.', > '01832') > > myTable has a relation to two other tables, which contain Zip and Address. > Before I insert into myTable I want to: > > Check if '3 Dingle St.' exists in table Address, if not insert it > Check if '01832' exists in table Zip and if not insert it For such task i write a function (plpgsql). This obtains all parameters, do the checks and insert into the other tables and the table with the fk constraints. HTH, Andreas -- Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect. (Linus Torvalds) "If I was god, I would recompile penguin with --enable-fly." (unknow) Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°
I guess I should have clarified. I am having trouble figuring out how to construct the IF statement to see if that item exists in the foreign table something like:
count=select count(*) from table;
if count=0 {
insert fkey into myOtherTable
}
count=select count(*) from table;
if count=0 {
insert fkey into myOtherTable
}
On 4/18/06, Andreas Kretschmer <akretschmer@spamfence.net> wrote:
Mark True <darfoo@gmail.com> schrieb:
>
> Here is the question:
>
> I have a situation where I need to create triggers to cascade an insert
> operation to many tables to maintain foreign key constraints.
>
> So at a high level
>
> INSERT INTO myTable (Name, Address, Zip) VALUES ('Mark', '3 Dingle St.',
> '01832')
>
> myTable has a relation to two other tables, which contain Zip and Address.
> Before I insert into myTable I want to:
>
> Check if '3 Dingle St.' exists in table Address, if not insert it
> Check if '01832' exists in table Zip and if not insert it
For such task i write a function (plpgsql). This obtains all parameters,
do the checks and insert into the other tables and the table with the fk
constraints.
HTH, Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknow)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°
---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?
http://archives.postgresql.org
Mark True <darfoo@gmail.com> schrieb: > I guess I should have clarified. I am having trouble figuring out how to > construct the IF statement to see if that item exists in the foreign table > something like: > > count=select count(*) from table; > > if count=0 { > insert fkey into myOtherTable > } a real example: (table harz_ufpos references harz_uf) create or replace function gh_insert(text,int,int,text,int,float) returns int as $$ declare c int; begin select into c count(*) from harz_uf where (uf,ab) = ($1,$2); if c = 0 then insert into harz_uf(uf,ab,beschreibung,aktiv) values ($1,$2,$4,'t'); end if; insert into harz_ufpos (uf,pos,anzahl,rest,flaeche) values ($1,$3,$5,$5,$6); return 1; end; $$ language 'plpgsql'; HTH, Andreas -- Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect. (Linus Torvalds) "If I was god, I would recompile penguin with --enable-fly." (unknow) Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°
Next silly question, how do you get your database to like plpgsql...
I do CREATE LANGUAGE 'plpgsql' and it says it is not defined?
--Mark
I do CREATE LANGUAGE 'plpgsql' and it says it is not defined?
--Mark
On 4/18/06, Andreas Kretschmer <akretschmer@spamfence.net> wrote:
Mark True <darfoo@gmail.com> schrieb:
> I guess I should have clarified. I am having trouble figuring out how to
> construct the IF statement to see if that item exists in the foreign table
> something like:
>
> count=select count(*) from table;
>
> if count=0 {
> insert fkey into myOtherTable
> }
a real example:
(table harz_ufpos references harz_uf)
create or replace function gh_insert(text,int,int,text,int,float) returns int as $$
declare c int;
begin
select into c count(*) from harz_uf where (uf,ab) = ($1,$2);
if c = 0 then
insert into harz_uf (uf,ab,beschreibung,aktiv) values ($1,$2,$4,'t');
end if;
insert into harz_ufpos (uf,pos,anzahl,rest,flaeche) values ($1,$3,$5,$5,$6);
return 1;
end;
$$ language 'plpgsql';
HTH, Andreas
--
Really, I'm not out to destroy Microsoft. That will just be a completely
unintentional side effect. (Linus Torvalds)
"If I was god, I would recompile penguin with --enable-fly." (unknow)
Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°
---------------------------(end of broadcast)---------------------------
TIP 1: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majordomo@postgresql.org so that your
message can get through to the mailing list cleanly
Mark True <darfoo@gmail.com> schrieb: > Next silly question, how do you get your database to like plpgsql... - createlang on the command line - create language plpgsql; (in psql) > > I do CREATE LANGUAGE 'plpgsql' and it says it is not defined? Strange... > > --Mark > > > On 4/18/06, AAnnddrreeaass KKrreettsscchhmmeerr <_a_k_r_e_t_s_c_h_m_e_r_@_s_p_a_m_f_e_n_c_e_._n_e_t>wrote: > Mark True <_d_a_r_f_o_o_@_g_m_a_i_l_._c_o_m> schrieb: Please, without HTML and fullquote... HTH, Andreas -- Really, I'm not out to destroy Microsoft. That will just be a completely unintentional side effect. (Linus Torvalds) "If I was god, I would recompile penguin with --enable-fly." (unknow) Kaufbach, Saxony, Germany, Europe. N 51.05082°, E 13.56889°
"Mark True" <darfoo@gmail.com> writes: > I do CREATE LANGUAGE 'plpgsql' and it says it is not defined? Should work (in 8.1 anyway). Could we see the *exact* command and error message? regards, tom lane