C jak configure

Październik 29, 2008

PgBouncer – PostgreSQL connection pooler

Filed under: konfiguracja — erendil @ 4:32 pm
Tags: , , ,

PgBouncer to niezła alternatywa dla pgpool’a. Jego głównym zadaniem jest odciążyć nieco naszego PostgreSQL’a zabijanego kolejnymi connect’ami. PgBouncer tworzy pulę połączeń do serwera bazy danych i wydajnie z niej korzysta. Dostępne są następujące tryby:

Session pooling -gdy klient się łączy, połączenie z serwerem zostanie przypisane do niego przez cały czas, po rozłączeniu wraca z powrotem do puli.

Transaction pooling – połączenie aktywne tylko podczas transakcji, po jej zakończeniu wraca.

Statement pooling – najbardziej agresywna metoda, połącznie wraca do puli natychmiast po wykonaniu kwerendy(generalnie nie polecana ;) )

Administracja PgBouncer‘em jest bardzo prosta i sprowadza się do kilku poleceń kiedy jesteśmy podłączeni do wirtualnej bazy PgBouncer‘a, ale o tym później.

Na początek zainstalujemy PgBouncer‘a, ściągamy źródła stąd: http://pgfoundry.org/projects/pgbouncer

Do prawidłowego zainstalowania w systemie potrzebujemy również libevent.

cd /usr/ports/devel/libevent
make
make install

Ok libevent siedzi na miejscu, teraz zróbmy sobie PgBouncer‘a:

Rozpakowujemy źródła i piszemy:

cd pgbouncer-1.2.3
./configure –with-libevent=/usr/local
gmake
gmake install

Teraz pora na przygotowanie plików konfiguracyjnych dla programu, potrzebne są 2, jeden plik dla PgBouncer‘a, drugi plik z userami i hasłami.

Prosta zawartość pierwszego z nich (/usr/local/etc/pgbouncer.ini):

[databases]
naszabaza = host=127.0.0.1 port=5432 dbname=naszabaza

[pgbouncer]
listen_port = 6543
listen_addr = 127.0.0.1
auth_type = plain
auth_file = /usr/local/etc/users.txt
logfile = /var/log/pgbouncer.log
pidfile = /tmp/pgbouncer.pid
admin_users = uzytkownik
max_client_conn = 300
default_pool_size = 200
pool_mode = session
server_connect_timeout = 300
client_login_timeout = 300

Oraz drugiego (/usr/local/etc/users.txt):

“uzytkownik” “haslo_uzytkownika”

Uwierzytelnianie użytkowników:

md5 – domyślnie stosowane
crypt – czyli crypt
plain – czysty tekst, czyli niezakodowane
trust – zaufany – brak autentykacji, ale plik users.txt musi zawierać nazwę użytkownika
any – j.w. plus nazwa użytkownika jest ignorowana, wymaga aby wszystkie bazy danych zostały skonfigurowane do logowania się jako konkretny użytkownik.
Do kodowania haseł można wykorzystać np. Apache’owy htpasswd.
OK, mamy zainstalowanego PgBouncer‘a, czas go uruchomić, robimy to za pomocą następującej komendy (jako user, a nie root ;) :
/usr/local/bin/pgbouncer -d /usr/local/etc/pgbouncer.ini
Konsola administracyjna:
psql -h 127.0.0.1 -p 6543 -U user pgbouncer

Po zalogowaniu poleceniem show help; zobaczymy liste dostępnych komend.

pgbouncer=# show help;
NOTICE:  Console usage
DETAIL:
SHOW [HELP|CONFIG|DATABASES|FDS|POOLS|CLIENTS|SERVERS|SOCKETS|LISTS|VERSION]
SET key = arg
RELOAD
PAUSE
SUSPEND
RESUME
SHUTDOWN

Kwiecień 18, 2008

sql – ściąga

Filed under: konfiguracja — erendil @ 3:36 pm
Tags: , , ,

Gdzieś na sieci swego czasu wygrzebałem, a że często korzystam więc wrzucam, może komuś też się przyda :)

SELECT

