1

Temat: update tabeli

Mam tabele o strukturze:

CREATE TABLE wgdd_dane (
  id_wgdd serial NOT NULL,
  id_wgd integer NOT NULL,
  data_add timestamp without time zone NOT NULL
);

insert into wgdd_dane values (1, 1, '2012-02-10 11:54:54');
insert into wgdd_dane values (2, 1, '2012-02-08 11:54:54');
insert into wgdd_dane values (3, 1, '2012-02-11 11:54:54');
insert into wgdd_dane values (4, 2, '2012-02-10 11:54:54');
insert into wgdd_dane values (5, 2, '2012-02-10 11:54:55');
insert into wgdd_dane values (6, 2, '2012-02-10 11:54:58');
insert into wgdd_dane values (7, 3, '2012-02-10 11:54:54');
insert into wgdd_dane values (8, 3, '2012-02-10 11:44:54');
insert into wgdd_dane values (9, 2, '2012-02-10 11:54:56');
insert into wgdd_dane values (10, 2, '2012-02-10 11:54:57');

Potrzebuję dołożyć do tej tabeli kolumnę pozycja (integer) o wartości zwiększanej o 1 (na starcie = 1) dla tych samych id_wgd zgodnie z data_add. id_wgd nie muszą być po kolei.
Jeżeli id_wgd się zmienia to licznik startuje na nowo.

2

Odp: update tabeli

Jedyne co mi przychodzi na mysl to trigger ... ale stanowczo odradzam to rozwiązanie z powodów wydajnościowych. Na pewno potrzebujesz te kolumnę w tej tabeli. Nie wystarczy Ci widok załozony na tej tabli z dodatkową taką kolumną obliczaną dynamicznie przy użyciu funkcji analitycznych.

3

Odp: update tabeli

na pewno potrzebuję ponieważ mam już kilka tysięcy rekordów w tej tabeli i teraz wyszło przy generowaniu pdf, że kolejność (struktura tabeli jest tylko częściowa) sortowania względem daty dodawania nie zawsze daje prawidłowy rezultat - potrzeba było wstawić rekord pośrodku powiedzmy 100 elementowego id_wgd. W bazie zmieniłem to ręcznie ale na przyszłość chcę tego unikać. Chodzi o uaktualnienie tylko tych które są w tabeli. Przy dodawaniu nowych to mam zrobione w php ale jeszcze nie zmieniałem tabeli.
Jeżeli się nie da to zrobię tak, że wstawie dla wszystkich 1 i sortował będę po pozycji, data_add. Przy takim założeniu wynik będzie prawidłowy a wątek można zamknąć.

4

Odp: update tabeli

Całkowicie zgadzam się z rski, przy paru tysiącach rekordów nie warto robić triggera, wystarczy użyć windows function, działają od wersji 8.4

select id_wgdd, id_wgd, data_add, row_number() over (partition by id_wgd  order by data_add ) as pozycja from wgdd_dane order by id_wgdd

Jak masz problemy wydajnościowe to ustaw pole  id_wgdd jako primary key, a pole id_wgd jako klucz obcy dodaj też index

5

Odp: update tabeli

Czesc
Moze sobie poradziles?

Ja dodal bym kolumne. Utworzyl SEQUENS'a w tempie i wywolaj update z SEQUENS'em

Jak potrzebujesz wiecej info daj znac

6

Odp: update tabeli

Tak poradziłem sobie,
Wersja jest 8.3 więc zrobiłem to przez php w pętlach.
Poszło szybko.

7

Odp: update tabeli

Witam To jest super, to jest niesamowite informacje, i również patrząc na to.W bazie zmieniłem to ręcznie ale na przyszłość chcę tego unikać. Chodzi o uaktualnienie tylko tych które są w tabeli. Przy dodawaniu nowych to mam zrobione w php ale jeszcze nie zmieniałem tabeli.
Pozdrawiam

michaeljee9