jak dodać kolumnę do tabeli

teoretycznie dodanie kolumny do tabeli nie jest problemem. od daaaaaaaaaaaaaawna istnieje ALTER TABLE ADD COLUMN. czy jednak jest to zawsze bezproblemowe?
niestety nie.
otóż – dodanie pola do tabeli zakłada na nią (w całości) exclusive locka.
dla standardowego:

ALTER TABLE t ADD COLUMN c INT8;

to nie problem – taki ALTER trwa moment.
ale co jeśli robimy:

ALTER TABLE t ADD COLUMN c INT8 NOT NULL DEFAULT 123;

tu pojawia się problem.
po pierwsze – not null – wymusza sprawdzenie zawartości bazy.
po drugie – ważniejsze – wyspecyfikowanie "default" przy dodawaniu pola automatycznie wstawi wartość domyślną do wszystkich rekordów obecnie w tabeli.
zasadniczo – super. o to chodzi. ale jak sobie nałożymy na to fakt iż ALTER TABLE lockuje tabelę – oops. recepta na kłopoty.
w szczególności – mając tabelę typu kilka milionów rekordów, na której non stop ktoś pracuje (np. dosyć aktywny serwis www) – zrobienie na niej takiego ALTERa to realnie sprawę ujmując wyłączenie ta
beli i serwisu.
jak więc zrobić dodanie z wyspecyfikowaniem w sposób słuszny?
no cóż – trzeba robić to krokami:
po pierwsze:

ALTER TABLE t ADD COLUMN c INT8;

to się wykona błyskawicznie.
potem (ale jako oddzielne zapytanie!):

ALTER TABLE t ALTER COLUMN c SET DEFAULT 123;

to też pójdzie szybko bo niczego nam nie zaktualizuje. po prostu – nowo wstawiane rekordy będą miały defaulta.
teraz – trzeba zaktualizować starsze. najprościej:

UPDATE t SET c = 123 WHERE c IS NULL;

w szczególności – jak danych jest więcej niż mało (powiedzmy powyżej 100,000 rekordów), to warto rozbić to na kilka oddzielnych zapytań. np:

UPDATE t SET c = 123 WHERE c IS NULL AND id BETWEEN 1 AND 100000;
UPDATE t SET c = 123 WHERE c IS NULL AND id BETWEEN 100001 AND 200000;

itd.
oczywiście – nie można do tego celu użyć funkcji – cała idea tego rozbijania polega na tym by nie robić tego wszystkiego w jednej, olbrzymiej, transakcji!.
no i na koniec pozostaje:

ALTER TABLE t ALTER COLUMN c SET NOT NULL;

to chwilę potrwa – postgres musi sprawdzić dane, ale i tak jest to krótsze i mniej blokujęce niż robienie wszystkiego za jednym zamachem.
oczywiście w tej chwili ktoś może się odezwać i powiedzieć, że w bazie <xxx> to jest prostsze, nie trzeba nic rozbijać, bla bla bla. fakt. w postgresie też nie trzeba – to co pokazałem to jedynie hint jak obejść blokadę przy dodawaniu pól z wartościami domyślnymi przy sporych tabelkach. można to zrobić jednym zapytaniem. i też zadziała. po prostu czasem nie chcemy/nie możemy mieć locka na taki czas jaki jest potrzebny ALTERowi 🙂

fani maca nie mają poczucia humoru?

eh. "uwielbiam" mac'i.
i ich "subtelnych" i "obiektywnych" użytkowników. ale to, że mają poczucie humoru tak samo wysublimowane jak rosyjskie traktorzystki jest dla mnie pewnym novum.
david pogue, autor kolumny technicznej w new york times, nakręcił krótki filmik w którym nabijał sie z windows vista, która w ewidentny sposób ściągnęła pewne rozwiązania z maca.
wszystko byłoby ok, ale ubrał swoje nabija nie się z microsoftu w sarkazm, prezentując poglądy jakoby vista nie ściągała pomysłów z mac os x.
w/g mnie ironia i sarkazm były doskonale widoczne i oczywiste. ale nie dla mac-"fanboyz". david dostał maile z bluzgami za to, że promuje vistę. uwielbiam tych ludzi.

tsearch i synonimy

od daaaaawna w postgresie jest dostępny świetny silnik wyszukiwania pełnotekstowego – tsearch.
ma on spore możliwości, ale jest dosyć trudny przy pierwszym podejściu – trzeba poświęcić z pół godziny na to by załapać o co chodzi, skonfigurować i używać.
natomiast jak już się zrozumie co i jak – można prosto robić nowe, ciekawe rzeczy. przykładowo – dodać własne słowniki synonimów. dokładną metodę zrobienia takiego słownika i dodania go do systemu wyszukującego przedstawił w swoim blogu magnus hagander – ja to przeczytałem i polecam każdemu kto chce zobaczyć jak zrobić ciekawe rzeczy w postgresie.

kolejny “otwarty” stuff

wkurza mnie niepomiernie maniera robienia wszystkie open-. open beer, open bios, open graphic card itd.
ja rozumiem, że ideologia opensource się sprawdziła (przynajmniej tak głosi spora część ludzi), ale przenoszenie tego na sprzęt to przegięcie.
z tego powodu ignorowałem wszelkie informacje o open-telefonach. do czasu.
zobaczyłem to zdjęcie, i się zainteresowałem:

