Postgresql - insert w funkcji niemożliwy

Postgresql - insert w funkcji niemożliwy
QK
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 11 lat
0

Hej,
mój problem wygląda następująco:
Mam tabelę rezerwacje której struktura wygląda tak:

Kopiuj
 id_rezerwacje serial NOT NULL,
  rowery_id_rowery integer NOT NULL,
  klient_id_klienta integer NOT NULL,
  data_rezerwacji timestamp without time zone,
  ile_dni integer

I chcę do niej dodawać rekordy w taki sposób, że id_klienta oraz id_roweru wpisuję ręcznie (wcześniej wyciągając z innej tabeli) a data jest dopisywana automatycznie.
Chciałam to zrobić funkcją, ale Postgresql nie pozwala na stosowanie INSTERTa w funkcjach.
Kolejnym pomysłem było zrobienie tego za pomocą RULE:

Kopiuj
CREATE RULE dodajRowerTest AS ON INSERT TO rowery 
	DO INSERT INTO rowery VALUES(
			1
			NEW.rowery_id_rowery::INTEGER, 
			NEW.klient_id_klient::INTEGER, 
			CURRENT_DATE, 
			NEW.ile_dni
	);
 

Ale tu pojawia się błąd "kolumna new.rowery_id_rowery nie istnieje". Czy możecie podpowiedzieć jak powinnam to napisać?

Marcin.Miga
  • Rejestracja:prawie 17 lat
  • Ostatnio:około 6 godzin
  • Postów:2792
0

Jeśli tylko dla INSERTa, to najlepsze rozwiązanie to DEFAULT na kolumnę, czyli:

Kopiuj
CREATE TABLE rowery
(
  id_rezerwacje serial NOT NULL,
  rowery_id_rowery integer NOT NULL,
  klient_id_klienta integer NOT NULL,
  data_rezerwacji timestamp without time zone NOT NULL DEFAULT transaction_timestamp(),
  ile_dni integer,
  CONSTRAINT rowery_pkey PRIMARY KEY (id_rezerwacje)
)

A jak na INSERT i UPDATE, to funkcja + trigger

QK
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 11 lat
0

Dziękuję :)

Swoją drogą, da to się jednak zrobić także funkcją, wystarczy, żeby była VALATILE

edytowany 1x, ostatnio: Qkartka

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.