Witajcie, pracuje obecnie w dosyć mocno rozbudowanym projekcie API pisanym w Railsach.
Case z jakim do Was przybywam jest dosyć specyficzny, zahacza trochę o Railsy, trochę o Postgres’a
Problem z jakim się mierzę związany jest z kolumną w PG, na której działa sekwencja. Z chwilą wykonania query z poziomu aplikacji, dane zapisują się w ROW tabeli, sekwencja na kolumnie działa, autoinkrementacja również, z poziomu POSTICO widać wszystko bardzo ładnie. Co ciekawe, nie widać zmian na tej konkretnej kolumnie z poziomu obiektu, ale może od początku
MIGRACJA:
add_column :some_tab, :some_col, :bigserial
add_index :some_tab, :some_col, :unique => true
execute “ALTER SEQUENCE some_tab_some_col_seq INCREMENT BY 1 RESTART WITH 2000000000;”
Jak widać poniżej QUERY z poziomu aplikacji bardzo ładnie działa i zapisuje autoincrement’owane wartości do DB
Problem pojawia się w trakcie QUERY, mianowicie w obiekcie, który przenosi dane.
Od początku, kontroler wygląda standardowo jak to w API, na akcji CREATE mamy formularz, przez który user wprowadza jakieś dane. Formularz wraz z innym obiektem przekazywany jest do serwisu. W serwisie mamy trochę logiki, która obraca danymi. I tutaj w tym serwisie dzieje się coś magicznego
Obiekt, który powinien przenosić w sobie wartość z kolumny some_col zamiast wartości podczas wykonania requestu ma nil’a. Ale wystarczy zrobić na tym obiekcie przeładowanie np: object.reload i już wartość z some_col się pojawia…
Wygląda to tak, jakby na bazie do kolumny some_col wartości nie zapisywały się natychmiast, co jest mocno mało prawdopodobne, ponieważ to właśnie z tej tabeli, z tego ROW, który tworzy się wraz z request’em pobierane są dane do obiektu. A patrząc na bazę, wszystko się w niej odkłada jak należy.
Czy ktoś z Was mierzył się z podobnym problemem ?
Z góry dzięki za info,