czemu? bo ten telefon mi się spodobał.
więc wszedłem na stronę projektu i poczytałem. przeczytałem press-release'a, przeczytałem z prezentacji. i wyciągnąłem kilka wniosków:

  1. jest nieźle
  2. nie ma zadęcia około-stallmanowego
  3. wydaje się, że kolesie wiedzą co robią, mają wykonawcę, pomysł i biznes-plan!

telefon ma nie mieć klawiatury – za to ekran dotykowy reagujący na palec lub pisak. fajne. pod spodem jakiś linuks (jeden ze slajdów sugeruje, że ma to być cos około debianowego, ale może to tylko przykład).
co z tego wyjdzie? zobaczymy za miesiąc-dwa. jeśli pokaże się w polsce – chyba postaram się wymienić swoje ulubione blackberry na ten telefon. bo jest fajny. i dobrze wygląda. nie dlatego, że jest open-*.

programowanie w ruby – po polsku

z pewnym opóźnieniem, ale przeczytałem, że helion wydał polskie tłumaczenie klasyki dla programistów ruby'ego – "programowanie w języku ruby".
cieszy mnie to, bo może dzięki temu kilka kolejnych osób przekona się do tego języka.
co prawda panowie z helionu dali cenę która dla niektórych może być zaporowa (99 pln), ale w/g mnie warto przyoszczędzić na czym innym i tę książkę kupić. ruby jest świetnym językiem, a ta książka to absolutny klasyk i podstawa.

nintendo wii – szkodliwe dla zdrowia, życia i sprzętu dookoła?

oczywiście "szkodliwe" a nie szkodliwe.
problemem jest wii-mote – bezprzewodowy kontroler do konsoli.
okazuje się, że ludzie tak się zapamiętują w grze, że … dzieją się rzeczy mało symaptyczne:

  • kontroler wylatuje z ręki i rozbija stolik (szklany) czy telewizor
  • zamachy wirtualnymi kijami, bilami czy pięściami są tak intensywne, że grający nie zauważa, że jest za blisko ściany. dużo za blisko … auuu
  • zamach trafia … w osobę obok.

nintendo najpierw wydało ogólną prośbę do graczy by trochę się uspokoili grając, potem po prostu dostarczyli lepsze "smycze" którymi się przypina wii-mote'a do ręki (część graczy z nich jednak nie korzysta argumentując, że utrudniają).
a co zrobili potem? nic. cieszą się z darmowej reklamy: "wii i gry na nim są tak świetne, że gracze zapominają o rzeczywistym świecie" – czy można sobie wyobrazić lepszą reklamę? ciężko by z tym było.
no cóż – ja sobie wii kupię, ale zastanawiam się czy nie pójść w ślady niektórych graczy którzy wymyślają mocniejsze więzy między ręką a wii-mote'em – klej, rękawice, taśma klejąca.

żyj bez depresji, ale krótko

na rynku jest wiele leków antydepresyjnych. najbardziej znane to prozac i zoloft, ale są też inne.
od dawna było wiadomo, że nie należy ich podawać dzieciom – powodowały wzrost tendencji samobójczych.
ostatnio przeprowadzone badania pokazały jednak, że problem tyczy nie tylko dzieci. na badanej grupie ludzi do 25 roku życia, zażywanie antydepresantów podwoiło prawdopodobieństwo przygotowywania się lub wręcz targnięcia się na swoje życie.
w chwili obecnej odbywają się dyskusje nad tym czy na opakowaniach umieszczać zmodyfikowane ostrzeżenia. jednocześnie rozwija się ruch ludzi którzy uważają, że wszystkie te leki powinny być poddane dużo szczegółowszej kontroli – gdyż jaką mamy pewność, że nie powodują one też takich (lub innych) zmian u starszych?
uwaga – poniżej jest tekst który niektórzy mogą odebrać jako nie-halo – jeśli w temacie tego posta można cię urazić – nie czytaj dalej.

 

może nie powinno, ale lekko mnie śmieszy wspomnienie filmu "pump up the volume" (więcej czadu) gdzie główny bohater (harry), prowadzący piracką stację radiową, dostaje list od kolesia który jest w depresji i pyta się harry'ego czy powinien popełnić samobójstwo. harry do niego dzwoni, gadają, po czym koleś w depresji się rozłącza. harry stwierdza, że teraz on chce się zabić, ale na szczęście jest zbyt załamany by mu sie chciało.
czyżby żarcik producentów filmu przeszedł w życie? jesteś załamany, masz depresję – weź nasz lek – poprawi ci się o tyle, że się powiesisz?

korzystanie z dobrych hasłem poniża?

paweł krawczyk wygrzebał skądś informację, że:
"Związek zawodowy jednej z polskich firm oskarżył administratorów sieci o mobbing."
mobbing w/g wikipedii to:
"celowe, systematyczne, powtarzające się przez dłuższy czas, zachowania naruszające godność osobistą pracownika"
encyklopedia wiem podaje trochę inne wyjaśnienie:
"psychiczne nękanie w miejscu pracy lub szkole, odbywające się w sposób systematyczny i ukierunkowany."
ale ogólnie wiadomo o co chodzi.
czym więc podpadli admini? otóż: wprowadzili (i pilnowali) politykę bezpieczeństwa polegającą na używaniu jedynie dobrych (trudnych) haseł.
słodkie 🙂