Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wypełnianie typu rowtype
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
viking
  1. CREATE OR REPLACE FUNCTION x()
  2. RETURNS setof "faktury" AS
  3. $BODY$
  4. DECLARE
  5. outdated_invoices "faktury"%ROWTYPE;
  6.  
  7. BEGIN
  8. FOR outdated_invoices IN
  9. SELECT ff.id_faktury, ff.id_transakcji, ff.numer_faktury
  10. FROM "faktury" ff
  11. WHERE ff.data_wplaty IS NULL
  12. AND ff.data_wystawienia_fv + interval '7 days' < CURRENT_DATE
  13. loop
  14. RETURN next outdated_invoices;
  15. end loop;
  16. RETURN;
  17. END;


Struktura tej tabeli jest id_faktury|id_firmy|inne_id|...|numer_faktury

Wytłumaczcie mi proszę dlaczego postgres dla zapytania select * x(); zamiast podstawić odpowiednie kolumny do ROWTYPE wciska je po kolei według selecta? Czyli zamiast wypełnić na przykład:
Kod
id_faktury|null|null|...|numer_faktury

wstawia zwyczajnie
Kod
id_faktury|id_transakcji|numer_faktury

Czyli w tym wypadku numer_faktury trafia do kolumny integer inne_id.

Może to piątek sprawia że już głupoty wypisuję? smile.gif
phpion
Pewnie dlatego, że pobierasz tylko wybrane kolumny. Musiałbyś pobrać wszystkie kolumny by prawidłowo wypełnić rekord typu "faktury". Wiąże się to zapewne z tym, że Postgres po kolei wypełnia napotkane kolumny. Dlaczego nie opiera się na ich nazwach? Pewnie dlatego, że w przypadku aliasów wypełnienie nie byłoby możliwe. Więc ignoruje nazwy kolumn i wstawia dane po kolei.
viking
Masz rację. Znalazłem w międzyczasie gdzieś informację że postgres indeksy traktuje numerycznie, nie używając nazw kolumn. Moim zdaniem trochę to słabe, przede wszystkim przeczy zasadzie spójności jeżeli w międzyczasie zmieni się struktura tabeli. Wolałbym wywalenie błędu w przypadku niezgodności. A przecież w końcu po to definiuję konkretną tabelę zamiast losowego typu RECORD żeby nie mieć takich kwiatków.
phpion
O spójność się nie martw. Dokładając nowe pole do tabeli jest ono umieszczane na końcu tabeli. W Postgresie nie masz możliwości ustalania na jakiej pozycji zostanie wstawiona nowa kolumna. Mnie to czasem irytuje bo lubię mieć porządek (nawet w kolejności kolumn) wink.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.