<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Forum PostgreSQL - Trigger - Utworzenie wielu rekordów z jednego]]></title>
		<link>https://forum.postgresql.org.pl/viewtopic.php?id=14316</link>
		<description><![CDATA[Najświeższe odpowiedzi w Trigger - Utworzenie wielu rekordów z jednego.]]></description>
		<lastBuildDate>Fri, 12 Aug 2016 12:33:46 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Odp: Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=17800#p17800</link>
			<description><![CDATA[A możesz zmusić klienta www by inserty wykonywał na widok a update na tabelę?

Jeśli tak to zobacz jak to działa w PGAdminie

create table tabela (id serial primary key,osoba varchar(100),produkt varchar(1000));
create view v_tabela as select * from tabela;
CREATE OR REPLACE RULE "_INSERT" AS
   ON INSERT TO v_tabela
   DO INSTEAD 
insert into tabela (osoba,produkt) select osoba,unnest(produkt) as produkt from (select new.osoba as osoba,string_to_array(new.produkt,',') as produkt) dane;

insert into v_tabela (osoba,produkt) values ('Jan Kowalski','Produkt 1,Produkt 2,Produkt 3');

select * from tabela;]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Fri, 12 Aug 2016 12:33:46 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=17800#p17800</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=17799#p17799</link>
			<description><![CDATA[Rozumiem ,że jest to zwykły insert, sprawdziłem jak działa ale chodzi tylko o to, że tak jak napisałem wcześniej korzystamy z gotowego komponentu do edycji tabeli przez www(javascript + JAVA). Nie mam możliwości podmienić lub wymusić inserta który generuje ten komponent. Jedyne miejsce gdzie mogę przechwycić dane z tego komponentu to jest baza. Dlatego pomysł z triggerem.]]></description>
			<author><![CDATA[dummy@example.com (kostek)]]></author>
			<pubDate>Fri, 12 Aug 2016 12:17:09 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=17799#p17799</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=17798#p17798</link>
			<description><![CDATA[to jest zwykły insert, który dodaje twoje dane w formacie jaki przesłałeś do tabeli. Tyle tylko, że od razu rozdziela string na poszczególne produkty. Trigger może sporo powiększyć czasy insertów, ale OK twój wybór

Połącz się z bazą PGAdminem i zobacz jak to działa (wykonaj sam select za insertem)

Proponuję - przemyśl sprawę
Jeśli już masz to robić to wykorzystać polecenie CREATE RULE z opcją wykonywania operacji zamiast INSERTA wysłanego przez użytkownika  (będzie szybciej)

Jeśli chcesz triggera to podeślij strukturę tabeli i przykładowy insert jaki wychodzi z aplikacji, która jest klientem bazy danych]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Fri, 12 Aug 2016 12:10:29 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=17798#p17798</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=17797#p17797</link>
			<description><![CDATA[Michał dzięki wielkie za odpowiedź.

Niestety nie mam możliwości odpalenia tego zapytania. Chodzi o to, że na formatce używamy gotowego rozwiązania(edytor tabel) , który robi po prostu operacje na tabeli(insert, update, delete). Jedyne miejsce w którym mogę przechwycić dane z tego edytora(bez jego przerabiania) i coś z nimi porobić jest trigger.]]></description>
			<author><![CDATA[dummy@example.com (kostek)]]></author>
			<pubDate>Fri, 12 Aug 2016 11:54:02 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=17797#p17797</guid>
		</item>
		<item>
			<title><![CDATA[Odp: Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=17796#p17796</link>
			<description><![CDATA[A może nie trzeba triggera
Zerknij na ten insert

insert into tabela (osoba,produkt) select osoba,unnest(produkt) as produkt from (select 'Jan Kowalski' as osoba,string_to_array('Produkt 1,Produkt 2,Produkt 3',',') as produkt) dane]]></description>
			<author><![CDATA[dummy@example.com (c_michal)]]></author>
			<pubDate>Fri, 12 Aug 2016 11:38:31 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=17796#p17796</guid>
		</item>
		<item>
			<title><![CDATA[Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link>https://forum.postgresql.org.pl/viewtopic.php?pid=17795#p17795</link>
			<description><![CDATA[Cześć wszystkim

Czy da się utworzyć taki trigger który z jednego rekordu przychodzącego utworzy wiele rekordów docelowych ?
Powiedzmy mam tabelę z kolumnami ID(autoincrement),OSOBA,PRODUKT - z formatki idzie insert jednego rekordu z kolumnami OSOBA,PRODUKT np: 
'Jan Kowalski','Produkt 1,Produkt 2,Produkt 3' 
zamiast tego rekordu chcę do tabeli wstawić 3 rekordy z kolejnymi ID a więc:
1,'Jan Kowalski','Produkt1'
2,'Jan Kowalski','Produkt2'
3,'Jan Kowalski','Produkt3'

Próbowałem z funkcją która zwraca (setof record) ale funkcja triggera nie może zwracać nic innego niż trigger
Próbowałem też wewnątrz funkcji triggera robić insert ale to z kolei wywołuje kolejne triggery więc się robi zagnieżdząona pętla.

z góry dzięki za pomoc]]></description>
			<author><![CDATA[dummy@example.com (kostek)]]></author>
			<pubDate>Fri, 12 Aug 2016 09:51:57 +0000</pubDate>
			<guid>https://forum.postgresql.org.pl/viewtopic.php?pid=17795#p17795</guid>
		</item>
	</channel>
</rss>