SELECT x,y,x FROM tabxyz;
SELECT x*12,y/30 FROM tabxyz;
SELECT x*12 AS “alias ze spacjami” FROM tabxyz; //dzieki ‘ ‘ mozna uzywac spacji wewnatrz aliasow
mySQL) ‘ ‘ <- do aliasow
SELECT ‘tekst1′||x||’tekst2′||y FROM tabxyz;
mySQL) SELECT CONCAT(‘tekst1′,x,’ ma ‘, y) FROM tabxyz;
SELECT x+NVL(y,0) FROM tabxyz;
mySQL) nie ma NVL
SELECT DISTINCT x,y FORM tabxyz; //eliminowanie duplikatow z tych wybranych krotek
SELECT x,y,z FROM tabxyz ORDER BY x DESC,y ASC,2; //DESC(descending) ASC(ascending)
SELECT x,y FROM tabxyz WHERE x>400 AND y!=’leo’; // Operatory: =,!=,<>,>,>=,<,<=
u) != a <> sa rownowazne
SELECT y FROM tabxyz WHERE y LIKE ‘_M%’; // _ to dowolny znak, % to dowolny ciag znakow
SELECT x FROM tabxyz WHERE x IS NULL; //nie ma nawet wartosci 0
mySQL) trzeba poslugiwac sie IS NULL / IS NOT NULL a nie mozna jak w Oracle x!=NULL
SELECT y FROM tabxyz WHERE y NOT IN(‘tekst1′,’tekst2′);
NOT BETWEEN … AND …, NOT IN, NOT LIKE, IS NOT NULL
u) wszystkim dodajemy not z przodu z wyjatkiem IS NULL -> IS NOT NULL dla poprawnosci jezyka
u) BETWEEN … AND … dziala jak zbior domkniety.
AND, OR, NOT //trzeba pamietac ze NULL nam troszke miesza bo np. TRUE OR NULL = TRUE.
U) AND ma najwyzszy priorytet zatem czasami trzeba uzyc nawiasow.

FUNKCJE

