postgresql

probably the best database in FLOSS

Kolejkowanie zadań - cron, postgresql, aplikacja webowa

Sytuacja: Jest skrypt odpalany regularnie z crona. Skrypt robi "coś", dla utrudnienia powiedzmy, że w kilku rodzajach, a wyniki wrzuca do bazy danych (w tym przypadku: postgresql'a). Dane z bazy są prezentowane w aplikacji webowej. Skrypt działa dość długo, powiedzmy, że około godziny. Jednocześnie powinna działać tylko jedna instancja, ale ponieważ jest kilka rodzajów "czegoś", to w zależności od rodzaju, zadanie musi być uruchamiane z różnym interwałem, może być też jednorazowe.

Problem: Skrypt może być wywoływany "według planu" - regularnie, albo "on demand" - użytkownik aplikacji stwierdza, że skrypt ma wykonać "teraz zaraz" jakiś rodzaj operacji. Jak więc zarządzać momentem wywołania skryptu z crona i aplikacji jednocześnie?

postgresql: usuwanie elementów z arraya

PostgreSQL ma rozbudowany system typów, wśród których całkiem przydatną strukturą jest typ tablicowy (array). Niestety, funkcjonalność związana z tym typem jest dość niesymetryczna: jest możliwość tworzenia nowych obiektów tego typu, wyszukiwania, dodawania elementów do istniejących tablic, ale nie ma nigdzie żadnej funkcji ani operatora do usuwania elementów z arraya. Nie ma jednak co rozpaczać, gdyż PostgreSQL pozwala na definiowanie własnych funkcji i operatorów (yaay! thank you, Captain Obvious!), co niniejszym opisuję.

PostgreSQL: jak liczyć bez użycia count()

Zapraszam na małe zajęcia praktyczno-techniczne. Dziś przedstawię przepis na liczniki w PostgreSQL'u, które mogą nam zaoszczędzić drogich count'ów na tabelach. Rozwiązanie jest wprawdzie opisane na konkretną bazę, ale powinno być do zaimplementowania na każdą bazę, która obsługuje triggery. Poziom trudności w okolicach średnio-zaawansowanego.

pgplsh, czyli czego to ludzie nie wymyślą

Podkusiło mnie coś, żeby zajrzeć dziś w appendiksy
w podręczniku do PostgreSQL'a. Podkusiło i pokarało.

Wyczytałem tam, że jest takie coś, jak pgplsh - shellowy język proceduralny. Długo nie myślałem, ściągnąłem źródła (wersja 1.2) i zabrałem się za instalację.

Syndicate content