postgresql 7.3
Jakub Bogusz
qboosh w pld.org.pl
Wto, 18 Lut 2003, 00:29:29 CET
On Mon, Feb 17, 2003 at 06:30:11PM +0100, wrobell wrote:
> On Mon, Feb 17, 2003 at 05:09:17PM +0100, Jakub Bogusz wrote:
> > Przymierzam się do postgresa 7.3 (zwłaszcza pod kątem upgrade z Ra[1])
> > i mam parę uwag/TODO:
> >
> > 1. zniknęła akcja init dla skryptu init
> > Proponuję dodanie prostej wersji - coś jak w 7.2, tylko
> > z uwzględnieniem PG_DB_CLUSTERS (jeśli nie ustawione - komunikat
> > o błędzie, jak ustawione - po kolei dla wszystkich nie zainicjowanych
> > jeszcze klastrów).
> >
> > Chodzi o to, żeby dało się szybko zrobić bazę w prostym przypadku, bez
> > zaglądania za każdym razem do man createdb (nigdy nie pamiętam, jak to
> > się uruchamia); a jeżeli ktoś chce coś bardziej skompilokowanego, to
> > i tak użyje createdb.
> - o ile dobrze pamietam, to akcja init w postgresql.init nie sluzyla do
> tworzenia bazy danych tylko do tworzenia standardowego klastra
No tak.
> - klastra tworzy sie za pomoca initdb i w najprostszym przypadku
> wystarczy:
O właśnie, nawet polecenia mi się pomyliły ;)
> initdb -D /var/lib/pgsql
>
> co mysle, ze nie jest na tyle trudne ani skomplikowane, zeby uzasdnialo
> istnienie dodatkowej funkcjonalnosci w postgresql.init
Skoro można to zrobić małym kosztem, to dlaczego maiłoby nie być.
Tak jak w mysql.init i squid.init - akcja init przystosowuje pakiet do
pracy po pierwszej instalacji.
Akcja init może wyglądać tak:
init)
for pgdir in $DB_CLUSTERS; do
if [ -f $pgdir/PG_VERSION ]; then
echo "Skipping existing cluster $pgdir"
else
echo "Initializing cluster $pgdir"
TMPDIR=/tmp su - postgres -s /bin/sh -c "initdb -D $pgdir"
fi
done
echo "REMEMBER to setup password for user \"postgres\"!"
> > 2. upgrade
> > Komunikat "please downgrade" w %pre wygląda niezbyt poważnie.
> >
> > Powinno być co najmniej coś takiego jak w 7.2 (tylko dla wszystkich
> > klastrów), albo jakaś forma are-you-sure (jeżeli stare binarki będą
> > kopiowane do innego katalogu) - tylko jak to zrobić nieinteraktywnie?
>
> > Automatyczne dump+restore nie jest możliwe, ale można to ułatwić.
> > W pakietach z wielu dystrubucji (RH, Mdk, SuSE, Debian) są załączane
> > skrypty do migracji (w większości takie same, lub z niewielkimi
> > modyfikacjami) - do uruchomienia po upgrade pakietu (tylko Debian
> > proponuje uruchomienie podczas upgrade pakietu - ale bez gwarancji
> > powodzenia).
> > Skrypt opiera się na przeniesieniu danych i napuszczeniu na ten katalog
> > starej wersji postgresa (binarki są kopiowane do oddzielnego katalogu
> > w %pre) uruchomionej na innym porcie.
> > U nas może być więcej roboty ze względu na wiele klastrów.
>
> IMHO, bym odpuscil robienie jakichkolwiek dodatkowych skryptów.
> Kazdy administrator powinien sobie zdawac sprawe
> o tym, ze musi zrobic dump-a bazy przez upgrade'em do nowszej wersji
> i robic upgrade _świadomie_.
Tylko nie każdy administrator systemu jest administratorem baz danych
- może nie od razu wiedzieć, czym się różni zmiana trzeciej cyfry od
zmiany drugiej czy pierwszej w numerze wersji postgresa (zapewne "do
pierwszego golenia").
> Ma do tego celu stosowne, łatwe
> w użyciu narzędzia: pg_dump i pg_restore.
Przy większej liczbie baz raczej męczące, mniej roboty jest z pg_dumpall
i psql (chociaż z użyciem tekstowych dumpów proces może trwać dłużej).
Przy wielu klastrach nie wystarczy już jedno polecenie przed, jedno po
upgradzie pakietu - musi być po jednym dla każdego klastra. I to można
próbować uprościć (np. dostarczyć skrypty wywoływane jako
"pg_dumpallclusters <katalog>" i "pg_restoreallclusters <katalog>",
zrzucające wszystkie dane do i odzyskujące z katalogu).
A, jeszcze jedno zauważyłem - dump+restore to nie wszystko. Katalog
$PGDATA zawiera jeszcze pliki konfiguracyjne...
> Co do komunikatu "please downgrade", to może ew. jakieś zabezpieczenie
> przed automatycznym upgrejdem? Sprawdzać postgresql.sysconfig na obecność
> PG_DB_CLUSTERS? Jakiekolwiek sugestie mile widziane.
Czy postgres 7.3.x umieszcza "7.3" w $PGDATA/PG_VERSION?
Jeśli tak, to można wrzucić do %pre:
PG_DB_CLUSTERS=""
if [ -f /etc/sysconfig/postgresql ]; then
. /etc/sysconfig/postgresql
fi
foundold=0
for pgdir in $PG_DB_CLUSTERS; do
if [ -f $pgdir/PG_VERSION ]; then
if `cat $pgdir/PG_VERSION` != '7.3' ]; then
echo "Found database(s) in older, incompatible format in cluster $pgdir."
foundold=1
fi
fi
done
if [ "$foundold" = "1" ]; then
echo
echo "Dump all data from clusters mentioned above (e.g. using pg_dumpall)"
echo "and clean (or rename) echo those directories; then upgrade postgresql"
echo "and restore all data (e.g. using psql)"
exit 1
fi
--
Jakub Bogusz http://www.cs.net.pl/~qboosh/
Więcej informacji o liście dyskusyjnej pld-devel-pl