SELECT LOWER(y), UPPER(‘tekst1′), INITCAP(z) FROM tabxyz; //INITCAP pierwsza litera duza
SELECT LPAD(y,20,’*'),RPAD(z,24,’123′) FROM tabxyz; // ostatnim argumentem jest ciag ew. znak lub domyslna spacja
//uzupelnia z LEFT,RIGHT do dlugosci n o podany znak (domyslnie spacja) czyli nie trzeba podac
mySQL) nie ma INITCAP, a LPAD i RPAD wymaga 3 argumentu.
SELECT SUBSTR(y,3,4),INSTR(z,’tekst1′),LENGTH(z) FROM tabxyz;
//SUBSTR(y,n,m) wycina z ciagu y pod pozycji n,m znakow (te pozostana)
//np.SUBSTR(nazwisko,1,2) zostana 2pierwsze litery ciagu nazwisko
//INSTR(z,’tekst1′,[m,n]) podaje pierwsze(n-te) wystapienie tekstu w ciagu z od pierwszej (m-tej) pozycji
SELECT LTRIM(y,’zb_znakow’),RTRIM(z) FROM tabxyz; //usuwa z lewej,prawej podane znaki, domyslnie spacja
mySQL)tylko jeden argument czyli usunie spacaje z lewej/prawej
SELECT TRANSLATE(y,’ABC’,'XYZ’) FROM tabxyz; //zamiana w ciagu y znakow na odpowiadajace im nowe znaki A->X,B->Y
mySQL) nie ma TRANSLATE
SELECT x,REPLACE(z,’stary’,'nowy’) FROM tabxyz; //zamieni kazde wystapienie ciagu 1 na ciag 2 w ciagu z
SELECT ROUND(123.456,1),TRUNC(12.34,1),FLOOR(1.5),CEIL(1.5) FROM dual; //zaokragla,obcina,podloga,sufit
mySQL) nie ma TRUNC
SELECT POWER(2,16),SQRT(16),ABS(-5),MOD(7,4),SIGN(7) FROM dual;//MOD=%wC, SIGN(x) -1 gdy x<0 x=0 to 0 else 1
SELECT SYSDATE FROM dual; //data systemowa
mySQL) nie ma pseudokolumny SYSDATE w dual
SELECT MONTHS_BETWEEN(SYSDATE,z) FROM tabxyz; //liczba miesiecy pomiedzy datami (z typu DATE)
SELECT ADD_MONTHS(SYSDATE,2) FROM dual; //zwraca date + n miesiecy
SELECT NEXT_DAY(SYSDATE,’WTOREK’) FROM dual; //zwraca kolejna date z wtorkiem po podanej
SELECT LAST_DAY(DATE ’1982-09-17′) FROM dual; //zwraca date^ ostatniego dnia w tym miesiacu podanej daty
mySQL) z tych 4 wyzej jest tylko LAST_DAY
SELECT TO_CHAR(SYSDATE,’SCC YYYY MONTH DAY HH24 MI SS’) FROM dual; //konwersja do char
SCC -stulecie, YYYY -rok,BC AD -wsk ery,MM -m-c(MONTH nazwa), D DD DDD dzien~(DAY nazwa),AM PM -wsk pory,HH
(HH24),MI,SS
SELECT TO_NUMBER(‘-12,23′) FROM dual;
SELECT TO_DATE(’82_09_17′,’YY_MM_DD’) FROM dual;
SELECT NVL2(x,7,0) FROM tabxyz; //operator ?wC jesli x<>NULL to 7 else 0
mySQL) brak NVL,NVL2 i funkcji konwersji TO_…
SELECT GREATEST(x,NVL(y,0)),LEAST(z) FROM tabxyz; //zwraca najwieksza, najmniejsza wartosc z listy argumnentow
SELECT x,y,CASE WHEN x>10 THEN ‘tekst1′ ELSE UPPER(y) END FROM tabxyz;
//CASE WHEN warunek1 THEN wartosc1 WHEN warunek2 THEN wartosc2 [ ELSE wartosc ] END
//zatem mimo braku NVL w mySQL mozna tak:
mysql> SELECT nazwisko,placa_pod+( CASE WHEN placa_dod IS NULL THEN 0 ELSE placa_dod END) AS ‘NVL’ FROM Pracownicy;
SELECT x,DECODE(x,’tekst1′,’***’,'tekst2′,’###’,'@@@’) FROM tabxyz;
//DECODE(wyrazenie,S1,W1,S2,W2,D) jesli wyrazenie =S1 to W1 jesli =S2 to W2 else D
mySQL) brak DECODE (cos swiruje)
AVG,COUNT,MAX,MIN,SUM,VARIANCE,STDDEV np. SELECT COUNT (*),MAX(x) FROM tabxyz WHERE z=20;
SELECT y,AVG(z) FROM tabxyz GROUP BY y; // lub GROUP BY x,y; czyli w ramach grupowania x grupuj y;
SELECT x,COUNT(*) FROM tabxyz GROUP BY x HAVING COUNT(*)>=2; //Having dziala jak WHERE tylko ze tu dla grupy
np. select id_zesp,sum(placa_pod) from pracownicy where etat in(‘PROFESOR’,'ASYSTENT’) group by id_zesp having
sum(placa_pod)>3000

JOIN`y

SELECT x,q FROM tabx,tabq;
SELECT x,q FROM tabx CROSS JOIN tabq;
//te polaczenia sa sobie rownowazne – iloczyn kartezjanski

//Teraz polaczenia równooeciowe i naturalne:
SELECT p.nazwa,z.adres FROM tabnazw p, tabadres z WHERE p.id=z.id;
SELECT p.nazwa,z.adres FROM tabnazw p JOIN tabadres z ON p.id=z.id;

//Naturalne w Oracle daja w wyniku tylko raz atrybut polaczeniowy
SELECT nazwa,adres FROM tabnazw NATURAL JOIN tabadres;
SELECT nazwa,adres FROM tabnazw JOIN tabadres USING(id_zesp);

//Polaczenie nierownosciowe
SELECT x,lowx,upx FROM tabx JOIN tablu ON x BETWEEN lowx AND upx;
SELECT x,lowx,upx FROM tabx,tablu WHERE x BETWEEN lowx AND upx;
DESCRIBE etaty;

//Polaczenia zewnetrzne OUTER JOIN
SELECT p.x, z.y FROM tabx p,taby z WHERE p.id=z.id(+);
//tam gdzie plusik to tam dodajemy nulle na wpadek braku odpowiednika dla tego bez plusika
SELECT p.x, z.y FROM tabx p LEFT OUTER JOIN taby z ON p.id=z.id;
//jesli w p nie bedzie odpowiednika w z to bedzie p z nullem
SELECT p.x, z.y FROM tabx p RIGHT OUTER JOIN taby z ON p.id=z.id;
//jesli w z nie bedzie odpowiednika w tabeli p to ta krotka bedzie z nullem
SELECT p.x, z.y FROM tabx p FULL OUTER JOIN taby z ON p.id=z.id;
SELECT x,y FROM tabx FULL OUTER JOIN taby USING(id); //naturalne zewnetrzne
//FULL OUTER pozwala na zarowno uzupelnianie niepasujacych krotek z lewej i prawej tabeli polaczenia.

//Polaczenie zwrotne SELF JOIN
SELECT p.x,z.y FROM tabx p,taby z WHERE p.id_szefa=z.id_prac;
SELECT p.x,z.y FROM tabx p JOIN taby z ON p.id_szefa=z.id_prac;
//dziala jak sprzezenie xwrotne czyli polaczenie ze soba

//Operatory zbiorowe //VERTICAL JOIN
UNION – suma zbiorow,eliminuje duplikaty
UNION ALL – suma zbiorow, nie eliminuje duplikatow
INTERSECT – czesc wspolna zbiorow,eliminuje duplikaty
MINUS – roznica zbiorow, eliminuje duplikaty
mySQL) nie ma MINUS i INTERSECT
SELECT x FROM tabx WHERE y>=30 MINUS SELECT x FROM tabx WHERE y<=20;
//czyli bedzie to zbior krotek x ktore maja y miedzy 21 a 30
SELECT x FROM tabx UNION SELECT y FROM taby;
//powstanie 1kolunowa tabelka zawierajaca wszystkie krotki x i krotki y

SubSelecT`y

SELECT x,y FROM tabxy WHERE y=(SELECT MIN(y) FROM tabxy);
//zwroci 1krotke x,y (to z najmniejsza wartoscia y)

SELECT x,y,z FROM tabxyz WHERE (y,z)=(SELECT ‘wartosc y’,MAX(z) FROM tabxyz WHERE y=’wartosc y’);
//Uwaga bo select ma zwrocic 1 wartosc wiec mozna tez tak:
SELECT x,y,z FROM tabxyz WHERE (y,z)=(SELECT y,MAX(z) FROM tabxyz WHERE y=’wartosc y’ GROUP BY y);

//Teraz zwracamy wiecej wartosci:
SELECT x,y,z FROM tabxyz WHERE (y,z) IN (SELECT y,MIN(Z) FROM tabxyz GROUP BY y);
//Podzapytanie da krotki o kazdej wartosci y z min(z) a calosc bedzie z odpowiadajacym x.

TODO: ANY ALL

//Wielopoziomowe podzapytanie
SELECT x,y,x FROM tabxyz WHERE y > (SELECT AVG(y) FROM tabxyz WHERE z=(SELECT z FROM tabz WHERE z=’wartosc z’));
//Czyli jesli srednia y dla konkretnej 1 wartosci z bedzie porownana z y zapytania zewnetrznego.

//Podzapytania skorelowane
SELECT p.x FROM tabxyz p WHERE p.y > (SELECT AVG(y) FROM tabxyz WHERE id=p.id);
//czyli kiedy w podzapytaniu chcemy sie odwolac do krotki z zapytania zewnetrznego to mamy zapytanie skorelowane.

SELECT x FROM tabxyz WHERE EXISTS (SELECT * FROM tabq);
//wypisze krotki x o ile istnieje cos w tabq
SELECT p.x FROM tabxyz p WHERE NOT EXISTS (SELECT idq FROM tabq WHERE idq=p.id);

//Podzapytania w SELECT
SELECT x,(SELECT MAX(Y) FROM tabxyz) FROM tabxyz;
SELECT p.X,(SELECT MAX(Y) FROM tabxyz WHERE x=p.x) FROM tabxyz;

WITH x_y AS (SELECT x,y FROM tabx NATURAL JOIN taby) SELECT * FROM x_y WHERE y>10;
//czyli taki skrot do danego selecta.
mySQL) nie ma WITH
mySQL) nie ma zapytan hierarchicznych

