<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Forum PostgreSQL - Trigger - Utworzenie wielu rekordów z jednego]]></title>
	<link rel="self" href="http://forum.postgresql.org.pl/extern.php?action=feed&amp;tid=14316&amp;type=atom"/>
	<updated>2016-08-12T12:33:46Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.postgresql.org.pl/viewtopic.php?id=14316</id>
		<entry>
			<title type="html"><![CDATA[Odp: Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=17800#p17800"/>
			<content type="html"><![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;]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2016-08-12T12:33:46Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=17800#p17800</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=17799#p17799"/>
			<content type="html"><![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.]]></content>
			<author>
				<name><![CDATA[kostek]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=2549</uri>
			</author>
			<updated>2016-08-12T12:17:09Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=17799#p17799</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=17798#p17798"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2016-08-12T12:10:29Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=17798#p17798</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=17797#p17797"/>
			<content type="html"><![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.]]></content>
			<author>
				<name><![CDATA[kostek]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=2549</uri>
			</author>
			<updated>2016-08-12T11:54:02Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=17797#p17797</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Odp: Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=17796#p17796"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[c_michal]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=627</uri>
			</author>
			<updated>2016-08-12T11:38:31Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=17796#p17796</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Trigger - Utworzenie wielu rekordów z jednego]]></title>
			<link rel="alternate" href="https://forum.postgresql.org.pl/viewtopic.php?pid=17795#p17795"/>
			<content type="html"><![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]]></content>
			<author>
				<name><![CDATA[kostek]]></name>
				<uri>https://forum.postgresql.org.pl/profile.php?id=2549</uri>
			</author>
			<updated>2016-08-12T09:51:57Z</updated>
			<id>https://forum.postgresql.org.pl/viewtopic.php?pid=17795#p17795</id>
		</entry>
</feed>