CREATE table

oracle) CREATE TABLE newtable ( id NUMBER(4) PRIMARY KEY, name CHAR(20) UNIQUE NOT NULL, salary NUMBER(10,2) );
mySQL) CREATE TABLE newtable (id INT(4) PRIMARY KEY,name CHAR(20) UNIQUE NOT NULL, salary DECIMAL(10,2) );

U!) NUMBER(3,2) oznaczac bedzie 3cyfrowa liczbe w tym 2 po przecinku, czyli 3.14 jest ok, ale 12.56 juz nie

CREATE TABLE newtable ( value NUMBER(2) DEFAULT 0, value2 NUMBER(5) CHECK (value2 BETWEEN 10 AND 10000) );
CREATE TABLE newtable ( id NUMBER(2) PRIMARY KEY, id2 NUMBER(2) REFERENCES othertable(id2_inother) );
CREATE TABLE newtable ( id2 NUMBER(2) REFERENCES othertable(id2_inother) ON DELETE CASCASE );
CREATE TABLE newtable ( id2 NUMBER(2) REFERENCES othertable(id2_inother) ON DELETE SET NULL );
CREATE TABLE newtable ( id NUMBER(2) CONSTRAINT klucz_podst PRIMARY KEY, value DATE DEFAULT SYSDATE );

//Tworzenie relacje przez podzapytanie
CREATE TABLE newtable AS SELECT id,name AS “nazwisko”,value FROM tabx WHERE value>10;
CREATE TABLE newtable(id,nazwisko,value) AS SELECT id,name AS “nazwisko”,value FROM tabx WHERE name IN(‘aaa’,'abc’);

//Modyfikowanie tabel
ALTER TABLE tabx ADD newattr VARCHAR2(10) DEFAULT ‘hhehe’;
ALTER TABLE tabx MODIFY attr NUMBER(2,1) NOT NULL;
ALTER TABLE tabx MODIFY ‘attr’ ‘new_nazwa’ NUMBER(2,1) NOT NULL UNIQUE;
ALTER TABLE tabx DROP COLUMN(value);
ALTER TABLE tabx DROP CONSTRAINT(value);

//ON/OFF constraint
ALTER TABLE tabx DISABLE CONSTARINT ograniczenie1;
ALTER TABLE tabx DISABLE PRIMARY KEY;
ALTER TABLE tabx ENABLE CONSTARAITN ograniczenie2;

//Zmiana nazwy relacji
RENAME nazwa TO nowa_nazwa;

//Komentarze
COMMENT ON TABLE tabx IS ‘komentarz1′;
COMMENT ON COLUMN tabx.attr1 IS ‘komentarz_kolumny1′;
SELECT * FROM USER_TAB_COMMENTS;
SELECT * FROM USER_COL_COMMENTS;

DROP TABLE nazwa;
DROP TABLE nazwa CASCADE CONSTRAINTS;
SELECT * FROM user_constraints;
SELECT * FROM USER_TABLES;

MODIFY/INSERT INTO TABLES

INSERT INTO tabx VALUES ( 110, ‘Routing Protocol’,0);
INSERT INTO tabx(id_projektu,nazwa,fundusz) VALUES ( 110, ‘Routing Protocol’,0); //to jest bezpieczniejsze

SQL*Plus) INSERT INTO tabx(id_projektu,nazwa,fundusz) VALUES ( &ident,’&opis_projektu’,&fundusz);
//w tym rozwiazaniu poprosie o wpisanie w postaci formularza

INSERT INTO tabx(id_projektu,nazwa,fundusz) SELECT id,nazwa,value*6 FROM taby WHERE value>23;
INSERT INTO tabx DEFAULT VALUES;

INSERT INTO tabx VALUES (1,’abc’,0),(2,’cde’,200); // jednym zamachem wstawi 2krotki (cos ostatnio w oracle sie nie
dalo)

//Modyfikacja krotek:
UPDATE tabx SET nazwa=’nowa nazwa!’ WHERE id=1;
UPDATE tabq SET etat=’DYREKTOR’,placa=placa*2 WHERE nazwisko=’ja’;

UPDATE tabx p SET (p.nazwa,p.fundusz)=(SELECT nazwy,1.5*MAX(fundusz) FROM tabq WHERE nazwy=p.nazwa) WHERE p.xyz=100;
UPDATE tabx p SET (p.value)=(SELECT SUM(cosik) FROM tabq WHERE qaz=p.qaz) WHERE EXISTS (SELECT * FROM tabv WHERE
iv=p.id;

DELETE FROM tabx WHERE nazwa=’kowalski’;
DELETE FROM tabx wHERE nazwa IN (‘abc’,'def’);
DELETE FROM tabx p WHERE p.value < SELECT cos FROM taq WHERE iq=p.id;

UPDATE (SELECT x,y FROM tabxy NATURAL JOIN tabz WHERE z=’wartosc zeta2′) SET y=y*100 WHERE x=10;

//Sekwencje
CREATE SEQUENCE nazwa_seq START WITH 100 INCREMENT BY 5;
ALTER SEQUENCE nazwa_seq START WITH 100 INCREMENT BY 5 MAXVALUE 200; //modyfikacja sekwencji
select * from user_sequences;

INSERT INTO tabx VALUES(nazwa_seq.NEXTVAL,’tekst1′,123);

DROP SEQUENCE nazwa_seq;

VIEWS

CREATE OR REPLACE VIEW nowa_persp(id,nazwa,value) AS SELECT id_x,opis,z FROM tabx WHERE id_x=20;
//Niemodyfikowalne perspektywy: Kazda krotka kazdej relacji laczonej wystepuje wielokrotnie
CREATE OR REPLACE VIEW nowa_persp(etat,srednia,maks) AS SELECT etat,AVG(x),MAX(z) FROM tabx GROUP BY etat;

CREATE OR REPLACE VIEW (id1,id2,nazwa,x,y) AS SELECT p.id,z.id2,p.opis,p.x,e.y FROM tab p JOIN tab z
ON p.id=z.id2 JOIN tabyq e ON p.x BETWEEN q_min AND q_max) WHERE p.opis IN (‘aa’,'bb’);

//Modyfikowalna
CREATE OR REPLACE VIEW prac_zesp (id, nazwisko, nazwa) AS SELECT id_zesp, nazwisko, nazwa FROM pracownicy JOIN
zespoly USING (id_zesp);

//ograniczenia add
CREATE OR REPLACE VIEW prac_minimum (id, nazwisko, placa, etat) AS SELECT id_prac, nazwisko, placa_pod, etat FROM
pracownicy WHERE placa_pod < 1000 WITH CHECK OPTION CONSTRAINT za_wysoka_placa;

SELECT ROWNUM, T.rnum, T.nazwisko, T.etat, T.pensja FROM ( SELECT ROWNUM AS rnum, nazwisko, etat, placa_pod AS pensja
FROM pracownicy ORDER BY pensja DESC ) T WHERE ROWNUM <= 3;
np.select X.rnum, X.nazwisko, X.placa_pod from (select ROWNUM as rnum, T.nazwisko, T.placa_pod from (select
nazwisko,placa_pod from pracownicy order by placa_pod desc) T)X where X.rnum>4 and X.rnum<11 ;

ALTER VIEW nazwa_perspektywy [COMPILE] [ADD | MODIFY | DROP CONSTRAINT ograniczenie];

DROP VIEW nazwa_perspektywy [CASCADE CONSTRAINTS];

//to czy jest modyfikowalna persypektywa mozna latwo zweryfikowac:
select * from user_updatable_columns

Kwiecień 17, 2008

postgresql

Filed under: konfiguracja — erendil @ 3:31 pm
Tags: , ,

Ściągnąć postgresql http://www.postgresql.org i rozpakować źródła:
tar -zxvf postgresql_wersja.tgz

Utworzyć użytkownika i grupę postgres:
pw groupadd postgres -g 89
pw useradd postgres -u 89 -g 89 -d /usr/local/pgsql -s /usr/local/bin/zsh

Konfiguracja i instalacja:
./configure --prefix=/usr/local/pgsql --enable-locale --enable-debug
gmake
gmake check
gmake install

Utworzenie katalogów roboczych i nadanie praw:
mkdir /usr/local/pgsql/data
mkdir /usr/local/pgsql/errorlog
touch /usr/local/pgsql/data/serverlog
chown postgres:postgres /usr/local/pgsql/data
chown postgres:postgres /usr/local/pgsql/errorlog
chown postgres:postgres /usr/local/pgsql/data/serverlog
chmod 700 /usr/local/pgsql/data

Tsearch uwagi:
Dopisać do .bash_profile:

export LC_ALL=pl_PL.UTF-8
export LC_COLLATE=pl_PL.UTF-8
export LC_CTYPE=pl_PL.UTF-8
export LC_MESSAGES=pl_PL.UTF-8
export LC_MONETARY=pl_PL.UTF-8
export LC_NUMERIC=pl_PL.UTF-8
export LC_TIME=pl_PL.UTF-8

Jeśli jest OK to perl -v nie wywali błędów ;)

Wygreowanie instancji bazy:
su - postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data

Dodanie libów odpalenie postgresql z ręki:

/sbin/ldconfig -elf -R /usr/local/pgsql/lib
su -l postgres -c "exec /usr/local/pgsql/bin/pg_ctl start -D /usr/local/pgsql/data -l /usr/local/pgsql/data/serverlog" &

Po wszystkim zmienić shella usera postgres na /sbin/nologin i passwd na * ;)

Theme: Rubric. Blog na WordPress.com.

Follow

Otrzymuj każdy nowy wpis na swoją skrzynkę e-mail.