Commit b9de4a26 authored by Bruce Momjian's avatar Bruce Momjian

Here's the patch to fix a lot of markup errors in the HTML FAQs. Doesn't

change content (at least not supposed to).

Magnus Hagander
parent caad817d
Frequently Asked Questions (FAQ) for PostgreSQL Frequently Asked Questions (FAQ) for PostgreSQL
Last updated: Thu Feb 24 23:18:31 EST 2005 Last updated: Fri Mar 11 16:42:06 EST 2005
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
...@@ -819,7 +819,8 @@ ...@@ -819,7 +819,8 @@
4.19) How do I return multiple rows or columns from a function? 4.19) How do I return multiple rows or columns from a function?
It is easy using set-returning functions, It is easy using set-returning functions,
http://techdocs.postgresql.org/guides/SetReturningFunctions. http://techdocs.postgresql.org/guides/SetReturningFunctions
.
4.20) Why do I get "relation with OID ##### does not exist" errors when 4.20) Why do I get "relation with OID ##### does not exist" errors when
accessing temporary tables in PL/PgSQL functions? accessing temporary tables in PL/PgSQL functions?
......
Developer's Frequently Asked Questions (FAQ) for PostgreSQL Developer's Frequently Asked Questions (FAQ) for PostgreSQL
Last updated: Fri Mar 11 08:09:23 EST 2005 Last updated: Fri Mar 11 16:43:05 EST 2005
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us) Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html. http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html.
_________________________________________________________________ _________________________________________________________________
General Questions General Questions
1.1) How do I get involved in PostgreSQL development? 1.1) How do I get involved in PostgreSQL development?
1.2) What development environment is required to develop code? 1.2) What development environment is required to develop code?
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
1.17) Where can I get technical assistance? 1.17) Where can I get technical assistance?
1.18) How do I get involved in PostgreSQL web site development? 1.18) How do I get involved in PostgreSQL web site development?
Technical Questions Technical Questions
2.1) How do I efficiently access information in tables from the 2.1) How do I efficiently access information in tables from the
backend code? backend code?
...@@ -564,7 +564,7 @@ ...@@ -564,7 +564,7 @@
contribute to that. A temporary todo list for current website contribute to that. A temporary todo list for current website
development issues is available at http://xzilla.postgresql.org/todo development issues is available at http://xzilla.postgresql.org/todo
Technical Questions Technical Questions
2.1) How do I efficiently access information in tables from the backend code? 2.1) How do I efficiently access information in tables from the backend code?
......
...@@ -603,22 +603,17 @@ ...@@ -603,22 +603,17 @@
Se o postmaster está sendo executado, inicie o psql em uma janela, e Se o postmaster está sendo executado, inicie o psql em uma janela, e
então encontre o PID do processo postgres utilizado pelo psql então encontre o PID do processo postgres utilizado pelo psql
utilizando utilizando SELECT pg_backend_pid(). Utilize um depurador para anexar
SELECT pg_backend_pid() ao PID do postgres. Você pode definir pontos de parada (breakpoints)
no depurador e digitar consultas no psql. Se você está depurando a
. Utilize um depurador para anexar ao PID do postgres. Você pode inicialização do postgres, você pode definir PGOPTIONS="-W n" e então
definir pontos de parada (breakpoints) no depurador e digitar iniciar o psql. Isto retardará a inicialização por n segundos então
consultas no psql. Se você está depurando a inicialização do postgres, você pode anexar o depurador ao processo, definir quaisquer pontos de
você pode definir PGOPTIONS="-W n" e então iniciar o psql. Isto parada e continuar pela sequência de inicialização.
retardará a inicialização por n segundos então você pode anexar o
depurador ao processo, definir quaisquer pontos de parada e continuar Há várias variáveis de configuração do servidor log_* que habilitam a
pela sequência de inicialização. exibição de estatísticas que podem ser muito úteis para depuração e
medidas de performance.
Há várias variáveis de configuração do servidor
log_*
que habilitam a exibição de estatísticas que podem ser muito úteis
para depuração e medidas de performance.
Você também pode compilar com perfil para ver que funções estão Você também pode compilar com perfil para ver que funções estão
demandando tempo de execução. Os arquivo de perfil do núcleo (backend) demandando tempo de execução. Os arquivo de perfil do núcleo (backend)
...@@ -680,13 +675,13 @@ log_* ...@@ -680,13 +675,13 @@ log_*
3.11) Que tipo de hardware eu devo usar? 3.11) Que tipo de hardware eu devo usar?
Por causa do hardware de PC ser em sua maioria compatível, pessoas Por causa do hardware de PC ser em sua maioria compatível, pessoas
tendem a acreditar que todos os hardwares de PC são de mesma tendem a acreditar que todos os hardwares de PC satilde;o de mesma
qualidade. Não é verdade. ECC RAM, SCSI e placas mãe de qualidade são qualidade. Natilde;o é verdade. ECC RAM, SCSI e placas mãe de
mais confiáveis e têm uma melhor performance do que hardwares mais qualidade são mais confiáveis e têm uma melhor performance do que
baratos. O PostgreSQL executará em quase todo hardware, mas se a hardwares mais baratos. O PostgreSQL executará em quase todo hardware,
confiabilidade e a performance forem importantes é prudente pesquisar mas se a confiabilidade e a performance forem importantes é prudente
sobre as opções de hardware. Nossas listas de discussão podem ser pesquisar sobre as opções de hardware. Nossas listas de discussão
usadas para discutir opções de hardware e dilemas. podem ser usadas para discutir opções de hardware e dilemas.
_________________________________________________________________ _________________________________________________________________
Perguntas Operacionais Perguntas Operacionais
...@@ -753,14 +748,12 @@ log_* ...@@ -753,14 +748,12 @@ log_*
dados? dados?
Estes são os limites: Estes são os limites:
Tamanho máximo de um banco de dados? ilimitado (existem bancos de dad Tamanho máximo de um banco de dados? ilimitado (existem bancos de dados de 32 TB)
os de 32 TB)
Tamanho máximo de uma tabela? 32 TB Tamanho máximo de uma tabela? 32 TB
Tamanho máximo de um registro? 1.6TB Tamanho máximo de um registro? 1.6TB
Tamanho máximo de um campo? 1 GB Tamanho máximo de um campo? 1 GB
Número máximo de registros em uma tabela? ilimitado Número máximo de registros em uma tabela? ilimitado
Número máximo de colunas em uma tabela? 250-1600 dependendo dos tipos da Número máximo de colunas em uma tabela? 250-1600 dependendo dos tipos das colunas
s colunas
Número máximo de índices em uma tabela? ilimitado Número máximo de índices em uma tabela? ilimitado
É claro, que eles não são ilimitados, mas limitados ao espaço em disco É claro, que eles não são ilimitados, mas limitados ao espaço em disco
...@@ -795,17 +788,14 @@ N ...@@ -795,17 +788,14 @@ N
O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então: O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então:
8192 bytes por página 8192 bytes por página
------------------------ = 136 registros por página do banco de dados (ar ------------------------ = 136 registros por página do banco de dados (arredondado para baixo)
redondado para baixo)
60 bytes por registro 60 bytes por registro
100000 registros de dados 100000 registros de dados
---------------------------- = 735 páginas do banco de dados (arredondado ---------------------------- = 735 páginas do banco de dados (arredondadopara cima)
para cima)
128 registros por página 128 registros por página
735 páginas do banco de dados * 8192 bytes por página = 6,021,120 bytes (6 MB 735 páginas do banco de dados * 8192 bytes por página = 6,021,120 bytes (6 MB)
)
Índices não requerem muito espaço, mas contém dados que foram Índices não requerem muito espaço, mas contém dados que foram
indexados, então eles podem ocupar algum espaço. indexados, então eles podem ocupar algum espaço.
...@@ -874,10 +864,8 @@ para cima) ...@@ -874,10 +864,8 @@ para cima)
* A localidade padrão C deve ser utilizada durante o initdb porque * A localidade padrão C deve ser utilizada durante o initdb porque
não é possível saber o próximo/maior caracter em uma localidade não é possível saber o próximo/maior caracter em uma localidade
que não seja a C. Você pode criar um índice especial que não seja a C. Você pode criar um índice especial
text_pattern_ops text_pattern_ops para tais casos que funcionam somente para
para tais casos que funcionam somente para indexação utilizando indexação utilizando LIKE.
LIKE
.
Em versões anteriores a 8.0, índices frequentemente não podiam ser Em versões anteriores a 8.0, índices frequentemente não podiam ser
usados a menos que os tipos de dados correspodessem aos tipos da usados a menos que os tipos de dados correspodessem aos tipos da
...@@ -948,14 +936,10 @@ LIKE ...@@ -948,14 +936,10 @@ LIKE
Tipo Nome Interno Notas Tipo Nome Interno Notas
-------------------------------------------------- --------------------------------------------------
VARCHAR(n) varchar tamanho especifica o comprimento máximo, sem pr VARCHAR(n) varchar tamanho especifica o comprimento máximo, sem preenchimento
eenchimento CHAR(n) bpchar preenchimento em branco para comprimento fixo específico
CHAR(n) bpchar preenchimento em branco para comprimento fixo e TEXT text nenhum limite superior específico no comprimento
specífico BYTEA bytea vetor de bytes de comprimento variável (null-byte safe)
TEXT text nenhum limite superior específico no compriment
o
BYTEA bytea vetor de bytes de comprimento variável (null-by
te safe)
"char" char um caracter "char" char um caracter
Você verá o nome interno quando examinar o catálogo do sistema e em Você verá o nome interno quando examinar o catálogo do sistema e em
...@@ -1063,8 +1047,7 @@ te safe) ...@@ -1063,8 +1047,7 @@ te safe)
de alguma coisa, ou se você quer fazer uma cópia da tabela, com os de alguma coisa, ou se você quer fazer uma cópia da tabela, com os
OIDs, não há razão para que você não possa fazê-la: OIDs, não há razão para que você não possa fazê-la:
CREATE TABLE nova_tabela(minha_coluna int); CREATE TABLE nova_tabela(minha_coluna int);
SELECT oid as oid_antigo, minha_coluna INTO tabela_tmp FROM tabela_anti SELECT oid as oid_antigo, minha_coluna INTO tabela_tmp FROM tabela_antiga;
ga;
COPY tabela_tmp TO '/tmp/pgtable'; COPY tabela_tmp TO '/tmp/pgtable';
DROP TABLE tabela_tmp; DROP TABLE tabela_tmp;
COPY nova_tabela WITH OIDS FROM '/tmp/pgtable'; COPY nova_tabela WITH OIDS FROM '/tmp/pgtable';
......
asto kladen dotazy (FAQ) PostgreSQL
=====================================
Obecn otzky
=============
1.1 Co je PostgreSQL? Jak se vyslovuje?
1.2 Jak je licence na PostgreSQL?
1.3 Na kterch Unixex lze spustit PostgreSQL?
1.4 Kter ne-unixov platformy jsou podporovan?
1.5 Kde mohu zskat PostgreSQL?
1.6 Kde mohu zskat podporu?
1.7 Kde je posledn verze?
1.8 Jak je dostupn dokumentace?
1.9 Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
1.10 Jak se mohu nauit SQL?
1.11 Nem PostgreSQL problmy s rokem 2000?
1.12 Jak se pipojit k vvojskmu tmu?
1.13 Kam podat report o chyb?
1.14 Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
1.15 Jak lze finann pomoci PostgreSQL?
User client dotazy
==================
2.1 Kde naleznu ODBC ovladae pro PostgreSQL?
2.2 Jak nstroje lze pout pro PostgreSQL a web?
2.3 Existuje grafick rozhran pro PostgreSQL?
2.4 Kter programovac jazyky maj podporu pro PostgreSQL?
Administrativn dotazy
======================
3.1 Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
3.2 Pi startu postmaster, dostanu chybov hlen Bad System Call nebo
core dump. Pro? 3.3 Pi startu postmastera dostanu hlen o chyb
IpcMemoryCreate. Pro? 3.4 Pi startu postmastera dostanu hlen o
chyb IpcSemaphoreCreate. Pro? 3.5 Jak povolit nebo zakzat pstup z
jinch stanic? 3.6 Jak ladit databzov stroj na lep vkon?
3.7 Jak jsou monosti ladn?
3.8 Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
3.9 K emu slou adres pgsql_tmp?
3.10 Pro je poadovno dump a obnoven (load) databze bhem upgrade
mezi velkmi verzemi PostgreSQL?
Provozn dotazy
===============
4.1 m se li binrn a normln kurzor?
4.2 Jak zskat pouze prvn dek dotazu? Nhodn dek?
4.3 Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
4.4 Jak odstranm sloupec tabulky, jak zmnm jeho typ?
4.5 Jak je maximln velikost dku, tabulky a databze?
4.6 Kolik diskovho prostoru je poteba k uloen dat z normlnho
textovho souboru? 4.7 Jak zskm seznam vytvoench tabulek, index,
databz? 4.8 Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
4.9 Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?
4.10 Co to je R-tree index?
4.11 Co je Genetic Query Optimizer?
4.12 Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn? 4.13 Jak
v dotazu detekovat, e poloka je NULL? 4.14 Jak jsou rozdly mezi
rznmi znakovmi typy? 4.15.1 Jak vytvoit serial/auto-increment pole?
4.15.2 Jak zskat hodnotu SERIAL po vloen dku?
4.15.3 Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s
jinmi uivateli? 4.15.4 Pro nen vygenerovan slo pouito pi
peruen transakce? Pro vznikaj dry v slovn vlastn
sekvenc/SERIAL sloupce? 4.16 Co to je OID? Co je to TID?
4.17 Jak je vznam nkterch vraz pouitch v PostgreSQL?
4.18 Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
AllocSetAlloc()"? 4.19 Jak se dozvm, kterou verzi PostgreSQL pouvm?
4.20 Pro operace s velkmi objekty kon "invalid large obj
descriptor"? 4.21 Jak vytvoit sloupec obsahujc implicitn aktuln
datum? 4.22 Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
4.23 Jak provst vnj spojen (outer join)?
4.24 Jak provst dotaz nap nkolika databzemi?
4.25 Me funkce vrtit vce dk nebo sloupc?
4.26 Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL
funkcch? 4.27 Jak jsou monosti replikace databz?
4.28 Jak jsou monosti ifrovn databz?
Roziovn PostgreSQL
======================
5.1 Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
5.2 Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do
PostgreSQL? 5.3 Jak napsat funkci v C vracejc ntici?
5.4 Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci
vzata v potaz. Pro?
------------------------------------------------------------------------
Obecn otzky
=============
1.1 Co je PostgreSQL? Jak se vyslovuje?
---------------------------------------
PostgreSQL se vyslovuje Post-Gres-Q-L.
PostgreSQL vychz z databze POSTGRES - vzkumnho prototypu DBMS nov
generace. Z postgresu byl pevzat siln datov model a bohat soubor
datovch typ a jeho dotazovac jazyk PostQuel byl nahrazen rozenou
podmnoinou jazyka SQL. PostgreSQL lze pouvat bez omezen a jeho
zdrojov kdy jsou voln k dispozici.
PostgreSQL vyvj tm vvoj pihlench do vvojsk konference
PostgreSQL. Souasnm koordintorem je Marc G. Fournier. (Odpov 1.6. -
jak se zapojit). Tento tm je zodpovdn za veker vvoj PostgreSQL.
Autory prvn verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do
portace, testovn, ladn a roziovn kdu se zapojilo mnoho dalch
vvoj . Pvodni kd Postgresu, ze kterho PostgreSQL vychz, je
vsledkem sil mnoha student a programtor pracujcch pod vedenm
prof. Michaela Stonebrakera na University of California v Berkley.
Pvodn nzev software z Berkley byl Postgres. Po pidn jazyka SQL se
nzev zmnil na Postgres95. Koncem roku 1996 byl RDBMS pejmenovn na
PostgreSQL.
1.2 Jak je licence na PostgreSQL?
----------------------------------
PostgreSQL je pedmtem nsledujcch autorskch prv:
Dl copyright (c) 1996-2002, PostgreSQL Global Development Group
Dl copyright (c) 1994-6, Regents of the University of California
Udluje se oprvnn k uit, rozmnoovn, provdn prav a
roziovn tohoto softwaru a dokumentace k nmu, pro jakkoli ely,
bez licennho poplatku a bez psemn licenn smlouvy, za podmnky, e
na vech jeho kopich je uvedeno oznmen o ve uvedench prvech,
jako i obsah tohoto a dvou nsledujcch odstavc.
THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V DNM
PPAD ODPOVDNA DN TET OSOB ZA PMOU, NEPMOU, ZVLTN,
NAHODILOU NEBO VSLEDNOU KODU, VETN ULHO ZISKU, ZPSOBENOU UITM
TOHOTO SOFTWARU A DOKUMENTACE K NMU, A TO I V PPAD, E THE
UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MONOSTI VZNIKU TAKOV
KODY.
THE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO
NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE SPECIFICKM
ELM. NͮE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A LE" A THE
UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO DRBU, PODPORU,
AKTUALIZACI, VYLEPEN NEBO MODIFIKACI.
Ve uveden je BSD licence, bn licence otevenho zdroje. Nen zde asto kladen dotazy (FAQ) PostgreSQL
dn omezen ohledn uit kdu zdroje. Jsme s tm spokojeni a nemme v
myslu na tto skutenosti cokoli mnit. Posledn aktualizace: Steda 23. ervna 21:10:00 EST 2004
Souasn sprvce: Bruce Momjian (pgman@candle.pha.pa.us)
Peloil: Pavel Sthule (stehule@kix.fsv.cvut.cz)
Aktuln verzi tohoto dokumentu naleznete na adrese:
http://www.PostgreSQL.org/docs/faqs/FAQ.html. esk peklad na adrese:
http://www.PostgreSQL.org/docs/faqs/FAQ_czech.html.
Odpovdi na dotazy relevantn ke konkrtnm platformm lze nalzt na
adrese: http://www.PostgreSQL.org/docs/index.html.
_________________________________________________________________
Obecn otzky
1.1) Co je PostgreSQL? Jak se vyslovuje?
1.2) Jak je licence na PostgreSQL?
1.3) Na kterch Unixex lze spustit PostgreSQL?
1.4) Kter ne-unixov platformy jsou podporovan?
1.5) Kde mohu zskat PostgreSQL?
1.6) Kde mohu zskat podporu?
1.7) Kde je posledn verze?
1.8) Jak je dostupn dokumentace?
1.9) Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
1.10) Jak se mohu nauit SQL?
1.11) Nem PostgreSQL problmy s rokem 2000?
1.12) Jak se pipojit k vvojskmu tmu?
1.13) Kam podat report o chyb?
1.14) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
1.15) Jak lze finann pomoci PostgreSQL?
User client dotazy
2.1) Kde naleznu ODBC ovladae pro PostgreSQL?
2.2) Jak nstroje lze pout pro PostgreSQL a web?
2.3) Existuje grafick rozhran pro PostgreSQL?
2.4) Kter programovac jazyky maj podporu pro PostgreSQL?
Administrativn dotazy
3.1) Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
3.2) Pi startu postmaster, dostanu chybov hlen Bad System Call
nebo core dump. Pro?
3.3) Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate.
Pro?
3.4) Pi startu postmastera dostanu hlen o chyb
IpcSemaphoreCreate. Pro?
3.5) Jak povolit nebo zakzat pstup z jinch stanic?
3.6) Jak ladit databzov stroj na lep vkon?
3.7) Jak jsou monosti ladn?
3.8) Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
3.9) K emu slou adres pgsql_tmp?
3.10) Pro je poadovno dump a obnoven (load) databze bhem upgrade
mezi velkmi verzemi PostgreSQL?
Provozn dotazy
4.1) m se li binrn a normln kurzor?
4.2) Jak zskat pouze prvn dek dotazu? Nhodn dek?
4.3) Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
4.4) Jak odstranm sloupec tabulky, jak zmnm jeho typ?
4.5) Jak je maximln velikost dku, tabulky a databze?
4.6) Kolik diskovho prostoru je poteba k uloen dat z normlnho
textovho souboru?
4.7) Jak zskm seznam vytvoench tabulek, index, databz?
4.8) Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
4.9) Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?
4.10) Co to je R-tree index?
4.11) Co je Genetic Query Optimizer?
4.12) Jak provst vyhledvn regulrnho vrazu case sensitiv,
insensitiv? Jak pout index pro case insensitive vyhledvn?
4.13) Jak v dotazu detekovat, e poloka je NULL?
4.14) Jak jsou rozdly mezi rznmi znakovmi typy?
4.15.1) Jak vytvoit serial/auto-increment pole?
4.15.2) Jak zskat hodnotu SERIAL po vloen dku?
4.15.3) Nepovede currval() a nextval() k rozhozen podmnek pi
soubhu s jinmi uivateli?
4.15.4) Pro nen vygenerovan slo pouito pi peruen transakce?
Pro vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce?
4.16) Co to je OID? Co je to TID?
4.17) Jak je vznam nkterch vraz pouitch v PostgreSQL?
4.18) Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
AllocSetAlloc()"?
4.19) Jak se dozvm, kterou verzi PostgreSQL pouvm?
4.20) Pro operace s velkmi objekty kon "invalid large obj
descriptor"?
4.21) Jak vytvoit sloupec obsahujc implicitn aktuln datum?
4.22) Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
4.23) Jak provst vnj spojen (outer join)?
4.24) Jak provst dotaz nap nkolika databzemi?
4.25) Me funkce vrtit vce dk nebo sloupc?
4.26) Pro nelze spolehliv vytvet a ruit doasn tabulky v
PL/pgSQL funkcch?
4.27) Jak jsou monosti replikace databz?
4.28) Jak jsou monosti ifrovn databz?
Roziovn PostgreSQL
5.1) Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
5.2) Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do
PostgreSQL?
5.3) Jak napsat funkci v C vracejc ntici?
5.4) Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi
rekompilaci vzata v potaz. Pro?
_________________________________________________________________
Obecn otzky
1.1) Co je PostgreSQL? Jak se vyslovuje?
PostgreSQL se vyslovuje Post-Gres-Q-L. Zvukov zznam je dostupn na
adrese .
PostgreSQL vychz z databze POSTGRES (a stle je nkdy oznaovn
zjednoduen jako Postgres) - vzkumnho prototypu DBMS nov generace.
Z postgresu byl pevzat siln datov model a bohat soubor datovch
typ a jeho dotazovac jazyk PostQuel byl nahrazen rozenou
podmnoinou jazyka SQL. PostgreSQL lze pouvat bez omezen a jeho
zdrojov kdy jsou voln k dispozici.
PostgreSQL vyvj tm vvoj pihlench do vvojsk konference
PostgreSQL. Souasnm koordintorem je Marc G. Fournier
(scrappy@PostgreSQL.org). (viz 1.6 - jak se zapojit). Tento tm je
zodpovdn za veker vvoj PostgreSQL. Jedn se o veejn projekt,
kter nen zen dnou firmou. Pokud se chcete zapojit, pette si
developer's FAQ na adrese
http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html
Autory prvn verze PostgreSQL 1.01 byli Andrew Yu and Jolly Chen. Do
portace, testovn, ladn a roziovn kdu se zapojilo mnoho
dalch vvoj . Pvodni kd Postgresu, ze kterho PostgreSQL
vychz, je vsledkem sil mnoha student a programtor pracujcch
pod vedenm prof. Michaela Stonebrakera na University of California v
Berkley.
Pvodn nzev software z Berkley byl Postgres. Po pidn jazyka SQL
se nzev zmnil na Postgres95. Koncem roku 1996 byl RDBMS pejmenovn
na PostgreSQL.
1.2) Jak je licence na PostgreSQL?
PostgreSQL je pedmtem nsledujcch autorskch prv:
Dl Copyright (c) 1996-2005, PostgreSQL Global Development Group
Dl Copyright (c) 1994-6, Regents of the University of California
Udluje se oprvnn k uit, rozmnoovn, provdn prav a
roziovn tohoto softwaru a dokumentace k nmu, pro jakkoli ely,
bez licennho poplatku a bez psemn licenn smlouvy, za podmnky,
e na vech jeho kopich je uvedeno oznmen o ve uvedench prvech,
jako i obsah tohoto a dvou nsledujcch odstavc.
THE UNIVERSITY OF CALIFORNIA ("KALIFORNSK UNIVERZITA") NEN V DNM
PPAD ODPOVDNA DN TET OSOB ZA PMOU, NEPMOU, ZVLTN,
NAHODILOU NEBO VSLEDNOU KODU, VETN ULHO ZISKU, ZPSOBENOU UITM
TOHOTO SOFTWARU A DOKUMENTACE K NMU, A TO I V PPAD, E THE
UNIVERSITY OF CALIFORNIA BYLA INFORMOVNA O MONOSTI VZNIKU TAKOV
KODY.
HE UNIVERSITY OF CALIFORNIA ZEJMNA NEPOSKYTUJE JAKKOLI ZRUKY, A TO
NEJEN ZRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VROBKU KE
SPECIFICKM ELM. NͮE UVEDEN SOFTWARE JE POSKYTNUT "JAK STOJ A
LE" A THE UNIVERSITY OF CALIFORNIA NEN POVINNA ZAJISTIT JEHO
DRBU, PODPORU, AKTUALIZACI, VYLEPEN NEBO MODIFIKACI.
Ve uveden je BSD licence, bn licence otevenho zdroje. Nen zde
dn omezen ohledn uit kdu zdroje. Jsme s tm spokojeni a nemme
v myslu na tto skutenosti cokoli mnit.
1.3) Na kterch Unixex lze spustit PostgreSQL?
PostgreSQL b na vech modernch unixovch platformch. V
instalanch instrukcch naleznete aktuln seznam vech platforem na
kterch byla testovnm ovena funkcionalita PostgreSQL.
1.4) Kter ne-unixov platformy jsou podporovan?
Klient
1.3 Na kterch Unixex lze spustit PostgreSQL? Knihovna libpq, psql a nkter dal moduly byly peloeny pro MS
--------------------------------------------- Windows. Klienta lze provozovat na MS Windows, ten prostednictvm
TCP/IP protokolu komunikuje se serverem bcm na nkter z
podporovanch Unixovch platforem. K pekladu lze pout win32.mak a
Win32 knihovny libpq a psql. K databzi PostgerSQL lze pistupovat
skrze rozhran ODBC.
PostgreSQL b na vech modernch unixovch platformch. V instalanch Server
instrukcch naleznete aktuln seznam vech platforem na kterch byla
testovnm ovena funkcionalita PostgreSQL.
1.4 Kter ne-unixov platformy jsou podporovan? Server me bt na WindowsNT a Win2k provozovn pouze s knihovnou
------------------------------------------------ Cygwin, Cygnus Unix/NT porting library. Vce pgsql/doc/FAQ_MSWIN v
distribuci nebo MS Windows FAQ na adrese
http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN.
Klient Na nativnm portu pro MS Win NT/2000/XP se pracuje. Dal informace o
------ aktulnm stavu PostgreSQL pro Windows naleznet na adrese
http://techdocs.postgresql.org/guides/Windows a
http://momjian.postgresql.org/main/writings/pgsql/win32.html.
Knihovna libpq, psql a nkter dal moduly byly peloeny pro MS Existujc port pro Novell Netware 6 naleznete na
Windows. Klienta lze provozovat na MS Windows, ten prostednictvm http://forge.novell.com.
TCP/IP protokolu komunikuje se serverem bcm na nkter z
podporovanch Unixovch platforem. K pekladu lze pout win32.mak a
Win32 knihovny libpq a psql. K databzi PostgerSQL lze pistupovat skrze
rozhran ODBC.
Server 1.5) Kde mohu zskat PostgreSQL?
------
Server me bt na WindowsNT a Win2k provozovn pouze s knihovnou Primrnm anonymnm ftp serverem pro PostgreSQL je
Cygwin, Cygnus Unix/NT porting library. Na nativnm portu pro MS Win ftp://ftp.PostgreSQL.org/pub. Seznam zrcadel naleznete na naich
NT/2000/XP se pracuje. Existujc port pro Novell Netware 6 naleznete na webovch strnkch.
http://forge.novell.com.
1.5 Kde mohu zskat PostgreSQL? 1.6) Kde mohu zskat podporu?
-------------------------------
Primrnm anonymnm ftp serverem pro PostgreSQL je Hlavn mailov konference je: pgsql-general@PostgreSQL.org. Slou k
ftp://ftp.PostgreSQL.org/pub . Seznam zrcadel naleznete na naich diskuzm ohledn PostgreSQL. Pihlste se zaslnm mailu obsahujc
webovch strnkch. nsledujc dky v tle dopisu (nikoliv v zhlav - subjectu):
subscribe
end
1.6 Kde mohu zskat podporu? na adresu pgsql-general-request@PostgreSQL.org.
----------------------------
Hlavnm mailov konference je pgsql-general@PostgreSQL.org. Slou k Mete si vydat denn pehled (diggest), kter m zhruba 30K denn
diskuzm ohledn PostgreSQL. Pihlste se zaslnm mailu obsahujc zprv.
nsledujc dky v tle dopisu (nikoliv v zhlav - subjectu)
subscribe Konference psql-bugs je urena k zasln zprv o chybch. Pro
end pihlen polete mail se stejnm obsahem jako v pedchozm ppad
na adresu pgsql-bugs-request@PostgreSQL.org.
na adresu mailto:pgsql-general-request@PostgreSQL.org. Do vvojsk konference se pihlste odeslnm dopisu s ji
zmiovanm obsahem na mailto:pgsql-hackers-request@PostgreSQL.org.
Mete si vydat denn pehled (diggest), kter m zhruba 30K denn Seznam dalch konferenc naleznete na strnkch PostgreSQL:
zprv.
Konference psql-bugs je urena k zasln zprv o chybch. Pro http://www.postgresql.org
pihlen polete mail se stejnm obsahem jako v pedchozm ppad na
adresu mailto:pgsql-bugs-request@PostgreSQL.org.
Do vvojsk konference se pihlste odeslnm dopisu s ji zmiovanm 1.7) Jak je posledn verze?
obsahem na mailto:pgsql-hackers-request@PostgreSQL.org.
Seznam dalch konferenc naleznete na strnkch PostgreSQL Posledn verze PostgreSQL je 7.4.3. Plnujeme uvolnit vznamnou verzi
http://www.postgresql.org kadch est a osm msc.
1.7 Kde je posledn verze? 1.8) Jak je dostupn dokumentace?
--------------------------
Posledn verz je PostgreSQL 7.4.. Plnujeme uvolnit velkou verzi Rzn manuly, manulov strnky a nkolik malch testovacch pklad
kadch est a osm msc. jsou sousti distribuce. Podvejte se do adrese /doc. Manuly jsou
pstupn online na http://www.PostgreSQL.org/docs.
1.8 Jak je dostupn dokumentace? Na adresch http://www.PostgreSQL.org/docs/awbook.html a
--------------------------------- http://www.commandprompt.com/ppbook/ naleznezte dv online knihy o
PostgreSQL. Seznam dostupn literatury je na
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor
technickch lnk s tematikou PostgresQL najdete na
http://techdocs.PostgreSQL.org/.
psql m uiten metapkaz \d slouc k zobrazen informac o
typech, opertorech, funkc, agreganch funkc atd.
Rzn manuly, manulov strnky a nkolik malch testovacch pklad Vce dokumentace naleznete na naich webovch strnkch.
jsou sousti distribuce. Podvejte se do adrese /doc. Manuly jsou
pstupn online na http://www.PostgreSQL.org/docs. 1.9) Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost?
Na adresch http://www.PostgreSQL.org/docs/awbook.html a PostgreSQL podporuje rozenou podmnoinu SQL-92. V naem TODO
http://www.commandprompt.com/ppbook/ naleznezte dv online knihy o najdete seznam znmch chyb, chybjcch vlastnost a seznam
PostgreSQL. Seznam dostupn literatury je na vlastnost, kter budou do systmu implementovny v budoucnu (vetn
http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Soubor priorit).
technickch lnk s tematikou PostgresQL najdete na
http://techdocs.PostgreSQL.org/.
psql m uiten metapkaz \d slouc k zobrazen informac o typech, 1.10) Jak se mohu nauit SQL?
opertorech, funkc, agreganch funkc atd.
Vce dokumentace naleznete na naich webovch strnkch. V knize The PostgreSQL book na
http://www.PostgreSQL.org/docs/awbook.html je vysvtlen jazyk SQL
(vyla esky). Dal dostupnou knihou je
http://www.commandprompt.com/ppbook. Kvalitn nvody naleznete na
http://www.intermedia.net/support/sql/sqltut.shtm, a na
http://sqlcourse.com.
1.9 Kde najdu seznam znmch chyb nebo nepodporovanch vlastnost? Dal je Teach Yourself SQL in 21 days, Second Edition na
------------------------------------------------------------------ http://members.tripod.com/er4ebus/sql/index.htm.
PostgreSQL podporuje rozenou podmnoinu SQL-92. V naem TODO [1] Mnoho uivatel doporuuje The Practical SQL Handbook, Bowman, Judith
najdete seznam znmch chyb, chybjcch vlastnost a seznam vlastnost, S., et al., Addison-Wesley. Jin preferuj The Complete Reference SQL,
kter budou do systmu implementovny v budoucnu (vetn priorit). Groff et al., McGraw-Hill.
1.10 Jak se mohu nauit SQL? 1.11) Nem PostgreSQL problmy s rokem 2000?
----------------------------
Nem, meme pracovat s datumy po roce 2000 naeho letopotu i ped
rokem 2000 p.n.l.
V knize The PostgreSQL book na 1.12) Jak se pipojit k vvojskmu tmu?
http://www.PostgreSQL.org/docs/awbook.html je vysvtlen jazyk SQL (vyla
esky). Dal dostupnou knihou je http://www.commandprompt.com/ppbook.
Kvalitn nvody naleznete na
http://www.intermedia.net/support/sql/sqltut.shtm, na
http://www.intermedia.net/support/sql/sqltut.shtm [2] , a na
http://sqlcourse.com.
Dal je Teach Yourself SQL in 21 days, Second Edition na Nejdve si sthnte nejnovj zdroje a pette si vvojskou
http://members.tripod.com/er4ebus/sql/index.htm. dokumentaci na naem webu nebo v distribuci. Pak se pihlate do
konferenc pgsql-hackers a pgsql-patches. Kvalitn zplaty poslejte
do pgsql-patches.
Mnoho uivatel doporuuje The Practical SQL Handbook, Bowman, Judith Prvo commit m v CVS archivu asi tincti lid. Kad z nich poslal
S., et al., Addison-Wesley. Jin preferuj The Complete Reference SQL, mnoho kvalitnch zplat, take tehdej commiters mli jistotu, e
Groff et al., McGraw-Hill. budou pedkldat jenom kvalitn zplaty a mohli jim pedlit vt
prva.
1.11 Nem PostgreSQL problmy s rokem 2000? 1.13) Kam podat report o chyb?
-------------------------------------------
Nem, meme pracovat s datumy po roce 2000 naeho letopotu i ped Navtivte nai PostgreSQL BugTool strnku na
rokem 2000 p.n.l. http://www.PostgreSQL.org/bugs/bugs.php, kter obsahuje nvod a
smrnice jak podat chybov report.
1.12 Jak se pipojit k vvojskmu tmu? Ovte si na naem ftp serveru ftp://ftp.PostgreSQL.org/pub, zda-li
----------------------------------------- mte nejnovj verzi PostgreSQL a zda-li k n neexistuj njak
zplaty.
Nejdve si sthnte nejnovj zdroje a pette si vvojskou 1.14) Jak je na tom PostgreSQL v porovnn s jinmi databzemi?
dokumentaci na naem webu nebo v distribuci. Pak se pihlate do
konferenc pgsql-hackers a pgsql-patches. Kvalitn zplaty poslejte do
pgsql-patches.
Prvo commit m v cvs archivu asi tincti lid. Kad z nich poslal Existuje nkolik hledisek jak porovnvat software: vlastnosti, vkon,
mnoho kvalitnch zplat, take tehdej commiters mli jistotu, e budou spolehlivost, podpora a cena.
pedkldat jenom kvalitn zplaty a mohli jim pedlit vt prva.
1.13 Kam podat report o chyb? Vlastnosti
------------------------------ PostgreSQL m hodn spolench vlastnost s velkmi komernmi
DBMS, nap. transakce, vnoen dotazy, spout, pohledy,
kontrolu referenn integrity a sofistikovan zamykn.
Podporuje nkter vlastnosti, kter tyto systmy nemaj,
uivatelem definovan typy, ddinost, pravidla, MVCC
redukujc zamykn.
Navtivte nai PostgreSQL BugTool strnku na Vkon
http://www.PostgreSQL.org/bugs/bugs.php, kter obsahuje nvod a smrnice Vkonnostn je na tom PostgreSQL podobn jako dal komern
jak podat chybov report. ale i open source databze, v nem je rychlej, jindy
pomalej. V porovnn s MySQL a podobnmi databzovmi systmy
je PostgreSQL rychlej pi vceuivatelskm pstupu,
sloitjch dotazech a zaten read/write dotazy. MySQL je
rychlej v jednoduch dotazech s malm potem uivatel.
Navc, MySQL nepodporuje mnoh vlatnosti zmnn v sekci
vlastnosti. Zapracovali jsme na spolehlivosti a podporovanch
vlastnostech, a vkon zvyujeme v kad verzi. Zajmavou
strnku porovnvajc PostgreSQL a MySQL naleznete na
http://openacs.org/philosophy/why-not-mysql.html. Za vvojem
MySQL nen Open Source komunita, ale komern spolenost,
pestoe svoje produkty distribuuje jako Open Source.
Ovte si na naem ftp serveru ftp://ftp.PostgreSQL.org/pub, zda-li mte Spolehlivost
nejnovj verzi PostgreSQL a zda-li k n neexistuj njak zplaty. Jsme si vdomi, e databze mus bt spolehliv, jinak je
nepouiteln. Sname se zveejovat dobe otestovan, stabiln
kd s minimem chyb. Kad verze je vce ne msc v beta
testovn, a nae historie verz ukazuje, e meme nabdnout
stabiln, solidn verze, kter jsou pipraveny pro reln
nasazen. V tto oblasti jsme srovnateln s dalmi databzemi.
1.14 Jak je na tom PostgreSQL v porovnn s jinmi databzemi? Podpora
-------------------------------------------------------------- Na na mailov konferenci mete kontaktovat velkou skupinu
vvoj a uivatel.problm. Nememe garantovat opravu,
nicmn komern databze tak ne vdy nabdnou opravu. Podle
ohlas je nae podpora hodnocena lpe ne u jinch DBMS a to
dky pmmu kontaktu s vvoji, velkou komunitou uivatel,
kvalitnmi manuly a pstupnm zdrojovm kdem. Pro uivatele,
kte vyaduj podporu ke konkrtnm ppadm, existuje placen
podpora (FAQ sekce 1.6).
Existuje nkolik hledisek jak porovnvat software: vlastnosti, vkon, Cena
spolehlivost, podpora a cena. PosgreSQL lze voln pouvat pro nekomern i komern pouit.
Mete do svch produkt pidat n kd bez omezen, respektive
v souladu s podmnkami na licenn smlouvy (v duchu BSD
licence).
Vlastnosti 1.15) Jak lze finann pomoci PostgreSQL?
----------
PostgreSQL m hodn spolench vlastnost s velkmi komernmi DBMS, PosgreSQL m prvotdn infrastrukturu od naeho zatku v roce 1996.
nap. transakce, vnoen dotazy, spout, pohledy, kontrolu referenn Vdme za to Marku Fournierovi, kter zaloil a spravoval tuto
integrity a sofistikovan zamykn. Podporuje nkter vlastnosti, kter infrastrukturu nkolik let.
tyto systmy nemaj, uivatelem definovan typy, ddinost, pravidla,
MVCC redukujc zamykn.
Vkon Kvalitn infrastruktura je velice dleit pro kad open source
----- projekt. Pedchz nedorozumnm, kter velice zdruj pokrok v
projektu.
Tato infrastruktura nen lacin. K jejmu zajitn je teba stle
hradit urit msn a jednorzov stky. Pokud mte Vy nebo Vae
spolenost penze, kter nm mete darovat, obrae se na
http://store.pgsql.com/shopping/ a darujte je.
Vkonnostn je na tom PostgreSQL podobn jako dal komern ale i open Akoliv webov strnka zmiuje PostgreSQL, Inc. vklady jsou ureny
source databze, v nem je rychlej, jindy pomalej. V porovnn s pouze k podpoe projektu PostgreSQL a nepodporuj dnou existujc
MySQL a podobnmi databzovmi systmy je PostgreSQL rychlej pi spolenost. Pokud to vyadujete, mete poslat kontrolu na nai
vceuivatelskm pstupu, sloitjch dotazech a zaten read/write kontaktn adresu.
dotazy. MySQL je rychlej v jednoduch dotazech s malm potem _________________________________________________________________
uivatel. Navc, MySQL nepodporuje mnoh vlatnosti zmnn v sekci
vlastnosti. Zapracovali jsme na spolehlivosti a podporovanch
vlastnostech, a vkon zvyujeme v kad verzi. Zajmavou strnku
porovnvajc PostgreSQL a MySQL naleznete na
http://openacs.org/philosophy/why-not-mysql.html. Za vvojem MySQL nen
Open Source komunita, ale komern spolenost, pestoe svoje produkty
distribuuje jako Open Source.
Spolehlivost Pokud mte pklad spnho nasazen PostgreSQL, pihlat se na n
------------ advocacy site na http://advocacy.postgresql.org.
User client dotazy
2.1) Kde naleznu ODBC ovladae pro PostgreSQL?
Pro PostgreSQL existuj dva ODBC ovladae - PsqlODBC a OpenLink ODBC.
PsqlODBC je ke staen na
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
Jsme si vdomi, e databze mus bt spolehliv, jinak je nepouiteln. OpenLink mete zskat na http://www.openlinksw.com. Spolupracuje s
Sname se zveejovat dobe otestovan, stabiln kd s minimem chyb. jejich klientskm programovm vybavenm a je dostupn pro vechny jimi
Kad verze je vce ne msc v beta testovn, a nae historie verz podporovan platformy (Win, Mac, Unix, VMS).
ukazuje, e meme nabdnout stabiln, solidn verze, kter jsou
pipraveny pro reln nasazen. V tto oblasti jsme srovnateln s Tento ovlada je uren pro ty, kte vyaduj podporu komern
dalmi databzemi. kvality, nicmn freeware verze je dostupn a funkn. Dotazy
zaslejte na postgres95@openlink.co.uk.
2.2) Jak nstroje lze pout pro PostgreSQL a web?
Pkn vod do databzovch technologi zabezpeujcch chod webovch
strnek najdete na http://www.webreview.com.
Pro tvorbu webu existuje excelentn rozhran PHP, kter naleznete na
http://www.php.net.
Pro sloitj ppady se asto pouv Perl a CGI.pm nebo mod_perl.
2.3) Existuje grafick rozhran pro PostgreSQL?
Pro PostgreSQL existuje nkolik grafickch rozhran: PgAccess
(http://www.php.net), PgAdmin III (http://www.php.net), RHDB Admin
(http://sources.redhat.com/rhdb/) a Rekall (
http://www.thekompany.com/products/rekall/). Dle jet PhpPgAdmin
(http://phppgadmin.sourceforge.net/) co je rozhran PostgreSQL
zaloen na web technologii.
Podpora plnj seznam najdete na
------- http://techdocs.postgresql.org/guides/GUITools.
Na na mailov konferenci mete kontaktovat velkou skupinu vvoj a 2.4) Kter programovac jazyky maj podporu pro PostgreSQL?
uivatel.problm. Nememe garantovat opravu, nicmn komern
databze tak ne vdy nabdnou opravu. Podle ohlas je nae podpora
hodnocena lpe ne u jinch DBMS a to dky pmmu kontaktu s vvoji,
velkou komunitou uivatel, kvalitnmi manuly a pstupnm zdrojovm
kdem. Pro uivatele, kte vyaduj podporu ke konkrtnm ppadm,
existuje placen podpora (FAQ sekce 1.6).
Cena Vtina programovacch jazyk obsahuje rozhran pro PostgreSQL.
---- Podvejte se do roziujcch modul Vaeho programovacho jazyka.
PosgreSQL lze voln pouvat pro nekomern i komern pouit. Mete Distribuce PostgreSQL obsahuje tato rozhran:
do svch produkt pidat n kd bez omezen, respektive v souladu s * C (libpq)
podmnkami na licenn smlouvy (v duchu BSD licence). * Embbedded C (ecpg)
* Java (jdbc)
* Python (PyGreSQL)
* TCL (libpgtcl)
1.15 Jak lze finann pomoci PostgreSQL? Dal rozhran jsou dostupn na http://gborg.postgresql.org v sekci
---------------------------------------- Drivers/Interfaces.
_________________________________________________________________
PosgreSQL m prvotdn infrastrukturu od naeho zatku v roce 1996. Administrativn dotazy
Vdme za to Marku Fournierovi, kter zaloil a spravoval tuto
infrastrukturu nkolik let.
Kvalitn infrastruktura je velice dleit pro kad open source 3.1) Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
projekt. Pedchz nedorozumnm, kter velice zdruj pokrok v
projektu.
Tato infrastruktura nen lacin. K jejmu zajitn je teba stle Pouijte volbu --prefix pi sputn configure.
hradit urit msn a jednorzov stky. Pokud mte Vy nebo Vae
spolenost penze, kter nm mete darovat, obrae se na
http://store.pgsql.com/shopping/ a darujte je.
Akoliv webov strnka zmiuje PostgreSQL, Inc. vklady jsou ureny pouze 3.2) Pi startu postmaster, dostanu chybov hlen Bad System Call nebo
k podpoe projektu PostgreSQL a nepodporuj dnou existujc core dump. Pro?
spolenost. Pokud to vyadujete, mete poslat kontrolu na nai
kontaktn adresu.
Pokud mte pklad spnho nasazen PostgreSQL, pihlat se na n Dvody mohou bt rzn, ale nejprve zkontrolujte, zda V systm
advocacy site na http://advocacy.postgresql.org. podporuje System V extensions. PostgreSQL vyaduje v jde podporu
sdlen pamti a semafor.
------------------------------------------------------------------------ 3.3) Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate. Pro?
User client dotazy Buto nemte sprvn nakonfigurovanou sdlenou pam v jde nebo
================== musite zvtit jej velikost. Potebn velikost je zvisl na
architektue a na tom, kolik pamovch buffer a backend mte
povoleno pro postmastera. Pro vtinu systm s peddefinovanm potem
backend a pamovch buffer je minimum zhruba 1MB. V PostgreSQL
Administrator's Guide naleznete podrobnj informace o sdlen pamti
a semaforech.
2.1 Kde naleznu ODBC ovladae pro PostgreSQL? 3.4) Pi startu postmastera dostanu hlen o chyb IpcSemaphoreCreate.
--------------------------------------------- Pro?
Pro PostgreSQL existuj dva ODBC ovladae - PsqlODBC a OpenLink ODBC. Pokud dostane chybovou zprvu IpcSemaphoreCreate: semget failed (No
space left on device), pak vae jdro nem dost volnch semafor.
PostgreSQL vyaduje jeden semafor pro kad backend v pozad. Doasnm
eenm je start postmaster s limitem backend. Pouijte pepna -N s
hodnotou men ne 32. plnm eenm je zven hodnot SEMMNS a
SEMMNI jadra.
PsqlODBC je ke staen na Nefunkn semafory mohou zpsobit pd bhem intenzivnch databzovch
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php. operac.
OpenLink mete zskat na http://www.openlinksw.com. Spolupracuje s Pokud se tato chyba vyskytuje jet nkde jinde, mon nemte vbec
jejich klientskm programovm vybavenm a je dostupn pro vechny jimi nakonfigurovny semafory ve vaem jde. V PostgreSQL Administrator's
podporovan platformy (Win, Mac, Unix, VMS). Guide najdete podrobnj popis poadavk na sdlenou pamt a
semafory.
Tento ovlada je uren pro ty, kte vyaduj podporu komern kvality, 3.5) Jak povolit nebo zakzat pstup z jinch stanic?
nicmn freeware verze je dostupn a funkn. Dotazy zaslejte na
postgres95@openlink.co.uk.
2.2 Jak nstroje lze pout pro PostgreSQL a web? Pi vchozm nastaven PostgreSQL odepe pstup z jinch stanic ne
-------------------------------------------------- lokln s pouitm UDP. Pstup z jinch stroj nen mon dokud jej
nepovolte nastavenm tcpip_socket v postgresql.conf a urenm zpsobu
autentifikace v $PGDATA/pg_hba.conf.
Pkn vod do databzovch technologi zabezpeujcch chod webovch 3.6) Jak ladit databzov stroj na lep vkon?
strnek najdete na http://www.webreview.com.
Pro tvorbu webu existuje excelentn rozhran PHP, kter naleznete na Urit pomohou indexy. Pkaz EXPLAIN ANALYZE Vm umon sledovat jak
http://www.php.net. PostgreSQL interpretuje V dotaz a kter indexy pouv.
Pro sloitj ppady se asto pouv Perl a CGI.pm nebo mod_perl. Pi vt dvce INSERT uvaujte o nhrad pkazem COPY. Ten je
mnohem rychlej neli samotn INSERT. Kad pkaz mimo blok BEGIN
WORK/COMMIT se provd ve vlastn transakci. Zvate, zda-li by se
nedalo nkolik pkaz spojit do jedn transakce. Tm se sn reie
na transakce. Ped provedenm rozshlch zmn zrute indexy, kter po
dokonen zmn opt vytvote.
Mte nkolik dalch monost, jak zlepit vkon. Mete zakzat
fsyn() pi startu postmastera pepnai -o -F. Tyto pepnae zabrn
fsync(), tj. zpisu na disk po kad transakci.
Mete zvit velikost pamovch buffer pouitch backendy tj.
parametr -B postmasteru. Pokud ale tato hodnota bude pli velk, tak
mon nespustte postmastera jeliko doshnete limitu sdlen pamti.
Kad buffer m 8K a implicitn je 64 buffer.
2.3 Existuje grafick rozhran pro PostgreSQL? Dle mete pout pepna -S k zven limitu pamti pro backendy na
---------------------------------------------- doasn tdn. Hodnota je mnna v kilobytech a vchoz nastaven je
512, tj. 512K.
Mete pout pkaz CLUSTER, kter uspod fyzicky data v tabulkch
podle indexu. Vce na manulovch strnkch pkazu CLUSTER.
3.7) Jak jsou monosti ladn?
Mte nkolik monost jak se dostat k uitenm stavovm informacm.
Pro PostgreSQL existuje nkolik grafickch rozhran: PgAccess Zaprv, pi pekladu pouijte pepna --enable-cassert, tm se zapne
(http://www.php.net), PgAdmin (http://www.php.net), RHDB Admin monitorovn a nsledn zastaven aplikace, kdy se proces v backendu
(http://sources.redhat.com/rhdb/) a Rekall ( dostane do neoekvanho stavu.
http://www.thekompany.com/products/rekall/). Dle existuje PHPPgAdmin
(http://phppgadmin.sourceforge.net/) rozhran PostgreSQL zaloen na web Jak postmaster tak postgres m nkolik pepna umoujcch ladn.
technologii. Postmaster nastartujte tak, abyste si byli jisti, e je standartn
vstup a standartn chybov vstup pesmrovn do souboru logu,
plnj seznam najdete na napklad:
http://techdocs.postgresql.org/guides/GUITools. cd /usr/local/pgsql
./bin/postmaster > server.log 2>&1 &
2.4 Kter programovac jazyky maj podporu pro PostgreSQL?
---------------------------------------------------------- Tm se vytvo log v adresi PostgreSQL, Tento soubor obsahuje
uiten informace o problmech a chybch vyskytlch se na serveru.
Vtina programovacch jazyk obsahuje rozhran pro PostgreSQL. Postmaster m pepna -d urujc, jak podrobn maj bt reportovan
Podvejte se do roziujcch modul Vaeho programovacho jazyka. informace, tj. debug level. Pozor, pi velk hodnot debug levelu
rychle roste velikost souboru logu.
Distribuce PostgreSQL obsahuje tato rozhran:
Pokud neb postmaster, mete spustit backend PostgreSQL z pkazov
- C (libpq) dky a napsat svj SQL dotaz pmo v backendu (doporueno pouze pro
- Embbedded C (ecpg) ladn). Dotaz je v tomto ppad ukonen novou dkou, nikoliv
- Java (jdbc) stednkem. Pokud mte aplikaci peloenou s ladcmi symboly, mete
- Python (PyGreSQL) pout debbuger k monitorovn procesu. Pokud nen backend sputn
- TCL (libpgtcl) postmasterem, pak neb ve svm obvyklm prosted a tud nkter
problmy dan interakc mezi backendy nemohou bt nasimulovny.
Dal rozhran jsou dostupn na http://gborg.postgresql.org v sekci
Drivers/Interfaces. Pokud b postmaster, spuse psql v jednom okn a pak si zjistte PID
procesu postgres pouitho psql. V debuggeru sepipojte k postgresql
------------------------------------------------------------------------ PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql.
Pokud ladte startup postgresu, pak nastavte PGOPTIONS="-W n" a spuse
Administrativn dotazy psql. Tento pepna zpsob pauzu n sekund, take budete mt as se
====================== pipojit k procesu, a nastavit breakpointy a pokraovat v startup
posloupnosti.
3.1 Jak nainstalovat PostgreSQL jinam ne do /usr/local/pgsql?
-------------------------------------------------------------- Pro ladn a men vkonu mohou bt uiten pepnae -s, -A a -t
programu postgres (backend).
Pouijte volbu --prefix pi sputn configure
Mete provst peklad s profilac, tak abyste vidli kolik asu
3.2 Pi startu postmaster, dostanu chybov hlen Bad System Call nebo core dump. Pro? zabraj jednotliv funkce. Soubory s profily backend jsou uloeny v
---------------------------------------------------------------------------------------- adresi pgsql/data/base/dbname. Profil klienta pak v jeho aktulnm
adresi. Korektn profilace v prosted Linux poaduje konfiguraci
Dvody mohou bt rzn, ale nejprve zkontrolujte, zda V systm systmu s parametrem -DLINUX_PROFILE.
podporuje System V extensions. PostgreSQL vyaduje v jde podporu
sdlen pamti a semafor. 3.8) Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
3.3 Pi startu postmastera dostanu hlen o chyb IpcMemoryCreate. Pro? Zvyte limit postmastera na maximln poet souasn sputnch
------------------------------------------------------------------------- backend.
Buto nemte sprvn nakonfigurovanou sdlenou pam v jde nebo musite Vchoz hodnota je 32 backend. Tuto hodnotu zvte zastavenm a
zvtit jej velikost. Potebn velikost je zvisl na architektue a na optovnm sputnm postmastera s parametrem -N nebo pravou
tom, kolik pamovch buffer a backend mte povoleno pro postmastera. postgresql.conf.
Pro vtinu systm s peddefinovanm potem backend a pamovch
buffer je minimum zhruba 1MB. V Pi zven hodnoty -N nad 32 muste zvit hodnotu -B nad vchoz 64,
http://www.postgresql.org/docs/view.php?version=current&idoc=1&file=kern -B mus bt minimln dvakrt vt, nebo jet lpe vce.
el-resources.html [3] naleznete podrobnj informace o sdlen pamti a Pravdpodobn zjistte, e pro velk poet proces backendu je nutn
semaforech. zvit nkter parametry jdra. Jsou to pedevm maximln velikost
sdlen pamti SHMMAX, maximln poet semafr SEMMNS a SEMMNI,
3.4 Pi startu postmastera dostanu hlen o chyb IpcSemaphoreCreate. Pro? maximln poet proces NPROC, maximln poet proces uivatele
---------------------------------------------------------------------------- MAXUPRC a maximln poet otevench soubor NFILE a NINODE. Dvod pro
omezen maximlnho potu backend je fakt, e by mohlo dojt k
Pokud dostane chybovou zprvu IpcSemaphoreCreate: semget failed (No vyerpn zdroj Vaeho systmu.
space left on device), pak vae jdro nem dost volnch semafor.
PostgreSQL vyaduje jeden semafor pro kad backend v pozad. Doasnm 3.9) K emu slou adres pgsql_tmp?
eenm je start postmastera s limitem backend. Pouijte pepna -N s
hodnotou men ne 32. plnm eenm je zven hodnot SEMMNS a SEMMNI Tento adres obsahuje doasn soubory vytvoen exekutorem dotaz.
jadra. Napklad, kdy je nutn tdn k zajitn ORDER BY a tdn m
vt nroky na prostor ne povoluje parametr -S backendu, pak je
Nefunkn semafory mohou zpsobit pd bhem intenzivnch databzovch vytvoen doasn soubor k uloen extra daj.
operac.
Doasn soubory jsou obvykle mazny automaticky, ale me se stt, e
Pokud se tato chyba vyskytuje jet nkde jinde, mon nemte vbec bhem tdn server spadne. Zastaven a dal start postmastera
nakonfigurovny semafory ve vaem jde. V PostgreSQL Administrator's zajist odstrann soubor s tchto adres.
Guide najdete podrobnj popis poadavk na sdlenou pamt a semafory.
3.10) Pro je poadovno dump a obnoven (load) databze bhem upgrade mezi
3.5 Jak povolit nebo zakzat pstup z jinch stanic? velkmi verzemi PostgreSQL?
-----------------------------------------------------
PostgreSQL se minimln mn bhem malch verz, take nap. pi
Pi vchozm nastaven PostgreSQL odepe pstup z jinch stanic ne upgrade z 7.2 na 7.2.1 nen nutn dump a load databze. Ale vynamn
lokln s pouitm UDP. Databze se zpstupn jinm stanicm nastavenm verze asto mn intern formt systmovch tabulek a datovch
pepnae -i postmastera a povolenm stanice a urenm reimu soubor. Tyto zmny jsou natolik rozshl, e nelze zajistit zptnou
autentifikace v $PGDATA/pg_hba.conf. Tm se povol TCP/IP spojen. kompatibilitu pro datov soubory. Dump ulo data v obecnm formtu,
ZASTARAL take mohou bt natena a pouvna v novm internm formtu.
_________________________________________________________________
3.6 Jak ladit databzov stroj na lep vkon?
---------------------------------------------- Provozn dotazy
Urit pomohou indexy. Pkaz EXPLAIN zobraz zpsob interpretace Vaeho 4.1) m se li binrn a normln kurzor?
dotazu a pouit index.
Popis najdete v manulov strnce DECLARE
Pi vt dvce INSERT uvaujte o nhrad pkazem COPY. Ten je mnohem
rychlej neli samotn INSERT. Kad pkaz mimo blok BEGIN WORK/COMMIT 4.2) Jak zskat pouze prvn dek dotazu? Nhodn dek?
se provd ve vlastn transakci. Zvate, zda-li by se nedalo nkolik
pkaz spojit do jedn transakce. Tm se sn reie na transakce. Ped Podvejte se do man. strnky pkazu FETCH, nebo pouijte SELECT ...
provedenm rozshlch zmn zrute indexy, kter po dokonen zmn opt LIMIT ...
vytvote.
I kdy potebujete zskat pouze prvnch nkolik dk, je teba
Mte nkolik dalch monost, jak zlepit vkon. Mete zakzat fsyn() zpracovat vechna data, nap. pokud dotaz m ORDER BY. Pokud vak
pi startu postmastera pepnai -o -F. Tyto pepnae zabrn fsync(), existuje index, kter odpovd ORDER BY, PostgreSQL me zskat pouze
tj. zpisu na disk po kad transakci. prvnch n dk a ukonit zpracovn dotazu.
Mete zvit velikost pamovch buffer pouitch backendy tj. K zskn nhodnho dku pouijte:
parametr -B postmasteru. Pokud ale tato hodnota bude pli velk, tak SELECT col
mon nespustte postmastera jeliko doshnete limitu sdlen pamti. FROM tab
Kad buffer m 8K a implicitn je 64 buffer. ORDER BY random()
LIMIT 1;
Dle mete pout pepna -S k zven limitu pamti pro backendy na
doasn tdn. Hodnota je mnna v kilobytech a vchoz nastaven je 4.3) Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
512, tj. 512K.
Pkaz \dt v psql zobraz seznam tabulek. pln seznam pkaz psql
Mete pout pkaz CLUSTER, kter uspod fyzicky data v tabulkch dostanete pkazem \?. Tak se mete podvat do zdrojovch kd psql
podle indexu. Vce na manulovch strnkch pkazu CLUSTER. do souboru pgsql/src/bin/psql/describe.c. Ten obsahuje SQL pkazy,
kter se pouvaj v psql metapkazech. Dle mete spustit psql s
3.7 Jak jsou monosti ladn? pepnaem -E, kter zpsob zobrazen kadho dotazu, kter
------------------------------ zpracovn metapkazu vyvol. PostgreSQL nabz SQLi INFORMATION
SCHEMA s tabulkami obsahujc informace o databzi.
Mte nkolik monost jak se dostat k uitenm stavovm informacm.
4.4) Jak odstranm sloupec tabulky, jak zmnm jeho typ?
Zaprv, pi pekladu pouijte pepna --enable-cassert, tm se zapne
monitorovn a nsledn zastaven aplikace, kdy se proces v backendu Ponaje verz 7.3 mete pout pkaz ALTER TABLE DROP COLUMN. Ve
dostane do neoekvanho stavu. starch verzch mete pout nsledujc postup:
BEGIN;
Jak postmaster tak postgres m nkolik pepna umoujcch ladn. LOCK TABLE old_table;
Postmaster nastartujte tak, abyste si byli jisti, e je standartn SELECT ... -- mimo sloupec, kter chceme odstranit
vstup a standartn chybov vstup pesmrovn do souboru logu,
napklad:
cd /usr/local/pgsql
./bin/postmaster > server.log 2>&1 &
Tm se vytvo log v adresi PostgreSQL, Tento soubor obsahuje uiten
informace o problmech a chybch vyskytlch se na serveru. Postmaster m
pepna -d urujc, jak podrobn maj bt reportovan informace, tj.
debug level. Pozor, pi velk hodnot debug levelu rychle roste velikost
souboru logu.
Pokud neb postmaster, mete spustit backend PostgreSQL z pkazov
dky a napsat svj SQL dotaz pmo v backendu (doporueno pouze pro
ladn). Dotaz je v tomto ppad ukonen novou dkou, nikoliv
stednkem. Pokud mte aplikaci peloenou s ladcmi symboly, mete
pout debbuger k monitorovn procesu. Pokud nen backend sputn
postmasterem, pak neb ve svm obvyklm prosted a tud nkter
problmy dan interakc mezi backendy nemohou bt nasimulovny.
Pokud b postmaster, spuse psql v jednom okn a pak si zjistte PID
procesu postgres pouitho psql. V debuggeru sepipojte k postgresql
PID. Pak nastavte breakpointy v debuggeru a zadejte dotaz v psql. Pokud
ladte startup postgresu, pak nastavte PGOPTIONS="-W n" a spuse psql.
Tento pepna zpsob pauzu n sekund, take budete mt as se pipojit
k procesu, a nastavit breakpointy a pokraovat v startup posloupnosti.
Pro ladn a men vkonu mohou bt uiten pepnae -s, -A a -t
programu postgres (backend).
Mete provst peklad s profilac, tak abyste vidli kolik asu
zabraj jednotliv funkce. Soubory s profily backend jsou uloeny v
adresi pgsql/data/base/dbname. Profil klienta pak v jeho aktulnm
adresi. Korektn profilace v prosted Linux poaduje konfiguraci
systmu s parametrem -DLINUX_PROFILE.
3.8 Pro dostanu "Sorry, too many clients", kdy se zkoum pipojit?
---------------------------------------------------------------------
Zvyte limit postmastera na maximln poet souasn sputnch
backend.
Vchoz hodnota je 32 backend. Tuto hodnotu zvte zastavenm a
optovnm sputnm postmastera s parametrem -N nebo pravou
postgresql.conf.
Pi zven hodnoty -N nad 32 muste zvit hodnotu -B nad vchoz 64,
-B mus bt minimln dvakrt vt, nebo jet lpe vce. Pravdpodobn
zjistte, e pro velk poet proces backendu je nutn zvit nkter
parametry jdra. Jsou to pedevm maximln velikost sdlen pamti
SHMMAX, maximln poet semafr SEMMNS a SEMMNI, maximln poet
proces NPROC, maximln poet proces uivatele MAXUPRC a maximln
poet otevench soubor NFILE a NINODE. Dvod pro omezen maximlnho
potu backend je fakt, e by mohlo dojt k vyerpn zdroj Vaeho
systmu.
3.9 K emu slou adres pgsql_tmp?
------------------------------------
Tento adres obsahuje doasn soubory vytvoen exekutorem dotaz.
Napklad, kdy je nutn tdn k zajitn ORDER BY a tdn m vt
nroky na prostor ne povoluje parametr -S backendu, pak je vytvoen
doasn soubor k uloen extra daj.
Doasn soubory jsou obvykle mazny automaticky, ale me se stt, e
bhem tdn server spadne. Zastaven a dal start postmastera zajist
odstrann soubor s tchto adres.
3.10 Pro je poadovno dump a obnoven (load) databze bhem upgrade mezi velkmi verzemi PostgreSQL?
------------------------------------------------------------------------------------------------------
PostgreSQL se minimln mn bhem malch verz, take nap. pi upgrade
z 7.2 na 7.2.1 nen nutn dump a load databze. Ale velk verze asto
mn intern formt systmovch tabulek a datovch soubor. Tyto zmny
jsou natolik rozshl, e nelze zajistit zptnou kompatibilitu pro
datov soubory. Dump ulo data v obecnm formtu, take mohou bt
natena a pouvna v novm internm formtu.
------------------------------------------------------------------------
Provozn dotazy
===============
4.1 m se li binrn a normln kurzor?
------------------------------------------
Popis najdete v manulov strnce DECLARE
4.2 Jak zskat pouze prvn dek dotazu? Nhodn dek?
-------------------------------------------------------
Podvejte se do man. strnky pkazu FETCH, nebo pouijte SELECT ...
LIMIT ...
Nen nutn zpracovvat cel dotaz, kdy potebujete pouze nkolik
prvnch dk. Pokud existuje index ORDER BY, PostgreSQL je schopen
peruit zpracovn dotazu po zskn poadovanho potu dk.
K zskn nhodnho dku pouijte:
SELECT col FROM tab
ORDER BY random() LIMIT 1;
4.3 Jak zskm seznam tabulek nebo jinak jak jej zsk psql?
------------------------------------------------------------
Podvejte se do zdrojovch kd psql do souboru
pgsql/src/bin/psql/describe.c. Ten obsahuje SQL pkazy, kter se
pouvaj v psql metapkazech. Dle mete spustit psql s pepnaem
-E, kter zpsob zobrazen kadho dotazu, kter zpracovn metapkazu
vyvol.
4.4 Jak odstranm sloupec tabulky, jak zmnm jeho typ?
-------------------------------------------------------
Ponaje verz 7.3 mete pout pkaz ALTER TABLE DROP COLUMN. Ve
starch verzch mete pout nsledujc postup:
BEGIN;
LOCK TABLE old_table;
SELECT ... -- mimo sloupec, kter chceme odstranit
INTO TABLE new_table; INTO TABLE new_table;
DROP TABLE old_table; DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table; ALTER TABLE new_table RENAME TO old_table;
COMMIT; COMMIT;
Pro zmnu typu sloupce je teba provst:
BEGIN;
ALTER TABLE tab ADD COLUMN new_col new_data_type;
UPDATE tab SET new_col = CAST(old_col AS new_data_type;
ALTER TABLE tab DROP COLUMN old_col;
COMMIT;
Pot provete VACUUM FULL tab - uvolnte tm diskov prostor zabran Pro zmnu typu sloupce je teba provst:
nyn ji neplatnmi dky. BEGIN;
ALTER TABLE tab ADD COLUMN new_col new_data_type;
UPDATE tab SET new_col = CAST(old_col AS new_data_type;
ALTER TABLE tab DROP COLUMN old_col;
COMMIT;
4.5 Jak je maximln velikost dku, tabulky a databze? Pot provete VACUUM FULL tab - uvolnte tm diskov prostor zabran
--------------------------------------------------------- nyn ji neplatnmi dky.
PostgreSQL m tato omezen: 4.5) Jak je maximln velikost dku, tabulky a databze?
PostgreSQL m tato omezen:
Maximln velikost databze: neomezena (existuj 32TB db) Maximln velikost databze: neomezena (existuj 32TB db)
Maximln velikost tabulky: 32 TB Maximln velikost tabulky: 32 TB
Maximln velikost dky: 1.6 TB Maximln velikost dky: 1.6 TB
Maximln velikost poloky 1 GB Maximln velikost poloky 1 GB
Maximln poet dk v tabulce: neomezeno Maximln poet dk v tabulce: neomezeno
Maximln poet sloupc v tabulce: 250-1600 podle typ Maximln poet sloupc v tabulce: 250-1600 podle typ
Maximln poet index na tabulce: neomezeno Maximln poet index na tabulce: neomezeno
Ve skutenosti nic nen neomezeno, limitem bv vdy dostupn diskov Ve skutenosti nic nen neomezeno, limitem bv vdy dostupn diskov
pam nebo velikost operan pamti. Pokud mte nkterou z tchto hodnot pam nebo velikost operan pamti. Pokud mte nkterou z tchto
neobvykle velkou, me dojt ke snen vkonu. hodnot neobvykle velkou, me dojt ke snen vkonu.
Maximln velikost tabulky je 32 TB a nevyaduje podporu velkch soubor Maximln velikost tabulky je 32 TB a nevyaduje podporu velkch
operanm systmem. Velk tabulky se ukldaj do nkolika 1 GB soubor soubor operanm systmem. Velk tabulky se ukldaj do nkolika 1 GB
take limity souborovho systmu nejsou podstatn. soubor take limity souborovho systmu nejsou podstatn.
Maximln velikost tabulky a maximln poet sloupc meme Maximln velikost tabulky a maximln poet sloupc meme
zetynsobit nastavenm velikosti bloku na 32K. zetynsobit nastavenm velikosti bloku na 32K.
4.6 Kolik diskovho prostoru je poteba k uloen dat z normlnho textovho souboru? 4.6) Kolik diskovho prostoru je poteba k uloen dat z
-------------------------------------------------------------------------------------
PostgreSQL vyaduje a ptinsobek diskovho prostoru k uloen dat z normlnho textovho souboru?
textovho souboru.
Napklad, uvaujme soubor se 100 tisci dky obsahujc na kad dce PostgreSQL vyaduje a ptinsobek diskovho prostoru k uloen dat z
cel slo a textov popis. Text je v prmru dvacet byt dlouh. textovho souboru.
Textov soubor bude 2.8 MB dlouh. Velikost databze obsahujc
odpovdajc data bude zhruba 6.4 MB.
Napklad, uvaujme soubor se 100 tisci dky obsahujc na kad
dce cel slo a textov popis. Text je v prmru dvacet byt
dlouh. Textov soubor bude 2.8 MB dlouh. Velikost databze
obsahujc odpovdajc data bude zhruba 6.4 MB.
36 byt: hlavika dku (piblin) 36 byt: hlavika dku (piblin)
24 byt: jedna celoseln poloka a jedna textov 24 byt: jedna celoseln poloka a jedna textov
4 byty: ukazatel na strnku k ntici + 4 byty: ukazatel na strnku k ntici
------------------------------------------------------ ------------------------------------------------------
64 byt na dek 64 byt na dek
Velikost datov strnky PostgreSQL je 8KB Velikost datov strnky PostgreSQL je 8KB
8192 byt na strnce 8192 byt na strnce
---------------------- = 128 dek na strnku ---------------------- = 128 dek na strnku
64 byt za dek 64 byt za dek
100000 dek 100000 dek
-------------------- = 782 strnek (zaokrouhleno nahoru) -------------------- = 782 strnek (zaokrouhleno nahoru)
128 dek na strnce 128 dek na strnce
782 * 8192 = 6, 406, 144 byt (6.4 MB) 782 * 8192 = 6, 406, 144 byt (6.4 MB)
Indexy nemaj tak velkou reii, ale mohou bt tak velk, protoe Indexy nemaj tak velkou reii, ale mohou bt tak velk, protoe
obsahuj indexovan data. obsahuj indexovan data.
Hodnoty NULL jsou uloeny v bitmapch, take spotebuj jen velmi mlo Hodnoty NULL jsou uloeny v bitmapch, take spotebuj jen velmi mlo
diskovho prostoru. diskovho prostoru.
4.7 Jak zskm seznam vytvoench tabulek, index, databz? 4.7) Jak zskm seznam vytvoench tabulek, index, databz?
------------------------------------------------------------
psql m sadu metapkaz k zobrazen tchto informac. Jejich seznam
psql m sadu metapkaz k zobrazen tchto informac. Jejich seznam zskte pkazem \?. Dle se mete podvat na obsah systmovch
zskte pkazem \?. Dle se mete podvat na obsah systmovch tabulek tabulek zanajcch pg_. Sputn psql s parametrem -l provede vpis
zanajcch pg_. Sputn psql s parametrem -l provede vpis nzv nzv vech databz.
vech databz.
Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy pistupujc
Soubor pgsql/src/tutorial/syscat.source obsahuje SELECTy pistupujc k k systmovm tabulkmm.
systmovm tabulkmm.
4.8) Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
4.8 Mj dotaz je pomal a nepouv vytvoen indexy. Pro?
----------------------------------------------------------- Kad dotaz nemus nutn pout existujc indexy. Index se pouije
tehdy, kdy je tabulka vt ne urit minimln velikost, a dotaz
Kad dotaz nemus nutn pout existujc indexy. Index se pouije vybr pouze procentuln malou st dk tabulky. To proto, e
tehdy, kdy je tabulka vt ne urit minimln velikost, a dotaz nhodn pstup k disku dan tenm indexu me bt pomalej ne
vybr pouze procentuln malou st dk tabulky. To proto, e nhodn linern ten tabulky nebo sekvenn ten.
pstup k disku dan tenm indexu me bt pomalej ne linern ten
tabulky nebo sekvenn ten, PostgreSQL rozhoduje o pouit index na zklad statistiky pstup k
tabulce. Tyto statistiky se shromauj pkazy VACUUM ANALYZE nebo
PostgreSQL rozhoduje o pouit index na zklad statistiky pstup k ANALYZE. Dky statistikm m optimizer informaci o potu dek v
tabulce. Tyto statistiky se shromauj pkazy VACUUM ANALYZE nebo tabulce a me lpe rozhodnout o pouit index. Statistiky se uplatn
ANALYZE. Dky statistikm m optimizer informaci o potu dek v tabulce pi uren optimlnho poad a metody spojen tabulek. Statistiky by
a me lpe rozhodnout o pouit index. Statistiky se uplatn pi se mli aktualizovat opakovan, tak jak se mn obsah tabulek.
uren optimlnho poad a metody spojen tabulek. Statistiky by se
mli aktualizovat opakovan, tak jak se mn obsah tabulek. Indexy nejsou obyejn pouity pro setdn nebo spojen tabulek.
Sekvenn zpracovn nsledovan explicitnm tdnm je obyejn
Indexy nejsou obyejn pouity pro setdn nebo spojen tabulek. rychlej ne indexn ten na velk tabulce.
Sekvenn zpracovn nsledovan explicitnm tdnm je obyejn
rychlej ne indexn ten na velk tabulce. Jinak je tomu v ppad pouit LIMIT a ORDER BY, pi kterm se
vtinou index pouije, vsledkem je pouze mal st tabulky. Funkce
Jinak je tomu v ppad pouit LIMIT a ORDER BY, pi kterm se vtinou MAX() a MIN() nepouvaj indexy, ale je mon tut hodnotu zskat:
index pouije, vsledkem je pouze mal st tabulky. Funkce MAX() a SELECT col
MIN() nepouvaj indexy, ale je mon tut hodnotu zskat FROM tab
ORDER BY col [ DESC ]
SELECT col FROM tab LIMIT 1;
ORDER BY col [ DESC ] LIMIT 1;
Pokud si myslte, e optimizer myln zvolil sekvenn prohledvn
Pokud si myslte, e optimizer myln zvolil sekvenn prohledvn tabulky, pouijte pkaz SET enable_seqscan TO 'off' a zkuste zda je
tabulky, pouijte pkaz SET enable_seqscan TO 'off' a zkuste zda je indexn prohledvn rychlej.
indexn prohledvn rychlej.
Pi vyhledvn na zklad vzoru jako je nap. opertor LIKE nebo ~ se
Pi vyhledvn na zklad vzoru jako je nap. opertor LIKE nebo ~ se indexy pouj pouze za uritch skutenost:
indexy pouj pouze za uritch skutenost: * zatek hledanho vzoru mus bt ukotven k zatku, tj.
+ vzor LIKE nesm zanat %
- zatek hledanho vzoru mus bt ukotven k zatku, tj. + ~ regulrn vraz mus zanat ^
* vzor nesm zanat intervalem, nap. [a-e]
* vzor LIKE nesm zanat % * vyhledvan, kter nen Case sensitiv jako je ILIKE nebo ~*
* regulrn vraz mus zanat ^ nepouv indexy. Mete ale pout funkcionln indexy, kter
jsou posny v sekci 4.12
- vzor nesm zanat intervalem, nap. [a-e] * pi inicializaci databze (initdb) mus bt pouito C locale
- vyhledvan, kter nen Case sensitiv nepouv indexy.
Mete ale pout funkcionln indexy, kter jsou posny v sekci
4.12
- pi inicializaci databze (initdb) mus bt pouito C locale
(pozn. pekladatele - tud v naich podmnkch nepouiteln, (pozn. pekladatele - tud v naich podmnkch nepouiteln,
nepracovalo by esk tdn). nepracovalo by esk tdn).
4.9 Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz? 4.9) Jak zjistm, jak optimizer dotazu vyhodnocuje mj dotaz?
------------------------------------------------------------
Podvejte se do manulov strnky pkazu EXPLAIN.
4.10 Co to je R-tree index? Podvejte se do manulov strnky pkazu EXPLAIN.
---------------------------
R-tree index se pouv pro indexovn prostorovch dat. Hash index 4.10) Co to je R-tree index?
neme obslouit prohledvn oblast. B-tree index me dit vyhledn
oblast v jedn dimenzi. R-tree index me podporovat hledn v
multidimenzionlnch datech. Pouijeme-li napklad R-tree index na
atributy typu point, pak systm me efektivn odpovdt na dotaz -
vyber vechny body uvnit obdlnk.
Pvodn nvrh R-tree je Guttman, A. "R-trees: A Dynamic Index Structure R-tree index se pouv pro indexovn prostorovch dat. Hash index
for Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on neme obslouit prohledvn oblast. B-tree index me dit
Mgmt of Data, 45-57 vyhledn oblast v jedn dimenzi. R-tree index me podporovat
hledn v multidimenzionlnch datech. Pouijeme-li napklad R-tree
index na atributy typu point, pak systm me efektivn odpovdt na
dotaz - vyber vechny body uvnit obdlnk.
Tyto materily naleznete v Stonebraker's "Readings in Database Systems". Pvodn nvrh R-tree je Guttman, A. "R-trees: A Dynamic Index
Structure for Spatial Searching." Proceedings of the 1984 ACM SIGMOD
Int'l Conf on Mgmt of Data, 45-57
Vestavn R-tree me slouit k indexaci polygon a oblast. Teoreticky Tyto materily naleznete v Stonebraker's "Readings in Database
meme R-tree pout i pro vce dimenz (jin ne 3D). Ve skutenosti Systems".
ale takov rozen R-tree vyaduje trochu prce a ve souastnosti
chyb dokumentace jak na to.
4.11 Co je Genetic Query Optimizer? Vestavn R-tree me slouit k indexaci polygon a oblast.
----------------------------------- Teoreticky meme R-tree pout i pro vce dimenz (jin ne 3D). Ve
skutenosti ale takov rozen R-tree vyaduje trochu prce a ve
souastnosti chyb dokumentace jak na to.
GEQO modul urychluje optimalizaci dotaz pi spojovn mnostv tabulek 4.11) Co je Genetic Query Optimizer?
metodou Genetickch algoritm (GA). To umouje zskat velkho mnostv
variant spojen pi neplnm prohledvnm.
4.12 Jak provst vyhledvn regulrnho vrazu case sensitiv, GEQO modul urychluje optimalizaci dotaz pi spojovn mnostv
insensitiv? Jak pout index pro case insensitive vyhledvn? tabulek metodou Genetickch algoritm (GA). To umouje zskat velkho
mnostv variant spojen pi neplnm prohledvnm.
Opertor ~ slou k porovn s regulrnm vrazem, jeho modifikace *~ 4.12) Jak provst vyhledvn regulrnho vrazu case sensitiv, insensitiv?
pedstavuje case insensitive vyhledvn. Jedn se o obdobu LIKE a Jak pout index pro case insensitive vyhledvn?
ILIKE.
Pro vyhledvn bez ohledu na velk mal psmena pouijeme Opertor ~ slou k porovn s regulrnm vrazem, jeho modifikace *~
pedstavuje case insensitive vyhledvn. Jedn se o obdobu LIKE a
ILIKE.
SELECT * FROM tab Pro vyhledvn bez ohledu na velk mal psmena pouijeme:
SELECT *
FROM tab
WHERE lower(col) = 'abc'; WHERE lower(col) = 'abc';
V tomto ppad se nepouije standardn index. Nicmn, pouije se V tomto ppad se nepouije standardn index. Nicmn, pouije se
funkcionln index, pokud jej vytvote funkcionln index, pokud jej vytvote:
CREATE INDEX tabindex ON tab (lower(col));
CREATE INDEX tabindex ON tab (lower(col)); 4.13) Jak v dotazu detekovat, e poloka je NULL?
4.13 Jak v dotazu detekovat, e poloka je NULL? Urte pomoc IS NULL nebo IS NOT NULL
------------------------------------------------
Urte pomoc IS NULL nebo IS NOT NULL 4.14) Jak jsou rozdly mezi rznmi znakovmi typy?
4.14 Jak jsou rozdly mezi rznmi znakovmi typy?
---------------------------------------------------
Typ Intern nzev Poznmka Typ Intern nzev Poznmka
-------------------------------------------------------------------------- --------------------------------------------------------------------------
...@@ -858,332 +826,292 @@ TEXT text bez horn ...@@ -858,332 +826,292 @@ TEXT text bez horn
BYTEA bytea pole byt (bezpen lze uloit i znak NULL) BYTEA bytea pole byt (bezpen lze uloit i znak NULL)
"char" char jeden znak "char" char jeden znak
S internmi nzvy se setkte v systmovm katalogu a v nkterch S internmi nzvy se setkte v systmovm katalogu a v nkterch
chybovch hlench. chybovch hlench.
Prvn tyi uveden typy jsou tzv. varlena typy (tj. prvn tyi byty na
disku nesou daj o dlce, nsleduj samotn data). Proto skuten
pouit prostor je vdy o nco mlo vt ne deklarovan dlka. Naopak,
tyto datov typy jsou komprimovnty TOASTem, take prostor na disku me
bt ni ne je oekvno.
VARCHAR(n) je vhodn pro ukldn text prommn dlky s pevn Prvn tyi uveden typy jsou tzv. varlena typy (tj. prvn tyi byty
stanovenou maximln dlkou. TEXT je pro etzce bez omezen dlky s na disku nesou daj o dlce, nsleduj samotn data). Proto skuten
maximem jeden gigabajt. pouit prostor je vdy o nco mlo vt ne deklarovan dlka.
Naopak, tyto datov typy jsou komprimovnty TOASTem, take prostor na
disku me bt ni ne je oekvno.
CHAR(n) slou k ukldn etzc stejn dlky. CHAR(n) dopln przdn VARCHAR(n) je vhodn pro ukldn text prommn dlky s pevn
znaky do specifikovan dlky, zatmco VARCHAR(n) ulo pouze pedan stanovenou maximln dlkou. TEXT je pro etzce bez omezen dlky s
znaky. BYTEA je ureno pro ukldn binrnch dat, vetn NULL byte. maximem jeden gigabajt.
Vechny zde popsan typy maj podobn vkonnostn charakteristiky.
4.15.1 Jak vytvoit serial/auto-increment pole? CHAR(n) slou k ukldn etzc stejn dlky. CHAR(n) dopln przdn
----------------------------------------------- znaky do specifikovan dlky, zatmco VARCHAR(n) ulo pouze pedan
znaky. BYTEA je ureno pro ukldn binrnch dat, vetn NULL byte.
Vechny zde popsan typy maj podobn vkonnostn charakteristiky.
PostgreSQL podporuje typ SERIAL. Pi jeho pouit se automaticky vytvo 4.15.1) Jak vytvoit serial/auto-increment pole?
SEQUENCE a index na sloupci (Pro vy verze to neplat OVIT).
Napklad:
CREATE TABLE person ( PostgreSQL podporuje typ SERIAL. Pi jeho pouit se automaticky
vytvo SEQUENCE. Napklad:
CREATE TABLE person (
id SERIAL, id SERIAL,
name TEXT name TEXT
); );
je automaticky pevedeno do je automaticky pevedeno do
CREATE SEQUENCE person_id_seq;
CREATE SEQUENCE person_id_seq; CREATE TABLE person (
CREATE TABLE person (
id INT4 NOT NULL DEFAULT nextval('person_id_seq'), id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
name TEXT name TEXT
); );
CREATE UNIQUE INDEX person_id_key ON person(id); CREATE UNIQUE INDEX person_id_key ON person(id);
Viz dokumentace create_sequence v manulovch strnkch. Dle mete Viz dokumentace create_sequence v manulovch strnkch. Dle mete
pout uniktn hodnotu OID kadho dku. Potom ale muste spoutt pout uniktn hodnotu OID kadho dku. Potom ale muste spoutt
pg_dump s pepnaem -o, tak aby zstaly zachovny hodnoty OID (u pg_dump s pepnaem -o, tak aby zstaly zachovny hodnoty OID (u
pkazu copy COPY WITH OIDS). pkazu copy COPY WITH OIDS).
4.15.2 Jak zskat hodnotu SERIAL po vloen dku? 4.15.2) Jak zskat hodnotu SERIAL po vloen dku?
--------------------------------------------------
Jednou z monost je zskat budouc hodnotu SERIAL funkc nextval()
Jednou z monost je zskat budouc hodnotu SERIAL funkc nextval ped ped samotnm vloenm a pak ji vloit explicitn. Napklad v jakmsi
samotnm vloenm a pak ji vloit explicitn. Napklad v jakmsi pseudojazyku:
pseudojazyku newid = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
newid = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); Mete pak jet pout hodnotu newid v dalch dotazech, nap. jako
hodnotu cizho kle. Nzev automaticky vytvoen sekvence je
Mete pak jet pout hodnotu newid v dalch dotazech, nap. jako tabulka_sloupec_seq.
hodnotu cizho kle. Nzev automaticky vytvoen sekvence je
tabulka_sloupec_seq. Alternativn mete zskat hodnotu posledn generovou sekvenc funkc
currval() po vloen:
Alternativn mete zskat hodnotu posledn generovou sekvenc funkc execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
currval() po vloen new_id = execute("SELECT currval('person_id_seq')");
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); Konen mete pout OID hodnotu vrcenou pkazem INSERT, ale to je
new_id = execute("SELECT currval('person_id_seq')"); pravdpodobn nejmn penositeln een. V Perlu pi pouit DBI
modulu Edmunda Mergleho DBD:Pg oid hodnotu zskme
Konen mete pout OID hodnotu vrcenou pkazem INSERT, ale to je $sth->{pg_oid_status} po kadm $sth->execute().
pravdpodobn nejmn penositeln een. V Perlu pi pouit DBI
modulu Edmunda Mergleho DBD:Pg oid hodnotu zskme $sth->{pg_oid_status} 4.15.3) Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s
po kadm $sth->execute(). jinmi uivateli?
4.15.3 Nepovede currval() a nextval() k rozhozen podmnek pi soubhu s jinmi uivateli? Nikoliv, currval() vrac hodnotu naposledy generovanou ve vaem
------------------------------------------------------------------------------------------ backendu, a ta tud nen spolen vem uivatelm.
Nikoliv, currval() vrac hodnotu naposledy generovanou ve vaem 4.15.4) Pro nen vygenerovan slo pouito pi peruen transakce? Pro
backendu, a ta tud nen spolen vem uivatelm. vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce?
4.15.4 Pro nen vygenerovan slo pouito pi peruen transakce? K zajitn efektivnosti soubhu, jsou hodnoty posloupnosti, kdy se o
Pro vznikaj dry v slovn vlastn sekvenc/SERIAL sloupce? n pod, a sekvence nen zamena do ukonen transakce. To zpsobuje
dry v slovn ze zruench transakc.
K zajitn efektivnosti soubhu, jsou hodnoty posloupnosti, kdy se o
n pod, a sekvence nen zamena do ukonen transakce. To zpsobuje 4.16) Co to je OID? Co je to TID?
dry v slovn ze zruench transakc.
Kad dek vytvoen v PostgreSQL zsk jedinen OID. Vechna OID
4.16 Co to je OID? Co je to TID? generovan bhem inicializace databze jsou men ne 16384
-------------------------------- (include/access/transam.h). Vechna OID generovan na poadavek
uivatele jsou rovna nebo vy tto hodnot. Normln, vechna OID
Kad dek vytvoen v PostgreSQL zsk jedinen OID. Vechna OID jsou jedinen nejen uvnit tabulky nebo databze, ale v rmci cel
generovan bhem inicializace databze jsou men ne 16384 instalace PostgreSQL
(include/access/transam.h). Vechna OID generovan na poadavek
uivatele jsou rovna nebo vy tto hodnot. Normln, vechna OID jsou PostgreSQL pouv OID ve svm internm systmu tabulek k vytvoen
jedinen nejen uvnit tabulky nebo databze, ale v rmci cel instalace relac. Tato OID mohou bt pouita k identifikaci konkrtnho
PostgreSQL uivatele a pouita v spojen. Pro OID hodnoty je doporuen typ OID.
Nad tmto sloupcem mete vytvoit index pro urychlen pstupu.
PostgreSQL pouv OID ve svm internm systmu tabulek k vytvoen
relac. Tato OID mohou bt pouita k identifikaci konkrtnho uivatele OID jsou dna vem dkm z centrln oblasti a jsou pouita v kad
a pouita v spojen. Pro OID hodnoty je doporuen typ OID. Nad tmto databzi. Pokud potebujete zmnit OID, nebo chcete zkoprovat tabulku
sloupcem mete vytvoit index pro urychlen pstupu. s pvodnmi OID, lze pout:
CREATE TABLE new_table(old_oid oid, mycol int);
OID jsou dna vem dkm z centrln oblasti a jsou pouita v kad SELECT old_oid, mycol INTO new FROM old;
databzi. Pokud potebujete zmnit OID, nebo chcete zkoprovat tabulku s COPY new TO '/tmp/pgtable';
pvodnmi OID, lze pout DELETE FROM new;
COPY new WITH OIDS FROM '/tmp/pgtable';
CREATE TABLE new_table(old_oid oid, mycol int);
SELECT old_oid, mycol INTO new FROM old; OID jsou uloena jako 4bajtov integer a peteou po tyech
COPY new TO '/tmp/pgtable'; miliardch. Nebylo hleno, e by se tak nkdy stalo, pesto ale
DELETE FROM new; plnujeme odstranit tento limit dv ne se tak stane.
COPY new WITH OIDS FROM '/tmp/pgtable';
TID se pouvaj i identifikaci fyzickch dk s hodnotou bloku a
OID jsou uloena jako 4bajtov integer a peteou po tyech miliardch. offsetu. TIDs se mn modifikac dk (pouv se jako ukazatel
Nebylo hleno, e by se tak nkdy stalo, pesto ale plnujeme odstranit indexu fyzickho dku).
tento limit dv ne se tak stane.
4.17) Jak je vznam nkterch vraz pouitch v PostgreSQL?
TID se pouvaj i identifikaci fyzickch dk s hodnotou bloku a
offsetu. TIDs se mn modifikac dk (pouv se jako ukazatel indexu V nkterch zdrojovch kdech nebo star dokumentaci se mete setkat
fyzickho dku). s nsledujcmi vrazy, kter maj ir vznam. Zde je pklad
nekterch:
4.17 Jak je vznam nkterch vraz pouitch v PostgreSQL? * tabulka, relace, tda (table, relation, class)
------------------------------------------------------------ * dek, zznam, ntice (row, record, tuple)
* sloupec, poloka, atribut (column, field, attribute)
V nkterch zdrojovch kdech nebo star dokumentaci se mete setkat s * vyhledn, vbr (retrieve, select)
nsledujcmi vrazy, kter maj ir vznam. Zde je pklad nekterch: * nhrada, prava (replace, update)
* pidn, vkldn (append, insert)
- tabulka, relace, tda (table, relation, class) * OID, serial value (OID, serial value)
- dek, zznam, ntice (row, record, tuple) * portal, kurzor (portal, cursor)
- sloupec, poloka, atribut (column, field, attribute) * range variable, jmno tabulky, alias tabulky (range variable,
- vyhledn, vbr (retrieve, select) table name, table alias)
seznam tchto vraz mete nalzt na
http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
/glossary.html.
4.18) Pro jsem zskal chybov hlen "ERROR: Memory exhausted in
AllocSetAlloc()"?
Pravdpodobn dolo k vyerpn virtuln pami na Vaem systmu,
nebo jdro m nzk limit pro urit zdroje. Vyzkouejte ped startem
posmatera
ulimit -d 262144
limit datasize 256m
Zle na Vaem shellu, zda budou tyto pkazy spn, mly by zvit
limit datovho segmentu pro Vae procesy a umonit tak dokonen
dotazu. Tyto pkazy se aplikuj na aktuln proces a vechny synovsk
procesy vytvoen po proveden pkazu. Pokud mte problmy s SQL
klientem protoe backend vrac pli mnoho dat, zkuste zvit limity
ped startem klienta.
4.19) Jak se dozvm, kterou verzi PostgreSQL pouvm?
V psql spuste SELECT version();
4.20) Pro operace s velkmi objekty kon "invalid large obj descriptor"?
Vechny operace s velkmi objekty - lo_open, lo_close, ... muste
spoutt v transakci, tj. mezi pkazy BEGIN WORK a COMMIT.
PostgreSQL uvoluje handle velkch objekt pi skonen transakce.
Pokud budete pracovat s velkmi objekty mimo transakci, pravdpodobn
dostanete toto chybov hlen, protoe handle ji budou neplatn.
Pokud pouvte interface podobn ODBC muste nastavit set auto_commit
off.
4.21) Jak vytvoit sloupec obsahujc implicitn aktuln datum?
Pouijte CURRENT_TIMESTAMP:
- nhrada, prava (replace, update) CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
- pidn, vkldn (append, insert)
- OID, serial value (OID, serial value)
- portal, kurzor (portal, cursor)
- range variable, jmno tabulky, alias tabulky (range
variable, table name, table alias)
seznam tchto vraz mete nalzt na
http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/g
lossary.html.
4.18 Pro jsem zskal chybov hlen "ERROR: Memory exhausted in AllocSetAlloc()"?
-----------------------------------------------------------------------------------
Pravdpodobn dolo k vyerpn virtuln pami na Vaem systmu, nebo
jdro m nzk limit pro urit zdroje. Vyzkouejte ped startem
posmatera
ulimit -d 262144
limit datasize 256m
Zle na Vaem shellu, zda budou tyto pkazy spn, mly by zvit
limit datovho segmentu pro Vae procesy a umonit tak dokonen dotazu.
Tyto pkazy se aplikuj na aktuln proces a vechny synovsk procesy
vytvoen po proveden pkazu. Pokud mte problmy s SQL klientem
protoe backend vrac pli mnoho dat, zkuste zvit limity ped
startem klienta.
4.19 Jak se dozvm, kterou verzi PostgreSQL pouvm?
-----------------------------------------------------
V psql spuste
SELECT version(); 4.22) Pro jsou moje vnoen dotazy pouvajc IN tak pomal?
4.20 Pro operace s velkmi objekty kon "invalid large obj descriptor"? Dvj verze (ped 7.4) spojovali vnoen dotazy k vnjm
------------------------------------------------------------------------- sekvennm tenm vsledku poddotazu pro kad dek vnjho dotazu.
Pokud poddotaz vrtil nkolik mlo dk IN bylo rychl. Pro ostatn
ppady je vhodn nahradit IN EXISTS:
SELECT *
FROM tab
WHERE col IN (SELECT subcol FROM subtab);
Vechny operace s velkmi objekty - lo_open, lo_close, ... muste na:
spoutt v transakci, tj. mezi pkazy BEGIN WORK a COMMIT. SELECT *
FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
PostgreSQL uvoluje handle velkch objekt pi skonen transakce. Pokud Pro urychlen vytvoete index pro subcol.
budete pracovat s velkmi objekty mimo transakci, pravdpodobn
dostanete toto chybov hlen, protoe handle ji budou neplatn.
Pokud pouvte interface podobn ODBC muste nastavit set auto_commit Ve verzi 7.4 a pozdjch, IN pouv stejn sofistikovanou techniku
off spojovn tabulek jako ostatn dotazy a je preferovan ped EXISTS.
4.21 Jak vytvoit sloupec obsahujc implicitn aktuln datum? 4.23) Jak provst vnj spojen (outer join)?
---------------------------------------------------------------
Pouijte CURRENT_TIMESTAMP PostgreSQL podporuje vnj spojen tabulek standardnmi SQL pkazy.
Zde jsou dva pklady:
SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); nebo
SELECT *
FROM t1 LEFT OUTER JOIN USING (col);
4.22 Pro jsou moje vnoen dotazy pouvajc IN tak pomal? Tyto identick dotazy napoj t1.col na t2.col a jet pid
------------------------------------------------------------- nepipojen dky z t1 (kter nemaj obdoby v t2). Prav spojen
(RIGHT JOIN) pid nepipojen dky z t2. FULL JOIN vrt vechny
dky, vetn nepipojench z tbulek t1 a t2. Klov slovo OUTER je
nepovinn a ve se na LEFT, RIGHT a FULL join. Bn spojen se
nazv INNER JOIN.
Aktuln spojujeme tabulky se sekvennm skenovnm vsledku pro kad V dvjch verzch se vnj spojen tabulek mohlo simulovat pomoc
dek vnjho dotazu. Pokud vnoen dotaz m pouze nkolik dk a UNION a NOT IN. Napklad pro spojen tabulek tab1 a tab2, je
vnj dotaz vrac hodn dek, IN je rychl. V jinch ppadech nsledujc dotaz ekvivalentn k vnjmu spojen dvou tabulek:
nahrate IN EXISTS: SELECT tab1.col2, tab2.col2
FROM tab1, tab2
SELECT * FROM tab WHERE tab1.col1 = tab2.col1
WHERE col IN (SELECT subcol FROM subtab); UNION ALL
SELECT tab1.col2, NULL
FROM tab1
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
ORDER BY col1;
takto 4.24) Jak provst dotaz z vce databz?
SELECT * FROM tab PostgreSQL nepodporuje dotazy do jin ne aktuln databze.
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
Pro urychlen vytvoete index pro subcol. Tento vkonnostn problm byl contrib/dblink nabz funkce umoujc proveden dotazu v jin
odstrann ve verzi 7.4. databzi. Klient si me otevt simultln pipojen do rznch db
bez omezen.
4.23 Jak provst vnj spojen (outer join)? 4.25) Me funkce vrtit vce dk nebo sloupc?
---------------------------------------------
PostgreSQL podporuje vnj spojen tabulek standardnmi SQL pkazy. V PostgreSQL 7.3 mete jednodue vracet vce dk nebo sloupc z
Zde jsou dva pklady: funkce, viz:
http://techdocs.postgresql.org/guides/SetReturningFunctions.
SELECT * FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); 4.26) Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL
funkcch?
nebo Peloen kd PL/pgSQL funkce je uloen ve vyrovnvac pamti, tj.
funkce je pekldna pouze pi zmn kdu, nikoliv ped kadm volnm
funkce. Nechtnm vedlejm efektem je, e voln funkce sele, kdy
se funkce odkazuje na doasnou tabulku, pokud tato tabulka byla od
pekladu funkce zruena (akoliv ji byla znovu vytvoena a existuje).
Jedinm eenm problmu je pstup k doasn tabulce pomoc EXECUTE,
tj. dynamick provdn dotazu. Tento pkaz zajist opakovan peklad
dotazu pi kadm voln funkce.
SELECT * FROM t1 LEFT OUTER JOIN USING (col); 4.27) Jak jsou monosti replikace databz?
Tyto identick dotazy napoj t1.col na t2.col a jet pid nepipojen Existuje nkolik dostupnch een master/slave replikac, tj umouj
dky z t1 (kter nemaj obdoby v t2). Prav spojen (RIGHT JOIN) pid modifikace master databze a slave databzm umouj pouze ten. Na
nepipojen dky z t2. FULL JOIN vrt vechny dky, vetn konci http://gborg.PostgreSQL.org/genpage?replication_research najdete
nepipojench z tbulek t1 a t2. Klov slovo OUTER je nepovinn a ve jejich seznam. Na een multi-master replikaci se pracuje na
se na LEFT, RIGHT a FULL join. Bn spojen se nazv INNER JOIN. http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
V dvjch verzch se vnj spojen tabulek mohlo simulovat pomoc 4.28) Jak jsou monosti ifrovn databz?
UNION a NOT IN. Napklad pro spojen tabulek tab1 a tab2, je
nsledujc dotaz ekvivalentn k vnjmu spojen dvou tabulek:
SELECT tab1.col2, tab2.col2 FROM tab1, tab2 * contrib/pgcrypto obsahuje ifrovac funkce pouiteln v SQL
WHERE tab1.col1 = tab2.col1
UNION ALL
SELECT tab1.col2, NULL FROM tab1
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
ORDER BY col1;
4.24 Jak provst dotaz nap nkolika databzemi?
--------------------------------------------------
PostgreSQL nenabz dn zpsob, jak se dotzat do jin databze ne do
aktuln. Doplnk contrib/dblink umouje dotaz do ciz databze
prostednictvm funkce. Na stran klienta nen problm si otevt vce
simultlnch pstup do rznch databz a spojovat vsledek na stran
klienta.
4.25 Me funkce vrtit vce dk nebo sloupc?
------------------------------------------------
V PostgreSQL 7.3 mete jednodue vracet vce dk nebo sloupc z
funkce, viz:
http://techdocs.postgresql.org/guides/SetReturningFunctions.
4.26 Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL funkcch?
--------------------------------------------------------------------------------
Peloen kd PL/pgSQL funkce je uloen ve vyrovnvac pamti, tj.
funkce je pekldna pouze pi zmn kdu, nikoliv ped kadm volnm
funkce. Nechtnm vedlejm efektem je, e voln funkce sele, kdy se
funkce odkazuje na doasnou tabulku, pokud tato tabulka byla od pekladu
funkce zruena (akoliv ji byla znovu vytvoena a existuje). Jedinm
eenm problmu je pstup k doasn tabulce pomoc EXECUTE, tj.
dynamick provdn dotazu. Tento pkaz zajist opakovan peklad
dotazu pi kadm voln funkce.
4.27 Jak jsou monosti replikace databz?
-------------------------------------------
Existuje nkolik dostupnch een master/slave replikac. Ty povoluj
modifikace master databze a slave databzm umouj pouze ten. Na
konci http://gborg.PostgreSQL.org/genpage?replication_research najdete
jejich seznam. Na een multi-master replikaci se pracuje na
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
4.28 Jak jsou monosti ifrovn databz?
-------------------------------------------
-
contrib/pgcrypto obsahuje ifrovac funkce pouiteln v SQL
dotazech. dotazech.
* K ifrovn penosu dat z klienta na server, mus bt server
- peloen s podporou ssl a pepna ssl v postgresql.conf mus bt
nastaven na hodnotu true. Klient mus mt vytvoen zznam hostssl
K ifrovn penosu dat z klienta na server, mus bt server v pg_hba.conf a tak mt povolen reim ssl. Lze pout i jin
peloen s podporou ssl a pepna sslv postgresql.conf mus bt
nastaven na hodnotu true. Klient mus mt vytvoen zznam hostssl v
pg_hba.conf a tak mt povolen reim ssl. Lze pout i jin
prostedky, nejen nativn podporu ssl v PostgreSQL, nap. stunel a prostedky, nejen nativn podporu ssl v PostgreSQL, nap. stunel a
ssh. ssh.
* Hesla uivatel databze jsou zaifrovna ponaje verz 7.3. Ve
-
Hesla uivatel databze jsou zaifrovna ponaje verz 7.3. Ve
starch verzch toto chovn muselo bt vynuceno volbou starch verzch toto chovn muselo bt vynuceno volbou
PASSWORD_ENCRYPTION v postgresql.conf PASSWORD_ENCRYPTION v postgresql.conf
* Server me bet na ifrovanm souborovm systmu.
_________________________________________________________________
- Roziovn PostgreSQL
Server me bet na ifrovanm souborovm systmu.
------------------------------------------------------------------------
Roziovn PostgreSQL
======================
5.1 Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
------------------------------------------------------------
Problm me bt zpsoben mnoha okolnostmi. Vyzkouejte si svoji funkci
nejdve v njak jednoduch aplikaci.
5.2 Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do PostgreSQL?
-------------------------------------------------------------------------------
Polete sv rozen do konference pgsql-hackers, a ono pak mon 5.1) Napsal jsem UDF funkci, PostgreSQL vak kon dump core?
skon v podadresi contrib.
5.3 Jak napsat funkci v C vracejc ntici? Problm me bt zpsoben mnoha okolnostmi. Vyzkouejte si svoji
------------------------------------------ funkci nejdve v njak jednoduch aplikaci.
Funkce vracejc tabulky jsou podporovan PostgreSQL 7.3 a vy pro 5.2) Jak mohu pispt njakmi ikovnmi datovmi typy a funkcemi do
jazyky C, PL/PgSQL a SQL. Vce naleznete v The Programmer's Guide. PostgreSQL?
Pklady tchto funkc pro C naleznete v contrib/tablefunc.
5.4 Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci vzata v potaz. Pro? Polete sv rozen do konference pgsql-hackers, a ono pak mon
--------------------------------------------------------------------------------------------- skon v podadresi contrib.
Makefile nem informace o zvislostech mezi hlavikovmi soubory. Muste 5.3) Jak napsat funkci v C vracejc ntici?
provst make clean a pak make. Pokud pouvte gcc, mete pout
pepna --enable-depend pkazu configure k automatickmu een
zvislost pekladaem.
Funkce vracejc tabulky jsou podporovan PostgreSQL 7.3 a vy pro
jazyky C, PL/PgSQL a SQL. Vce naleznete v The Programmer's Guide.
Pklady tchto funkc pro C naleznete v contrib/tablefunc.
[1] http://developer.postgresql.org/todo.php 5.4) Modifikoval jsem zdrojov soubory. Tato zmna nebyla pi rekompilaci
[2] http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM vzata v potaz. Pro?
[3] http://postgresql.ok.cz/PostgreSQL%20Administrator%27sGuide
Makefile nem informace o zvislostech mezi hlavikovmi soubory.
Muste provst make clean a pak make. Pokud pouvte gcc, mete
pout pepna --enable-depend pkazu configure k automatickmu
een zvislost pekladaem.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -171,7 +171,7 @@ ...@@ -171,7 +171,7 @@
PostgreSQL Data Base Management System PostgreSQL Data Base Management System
Portions copyright (c) 1996-2004, PostgreSQL Global Development Group Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
Portions Copyright (c) 1994-6 Regents of the University of California Portions Copyright (c) 1994-6 Regents of the University of California
Permission to use, copy, modify, and distribute this software and its Permission to use, copy, modify, and distribute this software and its
...@@ -760,8 +760,7 @@ ...@@ -760,8 +760,7 @@
Pour changer le type de données d'une colonne, faites : Pour changer le type de données d'une colonne, faites :
BEGIN; BEGIN;
ALTER TABLE table ADD COLUMN nouvelle_colonne nouveau_type_de_donnees; ALTER TABLE table ADD COLUMN nouvelle_colonne nouveau_type_de_donnees;
UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS nouveau_type_d UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS nouveau_type_de_donnees);
e_donnees);
ALTER TABLE table DROP COLUMN ancienne_colonne; ALTER TABLE table DROP COLUMN ancienne_colonne;
COMMIT; COMMIT;
...@@ -772,14 +771,12 @@ e_donnees); ...@@ -772,14 +771,12 @@ e_donnees);
données ? données ?
Les limites sont : Les limites sont :
Taille maximum pour une base de données illimitée (il existe des bases Taille maximum pour une base de données illimitée (il existe des basesde 32 To)
de 32 To)
Taille maximum pour une table 32 To Taille maximum pour une table 32 To
Taille maximum pour une ligne 1,6 To Taille maximum pour une ligne 1,6 To
Taille maximum pour un champ 1 Go Taille maximum pour un champ 1 Go
Nombre maximum de lignes dans une table illimité Nombre maximum de lignes dans une table illimité
Nombre maximum de colonnes dans une table 250-1600, selon le type de colo Nombre maximum de colonnes dans une table 250-1600, selon le type de colonnes
nnes
Nombre maximum d'index sur une table illimité Nombre maximum d'index sur une table illimité
Bien sûr, ces valeurs ne sont pas vraiment illimitée, elles sont Bien sûr, ces valeurs ne sont pas vraiment illimitée, elles sont
...@@ -813,21 +810,17 @@ nnes ...@@ -813,21 +810,17 @@ nnes
---------------------------------------- ----------------------------------------
60 octets par ligne 60 octets par ligne
La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), do La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), donc :
nc :
8192 octets par page 8192 octets par page
---------------------- = 136 lignes par page de base de données (arrondi à ---------------------- = 136 lignes par page de base de données (arrondi à l'entier inférieur)
l'entier inférieur)
60 octets par ligne 60 octets par ligne
100000 lignes de données 100000 lignes de données
------------------------- = 735 pages de base de données (arrondi à l'enti ------------------------- = 735 pages de base de données (arrondi à l'entier supérieur)
er supérieur)
128 lignes par page 128 lignes par page
735 pages de base de données * 8192 octets par page = 6 021 120 octets (6,4 M 735 pages de base de données * 8192 octets par page = 6 021 120 octets (6,4 Mo)
o)
Les index utilisent moins d'espace, mais ils contiennent les données Les index utilisent moins d'espace, mais ils contiennent les données
indexées, ils peuvent donc également être grands. indexées, ils peuvent donc également être grands.
...@@ -1025,8 +1018,7 @@ BYTEA bytea tableau d'octets (accepte les octets nuls) ...@@ -1025,8 +1018,7 @@ BYTEA bytea tableau d'octets (accepte les octets nuls)
table d'exemple de la section 4.15.1, un exemple dans un table d'exemple de la section 4.15.1, un exemple dans un
pseudo-langage ressemblerait à ceci : pseudo-langage ressemblerait à ceci :
nouvelle_id = execute("SELECT nextval('personne_id_seq')"); nouvelle_id = execute("SELECT nextval('personne_id_seq')");
execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')");
')");
Vous pourriez ensuite utiliser la nouvelle valeur stockée dans Vous pourriez ensuite utiliser la nouvelle valeur stockée dans
nouvelle_id avec d'autres requêtes (c'est-à-dire en tant que clé nouvelle_id avec d'autres requêtes (c'est-à-dire en tant que clé
...@@ -1085,8 +1077,7 @@ BYTEA bytea tableau d'octets (accepte les octets nuls) ...@@ -1085,8 +1077,7 @@ BYTEA bytea tableau d'octets (accepte les octets nuls)
en quelque chose d'autre ou si vous voulez faire une copie de la table en quelque chose d'autre ou si vous voulez faire une copie de la table
avec les OID originaux, il n'y a pas de raisons pour ne pas le faire : avec les OID originaux, il n'y a pas de raisons pour ne pas le faire :
CREATE TABLE nouvelle_table (macolonne int); CREATE TABLE nouvelle_table (macolonne int);
SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_t SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_table;
able;
COPY table_temporaire FROM '/tmp/tablepg'; COPY table_temporaire FROM '/tmp/tablepg';
COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg'; COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg';
DROP TABLE table_temporaire; DROP TABLE table_temporaire;
...@@ -1178,8 +1169,7 @@ CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP ); ...@@ -1178,8 +1169,7 @@ CREATE TABLE test (x int, heuremodif timestamp DEFAULT CURRENT_TIMESTAMP );
to: to:
SELECT * SELECT *
FROM table FROM table
WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne WHERE EXISTS (SELECT souscolonne FROM soustable WHERE souscolonne = colonne);
);
Pour que ceci soit rapide, souscolonne doit être une colonne indexée. Pour que ceci soit rapide, souscolonne doit être une colonne indexée.
......
...@@ -643,14 +643,12 @@ ...@@ -643,14 +643,12 @@
Wenn der postmaster hingegen läuft, führen Sie psql in einem Fenster Wenn der postmaster hingegen läuft, führen Sie psql in einem Fenster
aus, ermitteln Sie die Prozessnummer (PID) des postgres-Prozesses, der aus, ermitteln Sie die Prozessnummer (PID) des postgres-Prozesses, der
von psql verwendet wird (mit von psql verwendet wird (mit SELECT pg_backend_pid()). Binden Sie
SELECT pg_backend_pid() einen Debugger an diese PID und führen Sie Abfragen von psql aus. Wenn
Sie den postgres-Serverstart analysieren wollen, setzen Sie die
). Binden Sie einen Debugger an diese PID und führen Sie Abfragen von Umgebungsvariable PGOPTIONS="-W n", und starten Sie dann psql. Dies
psql aus. Wenn Sie den postgres-Serverstart analysieren wollen, setzen verzögert den Start um n Sekunden, damit Sie einen Debugger an den
Sie die Umgebungsvariable PGOPTIONS="-W n", und starten Sie dann psql. Prozess binden und ggf. Breakpoints setzen können, bevor die
Dies verzögert den Start um n Sekunden, damit Sie einen Debugger an
den Prozess binden und ggf. Breakpoints setzen können, bevor die
Startsequenz begonnen wird. Startsequenz begonnen wird.
Es gibt verschiedene Einstellungen (die log_*-Gruppe), die diverse Es gibt verschiedene Einstellungen (die log_*-Gruppe), die diverse
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -165,7 +165,7 @@ ...@@ -165,7 +165,7 @@
PostgreSQL Data Base Management System PostgreSQL Data Base Management System
Portions copyright (c) 1996-2002, PostgreSQL Global Development Group Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
Portions Copyright (c) 1994-6 Regents of the University of California Portions Copyright (c) 1994-6 Regents of the University of California
Permission to use, copy, modify, and distribute this software and its Permission to use, copy, modify, and distribute this software and its
...@@ -747,8 +747,7 @@ ...@@ -747,8 +747,7 @@
DROP COLUMN. We wczesniejszych wersjach mozesz zrobic tak: DROP COLUMN. We wczesniejszych wersjach mozesz zrobic tak:
BEGIN; BEGIN;
LOCAL TABLE old_table; LOCAL TABLE old_table;
SELECT ... -- wybierz wszystkie kolumny poza ta jedna ktrej chcesz sie po SELECT ... -- wybierz wszystkie kolumny poza ta jedna ktrej chcesz sie pozbyc
zbyc
INTO TABLE new_table INTO TABLE new_table
FROM old_table; FROM old_table;
DROP TABLE old_table; DROP TABLE old_table;
...@@ -770,8 +769,7 @@ zbyc ...@@ -770,8 +769,7 @@ zbyc
Maksymalny rozmiar dla rzedu? 1.6 TB Maksymalny rozmiar dla rzedu? 1.6 TB
Maksymalny rozmiar pola? 1 GB Maksymalny rozmiar pola? 1 GB
Maksymalna liczba rzedw w tabeli? nieograniczona Maksymalna liczba rzedw w tabeli? nieograniczona
Maksymalna liczba kolumn w tabeli? 250-1600 w zalezonosci od typw ko Maksymalna liczba kolumn w tabeli? 250-1600 w zalezonosci od typw kolumn
lumn
Makasymalna liczba indeksw na tabeli? nieograniczona Makasymalna liczba indeksw na tabeli? nieograniczona
Oczywiscie "nieograniczony" nie jest prawda tak do konca, istnieja Oczywiscie "nieograniczony" nie jest prawda tak do konca, istnieja
...@@ -807,8 +805,7 @@ lumn ...@@ -807,8 +805,7 @@ lumn
Strona danych w PostgreSQL zajmuje 8192 bajtw (8 KB), wiec: Strona danych w PostgreSQL zajmuje 8192 bajtw (8 KB), wiec:
8192 bajtw na strone 8192 bajtw na strone
--------------------- = 128 rzedw na jedna strone w bazie (zaokraglone w --------------------- = 128 rzedw na jedna strone w bazie (zaokraglone w dl/)
dl/)
64 bajtw na rzad 64 bajtw na rzad
100000 rzedw danych 100000 rzedw danych
...@@ -858,6 +855,7 @@ lumn ...@@ -858,6 +855,7 @@ lumn
zl/aczen (join). Sekwencyjne przeszukiwanie po ktrym nastepuje zl/aczen (join). Sekwencyjne przeszukiwanie po ktrym nastepuje
sortowanie jest zazwyczaj szybsze nie wyszukiwanie za pomoca indeksu sortowanie jest zazwyczaj szybsze nie wyszukiwanie za pomoca indeksu
na duzej tabeli. na duzej tabeli.
Jakkolwiek LIMIT w pol/aczeniu z ORDER BY czesto bedzie wykorzystywal/ Jakkolwiek LIMIT w pol/aczeniu z ORDER BY czesto bedzie wykorzystywal/
indeksy poniewaz jedynie mal/a czesc z tabeli jest zwracana. W indeksy poniewaz jedynie mal/a czesc z tabeli jest zwracana. W
rzeczywistosci, chociaz MAX() i MIN() nie uzywaja indeksw, mozliwe rzeczywistosci, chociaz MAX() i MIN() nie uzywaja indeksw, mozliwe
...@@ -952,13 +950,10 @@ lumn ...@@ -952,13 +950,10 @@ lumn
Type Nazwa wewnetrzna Uwagi Type Nazwa wewnetrzna Uwagi
-------------------------------------------------- --------------------------------------------------
VARCHAR(n) varchar rozmiar okresla maksymalna dl/ugosc, nie ma VARCHAR(n) varchar rozmiar okresla maksymalna dl/ugosc, nie matutaj wypel/niania
tutaj wypel/niania CHAR(n) bpchar wypel/niane pustymi znakami do podanej dl/ugosci
CHAR(n) bpchar wypel/niane pustymi znakami do podanej dl/ug
osci
TEXT text bez limitu na dl/ugosc l/ancucha TEXT text bez limitu na dl/ugosc l/ancucha
BYTEA bytea zmiennej dl/ugosci tablica bajtw (null-byte BYTEA bytea zmiennej dl/ugosci tablica bajtw (null-byte safe)
safe)
"char" char 1 znak "char" char 1 znak
Jesli bedziesz przegladac katalogi systemowe lub komunikaty o bl/edach Jesli bedziesz przegladac katalogi systemowe lub komunikaty o bl/edach
...@@ -970,6 +965,7 @@ BYTEA bytea zmiennej dl/ugosci tablica bajt ...@@ -970,6 +965,7 @@ BYTEA bytea zmiennej dl/ugosci tablica bajt
zadeklarowany rozmiar. Te typy takze podlegaja kompresji lub moga byc zadeklarowany rozmiar. Te typy takze podlegaja kompresji lub moga byc
przechowywane out-of-line jako TOAST, wiec faktyczne zuzycie miejsca przechowywane out-of-line jako TOAST, wiec faktyczne zuzycie miejsca
na dysku moze byc mniejsze niz oczekiwane. na dysku moze byc mniejsze niz oczekiwane.
VARCHAR(n) jest najodpowiedniejszy do przechowywania l/ancuchw o VARCHAR(n) jest najodpowiedniejszy do przechowywania l/ancuchw o
rznej dl/ugosci ale okresla on maksymalna jego dl/ugosc. TEXT jest rznej dl/ugosci ale okresla on maksymalna jego dl/ugosc. TEXT jest
najlepszy dla l/ancuchw o dowolnej dl/ugosci, nie przekraczajacej najlepszy dla l/ancuchw o dowolnej dl/ugosci, nie przekraczajacej
...@@ -1229,13 +1225,14 @@ SELECT * ...@@ -1229,13 +1225,14 @@ SELECT *
4.27) Jakie sa mozliwosci replikacji w PostgreSQL? 4.27) Jakie sa mozliwosci replikacji w PostgreSQL?
Jest kilka opcji aby stosowac replikacje typu master/slave. Ten typ pozwala Jest kilka opcji aby stosowac replikacje typu master/slave. Ten typ
jedynie masterowi na dokonywanie zmian w bazie danych, a slave moze jedynie pozwala jedynie masterowi na dokonywanie zmian w bazie danych, a slave
te zmiany odczytywac. Na stronie moze jedynie te zmiany odczytywac. Na stronie
http://gborg.PostgreSQL.org/genpage?replication_research znajduje sie ich http://gborg.PostgreSQL.org/genpage?replication_research znajduje sie
lista. Replikacja typu multi-master jest w trakcie prac, opis projektu ich lista. Replikacja typu multi-master jest w trakcie prac, opis
znajduje sie pod adresem: projektu znajduje sie pod adresem:
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php. http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
4.28) Jakie mozliwosci szyfrowania oferuje PostgreSQL? 4.28) Jakie mozliwosci szyfrowania oferuje PostgreSQL?
* contrib/pgcrypto zawiera wiele funkcji za pomoca, ktrych mozemy * contrib/pgcrypto zawiera wiele funkcji za pomoca, ktrych mozemy
...@@ -1257,22 +1254,26 @@ SELECT * ...@@ -1257,22 +1254,26 @@ SELECT *
5.1) Napisal/em wl/asna funkcje. Kiedy uzyje jej w psql, program zrzuca 5.1) Napisal/em wl/asna funkcje. Kiedy uzyje jej w psql, program zrzuca
pamiec (dump core)? pamiec (dump core)?
Problem moze byc spowodowany przez bardzo wiele rzeczy. Sprbuj najpierw Problem moze byc spowodowany przez bardzo wiele rzeczy. Sprbuj
przetestowac Twoja funkcje w samodzielnie dzial/ajacym programie. najpierw przetestowac Twoja funkcje w samodzielnie dzial/ajacym
programie.
5.2) Jak moge dodac/zgl/osic nowe typy czy funkcje do PostgreSQL? 5.2) Jak moge dodac/zgl/osic nowe typy czy funkcje do PostgreSQL?
Wyslij Twoje propozycje na liste mailowa pgsql-hackers, wtedy Wyslij Twoje propozycje na liste mailowa pgsql-hackers, wtedy
prawdopodobnie Twj kod znajdzie sie w katalogu contrib/. prawdopodobnie Twj kod znajdzie sie w katalogu contrib/.
5.3) Jak napisac funkcje C zwracajaca krotke (tuple)? 5.3) Jak napisac funkcje C zwracajaca krotke (tuple)?
W wersjach PostgreSQL od numeru 7.3, funckje zwracajace tabele sa w pelni W wersjach PostgreSQL od numeru 7.3, funckje zwracajace tabele sa w
wspierane w C, PL/PgSQL i SQL. Sprawdz w Programmer's Guide aby uzyskac pelni wspierane w C, PL/PgSQL i SQL. Sprawdz w Programmer's Guide aby
wiecej informacji. Przykl/ad funkcji napisanej w C zwracajacej tabele uzyskac wiecej informacji. Przykl/ad funkcji napisanej w C zwracajacej
zostal/ umieszczony w contrib/tablefunc. tabele zostal/ umieszczony w contrib/tablefunc.
5.4) Zmienil/em plik zrdl/owy. Dlaczego po rekompilacji nie widac zmiany? 5.4) Zmienil/em plik zrdl/owy. Dlaczego po rekompilacji nie widac zmiany?
Pliki Makefiles nie maja dorzuconych odpowiednich zaleznosci dla plikw Pliki Makefiles nie maja dorzuconych odpowiednich zaleznosci dla
nagl/wkowych (include files). Wykonaj najpierw make clean, a nastepnie plikw nagl/wkowych (include files). Wykonaj najpierw make clean, a
ponownie make. Jesli uzywasz GCC mozesz uzyc opcji --enable-depend przy nastepnie ponownie make. Jesli uzywasz GCC mozesz uzyc opcji
wykonywaniu configure aby kompilator mgl/ okreslic zaleznosci --enable-depend przy wykonywaniu configure aby kompilator mgl/
samodzielnie. okreslic zaleznosci samodzielnie.
...@@ -520,11 +520,11 @@ ...@@ -520,11 +520,11 @@
Proizvol'noj stroki? Proizvol'noj stroki?
Dlya polucheniya tol'ko neskol'kih strok, esli vy znaete ih Dlya polucheniya tol'ko neskol'kih strok, esli vy znaete ih
kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT. kolichestvo na moment vypolneniya SELECT ispol'zujte LIMIT. Esli est'
Esli est' kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to kakoj-libo indeks, kotoryj sovpadaet s ORDER BY, to vozmozhno, chto
vozmozhno, chto ves' zapros vypolnen i ne budet. Esli vy ne znaete ves' zapros vypolnen i ne budet. Esli vy ne znaete kolichestva
kolichestva neobhodimyh strok na moment vypolneniya SELECT, neobhodimyh strok na moment vypolneniya SELECT, ispol'zujte kursor i
ispol'zujte kursor i FETCH. FETCH.
To SELECT a random row, use: To SELECT a random row, use:
SELECT col SELECT col
...@@ -821,10 +821,8 @@ ...@@ -821,10 +821,8 @@
TID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej s TID ispol'zuetsya dlya identifikacii special'nyh fizicheskih zapisej s
blochnymi i offset znacheniyami. TID izmenyaetsya posle togo kak blochnymi i offset znacheniyami. TID izmenyaetsya posle togo kak
stroki v tablice byli izmeneny ili peregruzheny. stroki v tablice byli izmeneny ili peregruzheny. TID ispol'zuetsya
indeksnymi zapisyami v kachestve ukazatelya na fizicheskie zapisi.
TID ispol'zuetsya indeksnymi zapisyami v kachestve ukazatelya na
fizicheskie zapisi.
4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in 4.13) Pochemu ya poluchayu oshibku "ERROR: Memory exhausted in
AllocSetAlloc()"? AllocSetAlloc()"?
......
PostgreSQL iin Ska Sorulan Sorular (SSS)
Son gncelleme : 15 Kasm 2004 Pazartesi - 14:47:20
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
evirenler : Devrim Gndz (devrim@tdmsoft.com)
Nicolai Tufar (ntufar@tdmsoft.com)
Volkan YAZICI (volkany@phreaker.net)
Bu belgenin en gncel hali, http://www.PostgreSQL.org/docs/faqs/FAQ_turkish.html ve
http://www.gunduz.org/seminer/pg/FAQ_turkish.html adreslerinde grlebilir.
Platforma zel sorularnz, http://www.PostgreSQL.org/docs/index.html adresinde yantlanr.
Genel Sorular
1.1) PostgreSQL nedir? Nasl okunur?
1.2) PostgreSQL'in haklar nedir?
1.3) PostgreSQL, hangi Unix platformlarnda alr?
1.4) Hangi Unix olmayan uyarlamalar bulunmaktadr?
1.5) PostgreSQL'i nereden indirebilirim?
1.6) Destei nereden alabilirim?
1.7) En son srm nedir?
1.8) Hangi belgelere ulaabilirim?
1.9) Bilinen hatalar ya da eksik zelliklere nereden ulasabilirim?
1.10) Nasl SQL renebilirim?
1.11) PostgreSQL 2000 ylna uyumlu mudur?
1.12) Gelitirme takmna nasl katlabilirim??
1.13) Bir hata raporunu nasl gnderebilirim?
1.14) PostgreSQL, dier VTYS(DBMS) lerle nasl karlatrlabilir?
1.15) PostgreSQL'e maddi adan nasl destek olabilirim?
Kullanc/istemci Sorular
2.1) PostgreSQL iin ODBC srcleri var m?
2.2) PostgreSQL'i web sayfalarnda kullanabilmek iin hangi aralar bulunmaktadr?
2.3) PostgreSQL'in grafik kullanc arabirimi var mdr?
2.4) PostgreSQL ile iletiimi kurabilmek iin hangi dilleri kullanabilirim?
Ynetimsel Sorular
3.1) PostgreSQL'i /usr/local/pgsql dizininden baka dizinlere nasl kurabilirim?
3.2) Postmaster' balattmda Bad System Call ya da core dumped mesaj alyorum. Neden?
3.3) Postmaster' balattmda, IpcMemoryCreate hatas alyorum. Neden?
3.4) Postmaster', balattmda, IpcSemaphoreCreate hatas alyorum. Neden?
3.5) Dier bilgisayarlarn benim PostgreSQL veritaban sunucuma balantlarn nasl kontrol edebilirim?
3.6) Veritaban motorunu daha iyi baarm icin nasl ayarlayabilirim?
3.7) Hangi hata ayklama zellikleri bulunmaktadr?
3.8) Balanmaya alrken, neden "Sorry, too many clients" hatasn alyorum. Neden?
3.9) pgsql_tmpdizinin iindeki dosyalar nelerdir?
3.10) PostgreSQL srmlerini ykseltmek iin neden bir dump/reload ilemi gerekletirmek zorundaym?
3.11) Nasl bir donanm kullanmalym?br>
letimsel Sorular
4.1) Binary cursor ve normal cursor arasndaki fark nedr?
4.2) Sorgunun sadece ilk birka satrn nasl SELECT edebilirim?
4.3) psql'in iinde grdgm tablolarn ya da dier eylerin listesini nasl alabilirim?
4.4) Bir tablodan bir kolonu nasl kaldrabilirim?
4.5) Bir satr, tablo ve veritaban iin en fazla byklk nedir?
4.6) Tipik bir metin dosyasndaki veriyi saklamak iin ne kadar disk alan gereklidir?
4.7) Veritabannda hangi tablo ya da index'lerin tanmlandn nasl grebilirim?
4.8) Sorgularm cok yava, ya da index'lerimi kullanmyorlar. Neden?
4.9) Query-optimizer'n sorgularm nasl deerlendirdiini, ileme soktuunu nasl grebilirim?
4.10) R-tree index nedir?
4.11) Genetic Query Optimizer nedir?
4.12) Dzenli ifade (Regular Expression) aramalarn ve byk/kk harfe duyarsz aramalar nasl yapabilirim? Bu
byk/kk harfe duyarl aramalar iin index'i nasl kullanabilirim?
4.13) Bir sorguda, bir alann NULL olduunu nasl ortaya karabilirim?
4.14) esitli karakter tipleri arasndaki farklar nelerdir?
4.15.1) Nasl serial/otomatik artan (auto-incrementing) bir alan yaratabilirim?
4.15.2) Serial giriinin deerini nasl alabilirim?
4.15.3) currval() ve nextval() dier kullanclara sorun yaratmaz m?
4.15.4) Neden sequence saylarn transaction ileminin iptalinden sonra yeniden kullanlyor? Neden sequence/SERIAL
kolonumdaki saylarda atlamalar oluyor?
4.16) OID nedir? TID nedir?
4.17) PostgreSQL' de kullanlan baz terimlerin anlamlar nelerdir?
4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasn alyorum?
4.19) Hangi PostgreSQL srmn alstrdm nasl grebilirim?
4.20) Neden large-object ilemlerim, "invalid large obj descriptor" hatasn veriyor?
4.21) u andaki zaman ntanml deer olarak kabul eden kolonu nasl yaratrm?
4.22) Neden IN kullanan subquery'lerim ok yava?
4.23) Outer join ilemini nasl yapabilirim?
4.24) Ayn anda birden fazla veritabannda nasl ilem yapabilirim?
4.25) Bir fonksiyondan nasl oklu satr ya da kolon dndrebilirim?
4.26) Neden Pl/PgSQL fonksiyonlar iinden gvenli bir ekilde tablo yaratma/kaldrma ilemlerini yapamyoruz?
4.27) Hangi ifreleme seenekleri bulunmaktadr?
PostgreSQL zelliklerini Geniletmek
5.1) Kullanc-tanml bir fonksiyon yazdm. psql'de altrdm zaman neden core dump ediyor?
5.2) PostgreSQL'e nasl yeni veri tipleri/fonksiyonlar ekleyebilirim?
5.3) Bir tuple dndrmek iin bir C fonksiyonunu nasl yazarm?
5.4) Bir kaynak dosyasnda deiiklik yaptm. Yeniden derlememe ramen deiiklik geerli olmuyor. Neden?
Genel Sorular
1.1) PostgreSQL nedir? Nasl okunur?
PostgreSQL, Post-Gres-Q-L. olarak okunur
PostgreSQL, yeni-nesil VTYS aratrma prototipi olan POSTGRES veritaban ynetim sisteminin gelitirilmesidir.
POSTGRES'in zengin veri tiplerini ve gl veri modelini tutarken, SQL'in gelitirilmi alt kmesi olan PostQuel dilini
kullanr. PostgreSQL cretsizdir ve kaynak kodu ak datlr.
PostgreSQL, PostgreSQL gelitirme listesine ye olan bir Internet gelitirici takm tarafndan gelitirilir. u andaki
koordinatr, Marc G. Fournier (scrappy@PostgreSQL.org). (Bu takma nasl katlacagnz renmek iin 1.6 numaral
maddeyi okuyunuz.) Bu takm, tm PostgreSQL geliiminden sorumludur.
PostgreSQL 1.01 srmnn yazarlar Andrew Yu ve Jolly Chen idi. Bunlarn dnda bir ka kisi de uyarlama, hata
ayklama ve kodun gelitirilmesi iin alsmt. PostgreSQL'in tredii orijinal Postgres kodu, lisans, lisansst ve
akademisyenler tarafndan, Professor Michael Stonebraker (University of California, Berkeley) koordinatrlgnde
yazlmtr.
Berkley'deki yazlmn ad Postgres idi. SQL uyumluluu 1995'te eklenince, ad Postgres 95 oldu. 1996 ylnn
sonlarnda ad PostgreSQL olarak deitirildi.
1.2) PostgreSQL'in haklar nedir?
PostgreSQL Data Base Management System
Portions copyright (c) 1996-2002, PostgreSQL Global Development Group Portions Copyright (c) 1994-6 Regents of the
University of California
Permission to use, copy, modify, and distribute this software and its documentation for any purpose, without fee, and
without a written agreement is hereby granted, provided that the above copyright notice and this paragraph and the
following two paragraphs appear in all copies.
IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"
BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
MODIFICATIONS.
stteki metin klasik ak-kod lisans olan BSD lisansdr. Kaynak kodun nasl kullanlabileceine dair snrlamalar
yoktur. Bu lisans seviyoruz. Deitirme niyetimiz bulunmamaktadr.
1.3) PostgreSQL, hangi Unix platforlarnda alr?
Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i altracaktr. Ayrntl bilgi iin kurulum belgelerine
bakabilirsiniz.
1.4) Hangi Unix olmayan uyarlamalar bulunmaktadr?
PostgreSQL 8.0 srm ile , PostgreSQL artk Win2000, WinXP ve Win2003 gibi Microsoft Windows NT tabanl iletim
sistemlerinde doal olarak almaya balamtr. Paketlenmi bir kurulum program, http://pgfoundry.org/projects/pginstaller
adresinden indirilebilir.
Ayrca, http://forge.novell.com adresinde Novell Netware 6 portu bulunmaktadr.
1.5) PostgreSQL'i nereden indirebilirim?
PostgreSQL iin ana anonim ftp sitesi ftp://ftp.PostgreSQL.org/pub adresidir. Yanslar iin, ana web sayfamza
bakabilirsiniz.
1.6) Nereden destek alabilirim?
Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL konusundaki tartmalara aktr. ye olmak iin,
aadaki satrlar e-postanzn body ksmna (konu ksmna deil) yazp, pgsql-general-request@PostgreSQL.org adresine
gnderin:
PostgreSQL iin Ska Sorulan Sorular (SSS)
Son gncelleme : 15 Kasm 2004 Pazartesi - 15:03:23
Current maintainer: Bruce Momjian (pgman@candle.pha.pa.us)
evirenler : Devrim Gndz (devrim@tdmsoft.com)
Nicolai Tufar (ntufar@tdmsoft.com)
Volkan YAZICI (volkany@phreaker.net)
Bu belgenin en gncel hali,
http://www.PostgreSQL.org/docs/faqs/FAQ_turkish.html ve
http://www.gunduz.org/seminer/pg/FAQ_turkish.html adreslerinde
grlebilir.
Platforma zel sorularnz, http://www.PostgreSQL.org/docs/index.html
adresinde yantlanr.
_________________________________________________________________
Genel Sorular
1.1) PostgreSQL nedir? Nasl okunur?
1.2) PostgreSQL'in haklar nedir?
1.3) PostgreSQL, hangi Unix platformlarnda alr?
1.4) Hangi Unix olmayan uyarlamalar bulunmaktadr?
1.5) PostgreSQL'i nereden indirebilirim?
1.6) Destei nereden alabilirim?
1.7) En son srm nedir?
1.8) Hangi belgelere ulaabilirim?
1.9) Bilinen hatalar ya da eksik zelliklere nereden ulasabilirim?
1.10) Nasl SQL renebilirim?
1.11) PostgreSQL 2000 ylna uyumlu mudur?
1.12) Gelitirme takmna nasl katlabilirim??
1.13) Bir hata raporunu nasl gnderebilirim?
1.14) PostgreSQL, dier VTYS(DBMS) lerle nasl karlatrlabilir?
1.15) PostgreSQL'e maddi adan nasl destek olabilirim?
Kullanc/istemci Sorular
2.1) PostgreSQL iin ODBC srcleri var m?
2.2) PostgreSQL'i web sayfalarnda kullanabilmek iin hangi aralar
bulunmaktadr?
2.3) PostgreSQL'in grafik kullanc arabirimi var mdr?
2.4) PostgreSQL ile iletiimi kurabilmek iin hangi dilleri
kullanabilirim?
Ynetimsel Sorular
3.1) PostgreSQL'i /usr/local/pgsql dizininden baka dizinlere nasl
kurabilirim?
3.2) Postmaster' balattmda Bad System Call ya da core dumped
mesaj alyorum. Neden?
3.3) Postmaster' balattmda, IpcMemoryCreate hatas alyorum.
Neden?
3.4) Postmaster', balattmda, IpcSemaphoreCreate hatas alyorum.
Neden?
3.5) Dier bilgisayarlarn benim PostgreSQL veritaban sunucuma
balantlarn nasl kontrol edebilirim?
3.6) Veritaban motorunu daha iyi baarm icin nasl ayarlayabilirim?
3.7) Hangi hata ayklama zellikleri bulunmaktadr?
3.8) Balanmaya alrken, neden "Sorry, too many clients" hatasn
alyorum. Neden?
3.9) pgsql_tmpdizinin iindeki dosyalar nelerdir?
3.10) PostgreSQL srmlerini ykseltmek iin neden bir dump/reload
ilemi gerekletirmek zorundaym?
3.11) Nasl bir donanm kullanmalym?br>
letimsel Sorular
4.1) Binary cursor ve normal cursor arasndaki fark nedr?
4.2) Sorgunun sadece ilk birka satrn nasl SELECT edebilirim?
4.3) psql'in iinde grdgm tablolarn ya da dier eylerin listesini
nasl alabilirim?
4.4) Bir tablodan bir kolonu nasl kaldrabilirim?
4.5) Bir satr, tablo ve veritaban iin en fazla byklk nedir?
4.6) Tipik bir metin dosyasndaki veriyi saklamak iin ne kadar disk
alan gereklidir?
4.7) Veritabannda hangi tablo ya da index'lerin tanmlandn nasl
grebilirim?
4.8) Sorgularm cok yava, ya da index'lerimi kullanmyorlar. Neden?
4.9) Query-optimizer'n sorgularm nasl deerlendirdiini, ileme
soktuunu nasl grebilirim?
4.10) R-tree index nedir?
4.11) Genetic Query Optimizer nedir?
4.12) Dzenli ifade (Regular Expression) aramalarn ve byk/kk
harfe duyarsz aramalar nasl yapabilirim? Bu byk/kk harfe
duyarl aramalar iin index'i nasl kullanabilirim?
4.13) Bir sorguda, bir alann NULL olduunu nasl ortaya
karabilirim?
4.14) esitli karakter tipleri arasndaki farklar nelerdir?
4.15.1) Nasl serial/otomatik artan (auto-incrementing) bir alan
yaratabilirim?
4.15.2) Serial giriinin deerini nasl alabilirim?
4.15.3) currval() ve nextval() dier kullanclara sorun yaratmaz m?
4.15.4) Neden sequence saylarn transaction ileminin iptalinden
sonra yeniden kullanlyor? Neden sequence/SERIAL kolonumdaki
saylarda atlamalar oluyor?
4.16) OID nedir? TID nedir?
4.17) PostgreSQL' de kullanlan baz terimlerin anlamlar nelerdir?
4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasn
alyorum?
4.19) Hangi PostgreSQL srmn alstrdm nasl grebilirim?
4.20) Neden large-object ilemlerim, "invalid large obj descriptor"
hatasn veriyor?
4.21) u andaki zaman ntanml deer olarak kabul eden kolonu nasl
yaratrm?
4.22) Neden IN kullanan subquery'lerim ok yava?
4.23) Outer join ilemini nasl yapabilirim?
4.24) Ayn anda birden fazla veritabannda nasl ilem yapabilirim?
4.25) Bir fonksiyondan nasl oklu satr ya da kolon dndrebilirim?
4.26) Neden Pl/PgSQL fonksiyonlar iinden gvenli bir ekilde tablo
yaratma/kaldrma ilemlerini yapamyoruz?
4.27) Hangi ifreleme seenekleri bulunmaktadr?
PostgreSQL zelliklerini Geniletmek
5.1) Kullanc-tanml bir fonksiyon yazdm. psql'de altrdm
zaman neden core dump ediyor?
5.2) PostgreSQL'e nasl yeni veri tipleri/fonksiyonlar ekleyebilirim?
5.3) Bir tuple dndrmek iin bir C fonksiyonunu nasl yazarm?
5.4) Bir kaynak dosyasnda deiiklik yaptm. Yeniden derlememe ramen
deiiklik geerli olmuyor. Neden?
_________________________________________________________________
Genel Sorular
1.1) PostgreSQL nedir? Nasl okunur?
PostgreSQL, Post-Gres-Q-L. olarak okunur
PostgreSQL, yeni-nesil VTYS aratrma prototipi olan POSTGRES
veritaban ynetim sisteminin gelitirilmesidir. POSTGRES'in zengin
veri tiplerini ve gl veri modelini tutarken, SQL'in gelitirilmi
alt kmesi olan PostQuel dilini kullanr. PostgreSQL cretsizdir ve
kaynak kodu ak datlr.
PostgreSQL, PostgreSQL gelitirme listesine ye olan bir Internet
gelitirici takm tarafndan gelitirilir. u andaki koordinatr,
Marc G. Fournier (scrappy@PostgreSQL.org). (Bu takma nasl
katlacagnz renmek iin 1.6 numaral maddeyi okuyunuz.) Bu takm,
tm PostgreSQL geliiminden sorumludur.
PostgreSQL 1.01 srmnn yazarlar Andrew Yu ve Jolly Chen idi.
Bunlarn dnda bir ka kisi de uyarlama, hata ayklama ve kodun
gelitirilmesi iin alsmt. PostgreSQL'in tredii orijinal
Postgres kodu, lisans, lisansst ve akademisyenler tarafndan,
Professor Michael Stonebraker (University of California, Berkeley)
koordinatrlgnde yazlmtr.
Berkley'deki yazlmn ad Postgres idi. SQL uyumluluu 1995'te
eklenince, ad Postgres 95 oldu. 1996 ylnn sonlarnda ad
PostgreSQL olarak deitirildi.
1.2) PostgreSQL'in haklar nedir?
PostgreSQL Data Base Management System
Portions Copyright (c) 1996-2005, PostgreSQL Global Development Group
Portions Copyright (c) 1994-6 Regents of the University of California
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written
agreement is hereby granted, provided that the above copyright notice
and this paragraph and the following two paragraphs appear in all
copies.
IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY
FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES,
INCLUDING LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND
ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
stteki metin klasik ak-kod lisans olan BSD lisansdr. Kaynak
kodun nasl kullanlabileceine dair snrlamalar yoktur. Bu lisans
seviyoruz. Deitirme niyetimiz bulunmamaktadr.
1.3) PostgreSQL, hangi Unix platforlarnda alr?
Genel olarak, modern bir Unix-uyumlu platform PostgreSQL'i
altracaktr. Ayrntl bilgi iin kurulum belgelerine
bakabilirsiniz.
1.4) Hangi Unix olmayan uyarlamalar bulunmaktadr?
PostgreSQL 8.0 srm ile , PostgreSQL artk Win2000, WinXP ve Win2003
gibi Microsoft Windows NT tabanl iletim sistemlerinde doal olarak
almaya balamtr. Paketlenmi bir kurulum program,
http://pgfoundry.org/projects/pginstaller. adresinden indirilebilir.
Ayrca, http://forge.novell.com adresinde Novell Netware 6 portu
bulunmaktadr.
1.5) PostgreSQL'i nereden indirebilirim?
PostgreSQL iin ana anonim ftp sitesi ftp://ftp.PostgreSQL.org/pub
adresidir. Yanslar iin, ana web sayfamza bakabilirsiniz.
1.6) Nereden destek alabilirim?
Ana e-posta listesi : pgsql-general@PostgreSQL.org. PostgreSQL
konusundaki tartmalara aktr. ye olmak iin, aadaki satrlar
e-postanzn body ksmna (konu ksmna deil) yazp,
pgsql-general-request@PostgreSQL.org adresine gnderin:
subscribe subscribe
end end
Ayn zamanda, bir digest listesi bulunmaktadr. Bu listeye ye olmak iin, pgsql-general-digest-request@PostgreSQL.org Ayn zamanda, bir digest listesi bulunmaktadr. Bu listeye ye olmak
adresine, body ksmnda iin, pgsql-general-digest-request@PostgreSQL.org adresine, body
ksmnda
subscribe subscribe
end end
yazan bir e-posta atmanz yeterli olacaktr. yazan bir e-posta atmanz yeterli olacaktr.
Digest postalar, ana liste 30k civarnda e-postaya ulatnda yelere gnderilmektedir.
Bug'lar iin bir e-posta listesi bulunmaktadr. Bu listeye ye olmak iin, pgsql-bugs-request@PostgreSQL.org adresine, Digest postalar, ana liste 30k civarnda e-postaya ulatnda yelere
body ksmnda gnderilmektedir.
Bug'lar iin bir e-posta listesi bulunmaktadr. Bu listeye ye olmak
iin, pgsql-bugs-request@PostgreSQL.org adresine, body ksmnda
subscribe subscribe
end end
yazan bir e-posta atmanz yeterli olacaktr. yazan bir e-posta atmanz yeterli olacaktr.
Ayn zamanda, gelitiriciler iin tartma listesi bulunmaktadr. Bu listeye ye olmak iin,
pgsql-hackers-request@PostgreSQL.org adresine, body ksmnda
Ayn zamanda, gelitiriciler iin tartma listesi bulunmaktadr. Bu
listeye ye olmak iin, pgsql-hackers-request@PostgreSQL.org adresine,
body ksmnda
subscribe subscribe
end end
yazan bir e-posta atmanz yeterli olacaktr. yazan bir e-posta atmanz yeterli olacaktr.
Bunun dndaki e-posta listelerine ve PostgreSQL hakknda bilgiye, PostgreSQL WWW ana sayfasndan ulasabilirsiniz:
http://www.PostgreSQL.org
Ayn zamanda, EFNet zerinde, #PostgreSQL adl bir IRC kanal bulunmaktadr. Bunun iin, irc -c '#PostgreSQL' "$USER"
irc.phoenix.net Unix komutunu kullanabilirsiniz.
Ticari destek veren firmalarn listesine
http://www.postgresql.org/users-lounge/commercial-support.html Bunun dndaki e-posta listelerine ve PostgreSQL hakknda bilgiye,
PostgreSQL WWW ana sayfasndan ulasabilirsiniz:
http://www.PostgreSQL.org
adresinden ulabilirsiniz. Ayn zamanda, EFNet zerinde, #PostgreSQL adl bir IRC kanal
1.7) En son srm nedir? bulunmaktadr. Bunun iin, irc -c '#PostgreSQL' "$USER"
irc.phoenix.net Unix komutunu kullanabilirsiniz.
PostgreSQL'in son srm 7.4.6'dr. Ticari destek veren firmalarn listesine
Her 6-8 ayda ana srm karlmas planlanmaktadr. http://www.postgresql.org/users-lounge/commercial-support.html
1.8) Hangi belgelere ulaabilirim?
Datmn iinde, kitapklar, kitapk sayfalar ve baz kk rnekler verilmektedir. /doc dizinine baknz. Ayrca, adresinden ulabilirsiniz.
bu el kitapklarn online olarak http://www.PostgreSQL.org/docs/ adresinden inceleyebilirsiniz.
http://www.PostgreSQL.org/docs/awbook.html ve http://www.commandprompt.com/ppbook adreslerinde PostgreSQL kitaplar 1.7) En son srm nedir?
bulunmaktadr. PostgreSQL kitablarnn listesine, http://www.ca.PostgreSQL.org/books/ adresinden ulaaiblirsiniz.
Ayrca, PostgreSQL konusundaki teknik makalelere de http://techdocs.PostgreSQL.org/ adresinden ulaabilirsiniz.
psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar, aggregate'ler, vb. ile ilgili gzel komutlar vardr. PostgreSQL'in son srm 7.4.6'dr.
Web sitemiz daha fazla belgeyi iermektedir. Her 6-8 ayda ana srm karlmas planlanmaktadr.
1.9) Bilinen hatalar ya da eksik zelliklere nereden ulaabilirim?
PostgreSQL SQL-92 uyumluluu iindedir, standartlardan fazla da zellikleri bulunmaktadr. Bilinen hatalar, eksik 1.8) Hangi belgelere ulaabilirim?
zellikler ve gelecek ile ilgili planlar iin TODO listesine baknz.
1.10) Nasl SQL renebilirim?
http:/www.PostgreSQL.org/docs/awbook.html adresindeki kitap SQL gretecektir. http://www.commandprompt.com/ppbook Datmn iinde, kitapklar, kitapk sayfalar ve baz kk
adresinde de bir baska PostgreSQL kitab bulunmaktadr. rnekler verilmektedir. /doc dizinine baknz. Ayrca, bu el
kitapklarn online olarak http://www.PostgreSQL.org/docs/
adresinden inceleyebilirsiniz.
http://www.intermedia.net/support/sql/sqltut.shtm, http://www.PostgreSQL.org/docs/awbook.html ve
http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM http://sqlcourse.com ve http://sqlcourse2.com http://www.commandprompt.com/ppbook adreslerinde PostgreSQL kitaplar
adreslerinde de gzel belgeler bulunmaktadr. bulunmaktadr. PostgreSQL kitablarnn listesine,
http://www.ca.PostgreSQL.org/books/ adresinden ulaaiblirsiniz.
Ayrca, PostgreSQL konusundaki teknik makalelere de
http://techdocs.PostgreSQL.org/ adresinden ulaabilirsiniz.
Bir bakas da, http://members.tripod.com/er4ebus/sql/index.htm adresinde bulunan "Teach Yourself SQL in 21 Days, psql'in, \d ile baslayan veri tipler, operatorler, fonksiyonlar,
Second Edition" kitabdr. aggregate'ler, vb. ile ilgili gzel komutlar vardr.
Baz kullanclarmz da u kitab nermektedirler: "The Practical SQL Handbook, Bowman, Judith S., et Web sitemiz daha fazla belgeyi iermektedir.
al.,Addison-Wesley". Bazlar ise "The Complete Reference SQL, Groff et al., McGraw-Hill" kitabn nermektedirler.
1.11) PostgreSQL 2000 ylna uyumlu mudur?
Evet. 1.9) Bilinen hatalar ya da eksik zelliklere nereden ulaabilirim?
1.12) Gelitirme takmna nasl katlabilirim?
ncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da datmn iindeki PostgreSQL Developer belgesini PostgreSQL SQL-92 uyumluluu iindedir, standartlardan fazla da
okuyun. Ardndan, pgsql-hackers ve pgsql-patches listelerine ye olun. nc olarak da, pgsql-pacthes listesine yksek zellikleri bulunmaktadr. Bilinen hatalar, eksik zellikler ve
kalitede yamalar gnderin. gelecek ile ilgili planlar iin TODO listesine baknz.
PostgreSQL CVS arivine eriim izni olan, 10 kadar gelitirici bulunmaktadr. Hepsi defalarca, dier kiilerin 1.10) Nasl SQL renebilirim?
yaptndan ok daha yksek-kaliteli yamalar gndermilerdir. Ayrca biz de bu gelitiricilerin ekledikleri yamalarn
yksek kalitede olduuna gveniyoruz.
1.13) Bir hata raporunu nasl gnderebilirim?
PostgreSQL BugTool sayfasna gidiniz. O sayfada bir bug bildirmek iin neleri yapmanz gerektii anlatlmtr. http:/www.PostgreSQL.org/docs/awbook.html adresindeki kitap SQL
gretecektir. http://www.commandprompt.com/ppbook adresinde de bir
baska PostgreSQL kitab bulunmaktadr.
Ayrca, ftp://ftp.PostgreSQL.org/pub ftp adresimizde, yeni bir PostgreSQL srm ya da yamas olup olmadni kontrol http://www.intermedia.net/support/sql/sqltut.shtm,
ediniz. http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
1.14) PostgreSQL, diger DBMS'lerle nasl karlastrlabilir? http://sqlcourse.com ve http://sqlcourse2.com adreslerinde de gzel
belgeler bulunmaktadr.
Bir yazlmn gcn lmek iin eitli yollar vardr: Yazlmn zellikleri, baarm, gvenilirlii, destei ve Bir bakas da, http://members.tripod.com/er4ebus/sql/index.htm
creti. adresinde bulunan "Teach Yourself SQL in 21 Days, Second Edition"
kitabdr.
zellikler: Baz kullanclarmz da u kitab nermektedirler: "The Practical SQL
Handbook, Bowman, Judith S., et al.,Addison-Wesley". Bazlar ise "The
Complete Reference SQL, Groff et al., McGraw-Hill" kitabn
nermektedirler.
PostgreSQL mevcut byk ticari veritabanlarnn, transaction, subselect, trigger, view, foreign key referential 1.11) PostgreSQL 2000 ylna uyumlu mudur?
integrity ve sophisticated locking gibi (user-defined types), rules, inheritance ve lock cakmalarn drmek iin
multi-version uyumluluk zellikleri bulunmaktadr.
Performans (Baarm): Evet.
PostgreSQL, dier ticari ve ak kaynak kodlu veritabanlaryla yakn baarm salar. Baz alardan daha hzldr, 1.12) Gelitirme takmna nasl katlabilirim?
dier alardan da yavatr. MySQL ya da daha zayf veritabanlar ile karlatrldnda, INSERT/UPDATE ilemlerinde,
transaction bazl alstmz iin daha yavaz. MySQL, yukardaki "zellikler" ksmnda belirtilenlerden hi birine
sahip deildir. Biz, baarmmz her srmde arttrsak da, esneklik ve gelimi zellikler iin yaplanm durumdayz.
PostgreSQL'i MySQL ile karlatran u web sitesine bakabilirsiniz: http://openacs.org/why-not-mysql.html
Gvenilirlik: ncelikle, en son kaynak kodunu indirin ve web sitemizdeki ya da
datmn iindeki PostgreSQL Developer belgesini okuyun. Ardndan,
pgsql-hackers ve pgsql-patches listelerine ye olun. nc olarak da,
pgsql-pacthes listesine yksek kalitede yamalar gnderin.
DBMS'lerin gvenilir olmas gerketii, yoksa deerleri olmayacan dnyoruz. ok iyi test edilmi, dengeli alsan PostgreSQL CVS arivine eriim izni olan, 10 kadar gelitirici
minimum sayda hata ieren kod sunmaya alyoruz. Her bir srm en az 1 aylk beta testlerinden geirilmektedir. bulunmaktadr. Hepsi defalarca, dier kiilerin yaptndan ok daha
Srm gemiine bakarsanz, retime hazr, dengeli ve kararl kodlar sunduumuzu grebilirsiniz. Bu alanda, dier yksek-kaliteli yamalar gndermilerdir. Ayrca biz de bu
veritaban yazlmlarna stnlmz olduuna inanmaktayz. gelitiricilerin ekledikleri yamalarn yksek kalitede olduuna
gveniyoruz.
Destek: 1.13) Bir hata raporunu nasl gnderebilirim?
E-posta listemiz, oluan herhangi bir sorunu zebilecek byk sayda kullanc ve gelitirici grubunu ierir. PostgreSQL BugTool sayfasna gidiniz. O sayfada bir bug bildirmek iin
Sorununuz iin, en az bir ticari veritaban kadar rahat zm bulabilirsiniz. Gelistiricilere, kullanc grubuna, neleri yapmanz gerektii anlatlmtr.
belgelere ve kaynak koda direk olarak eriebilme, PostgreSQL desteini, dier DBMS'lere gre daha nemli klar.
Gereksinimi olanlara, ticari destek verilebilir. (Destek iin 1.6 blmne baknz.)
Fiyat: Ayrca, ftp://ftp.PostgreSQL.org/pub ftp adresimizde, yeni bir
PostgreSQL srm ya da yamas olup olmadni kontrol ediniz.
Ticari ve ticari olmayan tm kullanmlarnz iin PostgreSQL cretsizdir. Kodumuzu, yukarda belirtilen BSD-stili 1.14) PostgreSQL, diger DBMS'lerle nasl karlastrlabilir?
lisanstaki snrlamalar hari, rnnzn iine ekleyebilirsiniz.
1.15) PostgreSQL'e maddi adan nasl destek olabilirim?
PostgreSQL, 1996 ylndan beri 1. snf altyapya sahiptir. Bunun iin, yllar boyu alp bu altyapy oluturup Bir yazlmn gcn lmek iin eitli yollar vardr: Yazlmn
yneten Marc Fournier'e teekkrler. zellikleri, baarm, gvenilirlii, destei ve creti.
Bir ak kaynak kodlu proje iin, kaliteli altyap ok nemlidir. Bu altyap, projenin kesilmesini nler ve projenin zellikler:
ilerlemesini hzlandrr.
Tabii ki bu altyap ucuz deildir. lerin yrmesi iin eitli ylk ve anlk harcamalarmz olmaktadr. Eer siz ya PostgreSQL mevcut byk ticari veritabanlarnn, transaction,
da irketinizin bu abamza bata bulunabilecek paras varsa, ltfen http://store.pgsql.com adresine gidiniz subselect, trigger, view, foreign key referential integrity ve
ve bata, hibede bulununuz. sophisticated locking gibi (user-defined types), rules, inheritance ve
lock cakmalarn drmek iin multi-version uyumluluk zellikleri
bulunmaktadr.
Web sayfasnn 'PostgreSQL Inc.' den bahsetmesine ramen, "katkda bulunanlar" (contributors) maddesi sadece PostgreSQL Performans (Baarm):
projesini desteklemek iindir ve belirli bir irketin para kayna deildir. isterseniz, balant adresine bir ek
gnderebilirsiniz.
Kullanc/stemci Sorular
2.1) PostgreSQL icin ODBC srcleri var m?
iki tane ODBC srcs bulunmaktadr: PsqlODBC ve OpenLink ODBC. PostgreSQL, dier ticari ve ak kaynak kodlu veritabanlaryla yakn
baarm salar. Baz alardan daha hzldr, dier alardan da
yavatr. MySQL ya da daha zayf veritabanlar ile
karlatrldnda, INSERT/UPDATE ilemlerinde, transaction bazl
alstmz iin daha yavaz. MySQL, yukardaki "zellikler"
ksmnda belirtilenlerden hi birine sahip deildir. Biz, baarmmz
her srmde arttrsak da, esneklik ve gelimi zellikler iin
yaplanm durumdayz. PostgreSQL'i MySQL ile karlatran u web
sitesine bakabilirsiniz: http://openacs.org/why-not-mysql.html
PsqlODBC'i http://gborg.postgresql.org/project/psqlodbc/projdisplay.php adresinden indirebilirsiniz. Gvenilirlik:
OpenLink ODBC http://www.openlinksw.com adresinden alnabilir.Bu src, kendi standart ODBC istemci yazlm ile DBMS'lerin gvenilir olmas gerketii, yoksa deerleri olmayacan
alstndan, destekledikleri her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC bulunmalidir. dnyoruz. ok iyi test edilmi, dengeli alsan minimum sayda hata
ieren kod sunmaya alyoruz. Her bir srm en az 1 aylk beta
testlerinden geirilmektedir. Srm gemiine bakarsanz, retime
hazr, dengeli ve kararl kodlar sunduumuzu grebilirsiniz. Bu
alanda, dier veritaban yazlmlarna stnlmz olduuna
inanmaktayz.
cretsiz srm olmakla beraber, ticari kalitede destek almak isteyenlere satmak isteyeceklerdir. Sorularnz ltfen Destek:
postgres95@openlink.co.uk adresine gnderiniz.
2.2) PostgreSQL'i web sayfalarnda kullanabilmek iin hangi aralar bulunmaktadr?
http://www.webreview.com/ adresinde, arka planda veritaban alstran Web sayfalar iin giri seviyesinde bilgi E-posta listemiz, oluan herhangi bir sorunu zebilecek byk sayda
bulunmaktadr. kullanc ve gelitirici grubunu ierir. Sorununuz iin, en az bir
ticari veritaban kadar rahat zm bulabilirsiniz. Gelistiricilere,
kullanc grubuna, belgelere ve kaynak koda direk olarak eriebilme,
PostgreSQL desteini, dier DBMS'lere gre daha nemli klar.
Gereksinimi olanlara, ticari destek verilebilir. (Destek iin 1.6
blmne baknz.)
Web ile btnleme iin, PHP () mkemmel bir arabirim sunar. Fiyat:
Karmak sorunlar iin, ou kisi Perl arabirimini ve CGI.pm ya da mod_perl kullanr. Ticari ve ticari olmayan tm kullanmlarnz iin PostgreSQL
2.3) PostgreSQL'in grafik kullanc arabirimi var mdr? cretsizdir. Kodumuzu, yukarda belirtilen BSD-stili lisanstaki
snrlamalar hari, rnnzn iine ekleyebilirsiniz.
eitli grafik arabirimlerimiz bulunmaktadr. Bunlarn arasnda, PgAccess (http://www.pgaccess.org/), PgAdmin II 1.15) PostgreSQL'e maddi adan nasl destek olabilirim?
(http://www.pgadmin.org/, sadece Win32 iin), RHDB Admin (http://sources.redhat.com/rhdb/) ve Rekall
(http://www.thekompany.com/products/rekall/) bulunmaktadr. Ayrca, PostgreSQL iin web tabanl bir arabirim olan
PHPPgAdmin (http://phppgadmin.sourceforge.net/) bulunmaktadr.
Daha ayrntl liste iin http://techdocs.postgresql.org/guides/GUITools adresine bakabilirsiniz. PostgreSQL, 1996 ylndan beri 1. snf altyapya sahiptir. Bunun
2.4) PostgreSQL ile iletiimi kurabilmek iin hangi dilleri kullanabilirim? iin, yllar boyu alp bu altyapy oluturup yneten Marc
Fournier'e teekkrler.
* C (libpq) Bir ak kaynak kodlu proje iin, kaliteli altyap ok nemlidir. Bu
* Embedded C (ecpg) altyap, projenin kesilmesini nler ve projenin ilerlemesini
* Java (jdbc) hzlandrr.
* Python (PyGreSQL)
* TCL (libpgtcl)
Dierleri iin, http://gborg.postgresql.org adresindeki Drivers/Interfaces blmne bakabilirsiniz. Tabii ki bu altyap ucuz deildir. lerin yrmesi iin eitli ylk
Ynetimsel Sorular ve anlk harcamalarmz olmaktadr. Eer siz ya da irketinizin bu
3.1) PostgreSQL'i, /usr/local/pgsql dizininden baka dizinlere nasl kurabilirim? abamza bata bulunabilecek paras varsa, ltfen
http://store.pgsql.com/ adresine gidiniz ve bata, hibede bulununuz.
configure betiini alstrrken, --prefix seeneini veriniz. Web sayfasnn 'PostgreSQL Inc.' den bahsetmesine ramen, "katkda
3.2) postmaster'i baslattgmda, a Bad System Call ya da core dumped mesaj alyorum. Neden? bulunanlar" (contributors) maddesi sadece PostgreSQL projesini
desteklemek iindir ve belirli bir irketin para kayna deildir.
isterseniz, balant adresine bir ek gnderebilirsiniz.
_________________________________________________________________
Bunun birok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey, ekirdeginize System V uzantlarnn kurulu olup Kullanc/stemci Sorular
olmadgn kontrol etmek olabilir. PostgreSQL shared memory ve semaphores iin ekirdek destegine gereksinim duyar.
3.3) postmaster'i balattmda, pcMemoryCreate hatas alyorum. Neden?
Ya ekirdeinizde shared memory desteiniz dzgnce yaplandrlmamtr, ya da ekirdeinizdeki mevcut shared memory 2.1) PostgreSQL icin ODBC srcleri var m?
miktarn bytmeniz gerekecektir. Gereksinim duyacanz miktar, mimarinize ve postmaster iin ayarladgnz tampon
ile backend ilemi saysna baldr. Tm sistemler iin, tamponlar ve ilemlerde ntanml saylarla, ~ 1MB kadar yere
gereksinmeniz olacaktr. PostgreSQL 7.3.2 Sistem Yneticileri Rehberi'ne, shared memory ve semaphorelar hakkndaki
ayrntl bilgi iin bakabilirsiniz.
3.4) postmaster' balattmda, pcSemaphoreCreate hatas alyorum. Neden?
Eer hata, "pcSemaphoreCreate: semget failed (No space left on device)" ise, ekirdeiniz yeterli semaphore ile iki tane ODBC srcs bulunmaktadr: PsqlODBC ve OpenLink ODBC.
yaplandrlmam demektir. Postgres, her bir potansiyel backend iin bir semaphore gereksinimi duyar. Geici bir
zm, postmaster backend ilemleri iin daha az miktarda snrla balatmak olabilir. -N'i varsaylan deer olan
32'den kk bir deerle balatnz. Daha kalc bir zm, ekirdeinizin SEMMNS ve SEMMNI parametrelerini ykseltmek
olacaktr.
almayan semaphore'lar ar veritaban ilemlerinde kme yaratabilirler. PsqlODBC'i
http://gborg.postgresql.org/project/psqlodbc/projdisplay.php
adresinden indirebilirsiniz.
Eer hata mesajnz baka bir ey ise, ekirdeinizde semaphore desteini yaplandrmam olabilirsiniz. Shared memory OpenLink ODBC http://www.openlinksw.com adresinden alnabilir.Bu
ve semaphore'lar hakkndaki daha ayrntl bilgi iin PostgreSQL 7.3.2 Sistem Yneticileri Rehberi'ne bakabilirsiniz. src, kendi standart ODBC istemci yazlm ile alstndan,
3.5) Diger bilgisayarlarn benim PostgreSQL veritaban sunucuma balantlarn nasl kontrol edebilirim? destekledikleri her platformda (Win, Mac, Unix, VMS) PostgreSQL ODBC
bulunmalidir.
n tanml olarak, PostgreSQL sadece yerel makineden Unix domain sockets kullanarak balanlmasna izin verir. Diger cretsiz srm olmakla beraber, ticari kalitede destek almak
makineler, postmaster'a -i etiketini geirmezseniz ve $PGDATA/pg_hba.conf dosyasn dzenleyerek host-based isteyenlere satmak isteyeceklerdir. Sorularnz ltfen
authentication'a olanak vermezseniz, balant yapamayacaklardr. postgres95@openlink.co.uk adresine gnderiniz.
3.6) Veritabani motorunu daha iyi baarm iin nasl ayarlayabilirim?
Index'ler sorgular hzlandrabilir. EXPLAIN komutu, PostgreSQL'in sorgunuzu nasl yorumladn ve hangi index'leri 2.2) PostgreSQL'i web sayfalarnda kullanabilmek iin hangi aralar
kullandn grmenize izin verir. bulunmaktadr?
Eer cok fazla INSERT ilemi yapyorsanz, bunlar byk bir toplu ilem dosyaskullanp COPY komutu ile veritabanna http://www.webreview.com/ adresinde, arka planda veritaban alstran
girmeyi deneyiniz. Bu, tekil INSERT'lerden daha hzldr. kinci olarak, BEGIN WORK/COMMIT transaction blou iinde Web sayfalar iin giri seviyesinde bilgi bulunmaktadr.
olmayan ifadeler kendi transaction'larndaym gibi dnlr. oklu ifadeleri tek bir transaction blou iinde
yapabilirsiniz. Bu, transaction overhead'ini drecektir. Tek bir transaction blou iinde birden ok ifadeyi
altrmay deneyebilirsiniz. Bu da ayn ekilde, transaction overhead'ini drr.
eitli ayarlama seenekleri mevcuttur. fsync() ilemini, postmaster' -o -F seenei ile balatarak devre d Web ile btnleme iin, PHP () mkemmel bir arabirim sunar.
brakabilirsiniz. Bu ilem, fsync()'lerin her transactiondan sonra diski flush etmesini engelleyecektir.
Ayn zamanda, postmaster'i -B seenei ile balatp, backend ilemleri tarafndan kullanlan shared memory buffers Karmak sorunlar iin, ou kisi Perl arabirimini ve CGI.pm ya da
saylarn arttrabilirsiniz. Eer bu parametreyi ok yksek tutarsanz, ekirdeinizin shared memory blgesindeki mod_perl kullanr.
limiti ama olaslnz yznden postmaster balayamayabilir. Her bir tampon (buffer) 8K'dr. ntanml say ise 64
tampondur.
Ayn ekilde, backend'in -S seeneini geici sralamalar iin backend sreleri tarafndan kullanlacak hafzay 2.3) PostgreSQL'in grafik kullanc arabirimi var mdr?
arttrmak amacyla kullanabilirsiniz. -S seenei kilobayt cinsinden deer alr ve n tanml deeri 512'dir (512 K)
Tablolardaki veriyi bir index'e elemek amacyla gruplama iin CLUSTER komutunu kullanabilirsiniz. Ayrntl bilgi iin eitli grafik arabirimlerimiz bulunmaktadr. Bunlarn arasnda,
CLUSTER komutunun yardm sayfasna bakabilirsiniz. PgAccess (http://www.pgaccess.org/), PgAdmin II
3.7) Hangi hata ayklama zellikleri bulunmaktadr? (http://www.pgadmin.org/, sadece Win32 iin), RHDB Admin
(http://sources.redhat.com/rhdb/) ve Rekall
(http://www.thekompany.com/products/rekall/) bulunmaktadr. Ayrca,
PostgreSQL iin web tabanl bir arabirim olan PHPPgAdmin
(http://phppgadmin.sourceforge.net/) bulunmaktadr.
PostgreSQL, hata ayklama amacyla kullanlabilecek durum bilgisi rapor eden eitli zeliklere sahiptir. Daha ayrntl liste iin
http://techdocs.postgresql.org/guides/GUITools adresine
bakabilirsiniz.
ncelikle, configure betiini --enable-cassert seeneiyle altrrsanz, bir ok assert() backend calmasn 2.4) PostgreSQL ile iletiimi kurabilmek iin hangi dilleri kullanabilirim?
gzlemler ve beklenmeyen bir durumda program durdurur.
Postmaster ve postgres eitli hata ayklama seeneklerine sahiptir. ncelikle, postmaster' balattnzda, standart * C (libpq)
kty ve hatalar bir log dosyasna ynlendirdiinize emin olun: * Embedded C (ecpg)
* Java (jdbc)
* Python (PyGreSQL)
* TCL (libpgtcl)
Dierleri iin, http://gborg.postgresql.org adresindeki
Drivers/Interfaces blmne bakabilirsiniz.
_________________________________________________________________
Ynetimsel Sorular
3.1) PostgreSQL'i, /usr/local/pgsql dizininden baka dizinlere nasl
kurabilirim?
configure betiini alstrrken, --prefix seeneini veriniz.
3.2) postmaster'i baslattgmda, a Bad System Call ya da core dumped mesaj
alyorum. Neden?
Bunun birok nedeni olabilir. Ancak ilk kontrol edilmesi gereken sey,
ekirdeginize System V uzantlarnn kurulu olup olmadgn kontrol
etmek olabilir. PostgreSQL shared memory ve semaphores iin ekirdek
destegine gereksinim duyar.
3.3) postmaster'i balattmda, pcMemoryCreate hatas alyorum. Neden?
Ya ekirdeinizde shared memory desteiniz dzgnce
yaplandrlmamtr, ya da ekirdeinizdeki mevcut shared memory
miktarn bytmeniz gerekecektir. Gereksinim duyacanz miktar,
mimarinize ve postmaster iin ayarladgnz tampon ile backend ilemi
saysna baldr. Tm sistemler iin, tamponlar ve ilemlerde
ntanml saylarla, ~ 1MB kadar yere gereksinmeniz olacaktr.
PostgreSQL 7.3.2 Sistem Yneticileri Rehberi'ne, shared memory ve
semaphorelar hakkndaki ayrntl bilgi iin bakabilirsiniz.
3.4) postmaster' balattmda, pcSemaphoreCreate hatas alyorum. Neden?
Eer hata, "pcSemaphoreCreate: semget failed (No space left on
device)" ise, ekirdeiniz yeterli semaphore ile yaplandrlmam
demektir. Postgres, her bir potansiyel backend iin bir semaphore
gereksinimi duyar. Geici bir zm, postmaster backend ilemleri
iin daha az miktarda snrla balatmak olabilir. -N'i varsaylan
deer olan 32'den kk bir deerle balatnz. Daha kalc bir zm,
ekirdeinizin SEMMNS ve SEMMNI parametrelerini ykseltmek olacaktr.
almayan semaphore'lar ar veritaban ilemlerinde kme
yaratabilirler.
Eer hata mesajnz baka bir ey ise, ekirdeinizde semaphore
desteini yaplandrmam olabilirsiniz. Shared memory ve
semaphore'lar hakkndaki daha ayrntl bilgi iin PostgreSQL 7.3.2
Sistem Yneticileri Rehberi'ne bakabilirsiniz.
3.5) Diger bilgisayarlarn benim PostgreSQL veritaban sunucuma
balantlarn nasl kontrol edebilirim?
n tanml olarak, PostgreSQL sadece yerel makineden Unix domain
sockets kullanarak balanlmasna izin verir. Diger makineler,
postmaster'a -i etiketini geirmezseniz ve $PGDATA/pg_hba.conf
dosyasn dzenleyerek host-based authentication'a olanak vermezseniz,
balant yapamayacaklardr.
3.6) Veritabani motorunu daha iyi baarm iin nasl ayarlayabilirim?
Index'ler sorgular hzlandrabilir. EXPLAIN komutu, PostgreSQL'in
sorgunuzu nasl yorumladn ve hangi index'leri kullandn
grmenize izin verir.
Eer cok fazla INSERT ilemi yapyorsanz, bunlar byk bir toplu
ilem dosyaskullanp COPY komutu ile veritabanna girmeyi deneyiniz.
Bu, tekil INSERT'lerden daha hzldr. kinci olarak, BEGIN
WORK/COMMIT transaction blou iinde olmayan ifadeler kendi
transaction'larndaym gibi dnlr. oklu ifadeleri tek bir
transaction blou iinde yapabilirsiniz. Bu, transaction overhead'ini
drecektir. Tek bir transaction blou iinde birden ok ifadeyi
altrmay deneyebilirsiniz. Bu da ayn ekilde, transaction
overhead'ini drr.
eitli ayarlama seenekleri mevcuttur. fsync() ilemini, postmaster'
-o -F seenei ile balatarak devre d brakabilirsiniz. Bu ilem,
fsync()'lerin her transactiondan sonra diski flush etmesini
engelleyecektir.
Ayn zamanda, postmaster'i -B seenei ile balatp, backend ilemleri
tarafndan kullanlan shared memory buffers saylarn
arttrabilirsiniz. Eer bu parametreyi ok yksek tutarsanz,
ekirdeinizin shared memory blgesindeki limiti ama olaslnz
yznden postmaster balayamayabilir. Her bir tampon (buffer) 8K'dr.
ntanml say ise 64 tampondur.
Ayn ekilde, backend'in -S seeneini geici sralamalar iin backend
sreleri tarafndan kullanlacak hafzay arttrmak amacyla
kullanabilirsiniz. -S seenei kilobayt cinsinden deer alr ve n
tanml deeri 512'dir (512 K)
Tablolardaki veriyi bir index'e elemek amacyla gruplama iin CLUSTER
komutunu kullanabilirsiniz. Ayrntl bilgi iin CLUSTER komutunun
yardm sayfasna bakabilirsiniz.
3.7) Hangi hata ayklama zellikleri bulunmaktadr?
PostgreSQL, hata ayklama amacyla kullanlabilecek durum bilgisi
rapor eden eitli zeliklere sahiptir.
ncelikle, configure betiini --enable-cassert seeneiyle
altrrsanz, bir ok assert() backend calmasn gzlemler ve
beklenmeyen bir durumda program durdurur.
Postmaster ve postgres eitli hata ayklama seeneklerine sahiptir.
ncelikle, postmaster' balattnzda, standart kty ve hatalar
bir log dosyasna ynlendirdiinize emin olun:
cd /usr/local/pgsql cd /usr/local/pgsql
./bin/postmaster >server.log 2>&1 & ./bin/postmaster >server.log 2>&1 &
Bu ilem PostgreSQL ana dizinine server.log dosyas yerletirecektir. Bu dosya sunucunun yaad sorunlar ya da Bu ilem PostgreSQL ana dizinine server.log dosyas yerletirecektir.
hatalar hakknda yararl bilgiler ierir. -d seenei, hata ayklama seviyesini belirten bir rakam ile kullanlr. Bu dosya sunucunun yaad sorunlar ya da hatalar hakknda yararl
Yksek hata ayklama seviyelerinin byk log dosyalar oluturacan unutmaynz. bilgiler ierir. -d seenei, hata ayklama seviyesini belirten bir
rakam ile kullanlr. Yksek hata ayklama seviyelerinin byk log
Eer postmaster almyorsa, postgres backend'ini komut satrndan altrabilir ve SQL ifadenizi direk olarak dosyalar oluturacan unutmaynz.
yazabilirsiniz. Bu sadece hata ayklama amacyla nerilir. Burada, noktal virgln deil de yeni bir satrn sorguyu
sonlandrdn unutmaynz. Eer hata ayklama sembolleri ile derlediyseniz, ne olduunu grmek iin bir hata Eer postmaster almyorsa, postgres backend'ini komut satrndan
ayklayc kullanabilirsiniz. backend postmaster'dan balatlmadndan, edeer bir ortamda almamaktadr ve altrabilir ve SQL ifadenizi direk olarak yazabilirsiniz. Bu sadece
locking/backend etkileim sorunlar artabilir. hata ayklama amacyla nerilir. Burada, noktal virgln deil de
yeni bir satrn sorguyu sonlandrdn unutmaynz. Eer hata
Eer postmaster alyorsa, bir pencerede psql'i altrn ve psql tarafndan kullanlan postgres srecinin sre ayklama sembolleri ile derlediyseniz, ne olduunu grmek iin bir
numarasn (PID) bulun. Postgres sreci ile ilikilendirmek iin bir hata ayklarc kullann. Sorgular psql aracl hata ayklayc kullanabilirsiniz. backend postmaster'dan
ile altrabilirsiniz. Eer postgres balangcnda hata ayklamak istiyorsanz, PGOPTIONS="-W n" seeneini balatlmadndan, edeer bir ortamda almamaktadr ve
ayarlayabilir ve psql'i balatabilirsiniz. Bu ilem, balangcn n saniye kadar gecikmesini salayacaktr; bylece hata locking/backend etkileim sorunlar artabilir.
ayklaycy srece ilikilendirdikten sonra balang srecinin devam etmesini salayabilirsiniz.
Eer postmaster alyorsa, bir pencerede psql'i altrn ve psql
postgres program hata ayklama ve baarm lmleri iin -s, -A ve -t seeneklerine sahiptir. tarafndan kullanlan postgres srecinin sre numarasn (PID) bulun.
3.8) Balanmaya alrken, neden "Sorry, too many clients" hatasn alyorum? Postgres sreci ile ilikilendirmek iin bir hata ayklarc kullann.
Sorgular psql aracl ile altrabilirsiniz. Eer postgres
Postmaster'n ezamanl olarak balatabilecei backend sreleri snrlarn arttrmanz gerekmektedir. balangcnda hata ayklamak istiyorsanz, PGOPTIONS="-W n" seeneini
ayarlayabilir ve psql'i balatabilirsiniz. Bu ilem, balangcn n
n tanml deer 32 sretir. Bunu, postmaster' uygun -N deeri ile ya da postgresql.conf dosyasn dzenleyerek saniye kadar gecikmesini salayacaktr; bylece hata ayklaycy
yeniden balatmakla arttrabilirsiniz. srece ilikilendirdikten sonra balang srecinin devam etmesini
salayabilirsiniz.
Eer -N deerini 32'den byk yapacaksanz, ayn zamanda -B deerini de deitirmeniz gerektiini unutmayn. -B, -N'nin
en az 2 kat kadar olmaldr; daha iyi baarm iin bu sayy daha da arttrmalsnz. Yksek saydaki backend postgres program hata ayklama ve baarm lmleri iin -s, -A ve -t
sreleri iin, eitli ekirdek yaplandrma parametrelerini arttrmanz gerekecektir. Yaplmas gerekenler, SHMMAX, seeneklerine sahiptir.
SEMMNS, SEMMNI, NPROC, MAXUPRC ve alabilecek dosyalarn maksimum says olan NFILE ve NINODE deerlerini
kartrmaktr. Bunun nedeni, PostgreSQL'in izin verilen backend srelerinin says zerinde bir snr olmasdr. 3.8) Balanmaya alrken, neden "Sorry, too many clients" hatasn
Bylelikle sistem kaynaklarnn dna klmayacaktr. alyorum?
PostgreSQL'in 6.5 srmne kadar, en fazla backend says 64 idi ve bunu deitirmek iin include/storage/sinvaladt.h Postmaster'n ezamanl olarak balatabilecei backend sreleri
dosyas iindeki MaxBAckendid sabitini deitirdek sonra yazlm yeniden derlemek gerekiyordu. snrlarn arttrmanz gerekmektedir.
3.9) pgsql_tmp dizinin iindeki dosyalar nelerdir?
n tanml deer 32 sretir. Bunu, postmaster' uygun -N deeri ile
Sorgu alstrc (query executer) tarafndan yaratlan geici dosyalardr. rnegin, bir sralama ORDER BY ile ya da postgresql.conf dosyasn dzenleyerek yeniden balatmakla
yaplacaksa ve sralama backend'in -s parametresinin izin verdiinden daha fazla alana gereksinim duyuyorsa, ekstra arttrabilirsiniz.
veriyi tutmak iin geici dosyalar yaratlr.
Eer -N deerini 32'den byk yapacaksanz, ayn zamanda -B deerini
Geici dosyalar, eer sralama srasnda backend gmezse otomatik olarak silinecektir. Eer alan durumda bir de deitirmeniz gerektiini unutmayn. -B, -N'nin en az 2 kat kadar
backend'iniz yoksa, pg_tempNNN.NN dosyalarn silmeniz gvenlidir. olmaldr; daha iyi baarm iin bu sayy daha da arttrmalsnz.
3.10) PostgreSQL srmlerini ykseltmek iin neden bir dump/reload ilemi gerekletirmek zorundaym? Yksek saydaki backend sreleri iin, eitli ekirdek yaplandrma
parametrelerini arttrmanz gerekecektir. Yaplmas gerekenler,
PostgreSQL takm ara srmlerde sadece kk deiiklikler yapmaktadr; bu yzden 7.2 srmnden 7.2.1'e ykseltmek SHMMAX, SEMMNS, SEMMNI, NPROC, MAXUPRC ve alabilecek dosyalarn
dump/restore ilemi gerekmemektedir. Ancak, esas srmlerde (rnek: 7.2'den 7.3'e) ounlukla sistem tablolarnn ve maksimum says olan NFILE ve NINODE deerlerini kartrmaktr. Bunun
veri dosyalarnn i yaps deitirilir. Bu deiiklikler ounlukla karmaktr; dolaysyla veri dosyalarnn geriye nedeni, PostgreSQL'in izin verilen backend srelerinin says
dnk uyumluluu ilemlerini yapmyoruz. Dump ilemi, veriyi genel biimde alacandan yeniden ykleme esnasnda veri, zerinde bir snr olmasdr. Bylelikle sistem kaynaklarnn dna
yeni i biime uygun ekilde yerletirilecektir. klmayacaktr.
Disk biiminin deimedii srmlerde, pg_upgrade betii gncellemenin bir dump/restore gerektirmeden yaplmasn PostgreSQL'in 6.5 srmne kadar, en fazla backend says 64 idi ve
salayacaktr. pg_upgrade betiinin o srm iin bulunup bulunmadn srm notlar iinde bulabilirsiniz. bunu deitirmek iin include/storage/sinvaladt.h dosyas iindeki
3.11) Nasl bir donanm kullanmalym? MaxBAckendid sabitini deitirdek sonra yazlm yeniden derlemek
gerekiyordu.
PC donanm tamamen uyumlu olduu iin, insanlar tm PC donanmlarnn ayn kalitede olduunu dnrler. Oysa byle
deildir. ECC RAM, SCSI ve kaliteli anakartlar daha ucuz donanmlara gre daha ok gvenilirlerdir ve baarmlar daha 3.9) pgsql_tmp dizinin iindeki dosyalar nelerdir?
yksektir. PostgreSQL hemen hemen tm donanmda alabilmektedir, ancak gvenilirlik ve baarm nemli ise donanm
seeneklerini ok iyi aratrmak gereklidir. E-posta listelerimi donanmlarla ilgili sorular ve de ticaret iin Sorgu alstrc (query executer) tarafndan yaratlan geici
kullanlabilir. dosyalardr. rnegin, bir sralama ORDER BY ile yaplacaksa ve
letimsel Sorular sralama backend'in -s parametresinin izin verdiinden daha fazla
4.1) Binary cursor ve normal cursor arasndaki fark nedir? alana gereksinim duyuyorsa, ekstra veriyi tutmak iin geici dosyalar
yaratlr.
DECLARE yardm sayfasna baknz.
4.2) Sorgunun sadece ilk birka satrn nasl SELECT edebilirim? Geici dosyalar, eer sralama srasnda backend gmezse otomatik
olarak silinecektir. Eer alan durumda bir backend'iniz yoksa,
FETCH yardm sayfasna baknz, ya da SELECT ... LIMIT ... kullannz. pg_tempNNN.NN dosyalarn silmeniz gvenlidir.
lk birka satr almak isteseniz bile, tm sorgu deerlendirilmek durumunda kalnabilir. ORDER BY ieren bir sorgu 3.10) PostgreSQL srmlerini ykseltmek iin neden bir dump/reload ilemi
dnn. Eer ORDER BY ie eleen bir index varsa, PostgreSQL istenen ilk birka satr ileyebilir, ya da tm sorgu gerekletirmek zorundaym?
istenen satrlar retilene kadar ilenebilir.
4.3) psql'in iinde grdgm tablolarn ya da dier eylerin listesini nasl alabilirim? PostgreSQL takm ara srmlerde sadece kk deiiklikler
yapmaktadr; bu yzden 7.2 srmnden 7.2.1'e ykseltmek dump/restore
pgsql/src/bin/psql/describe.c iindeki psql kaynak kodunu okuyabilirsiniz. Bu kod, psql'in \ ile balayan komutlarnn ilemi gerekmemektedir. Ancak, esas srmlerde (rnek: 7.2'den 7.3'e)
ktsn olusturan SQL komutlarn ierir. Ayn zamanda, psql'i -E seenei ile balatp, verdiiniz komutlar ounlukla sistem tablolarnn ve veri dosyalarnn i yaps
altrmak iin yapt sorgularn ktlarn grebilirsiniz. deitirilir. Bu deiiklikler ounlukla karmaktr; dolaysyla
4.4) Bir tablodan bir kolonu nasl kaldrabilirim? veri dosyalarnn geriye dnk uyumluluu ilemlerini yapmyoruz. Dump
ilemi, veriyi genel biimde alacandan yeniden ykleme esnasnda
Bu zellik (ALTER TABLE DROP COLUMN) 7.3 srm ile gelmitir. Eski srmlerde aadakileri uygulamalsnz: veri, yeni i biime uygun ekilde yerletirilecektir.
Disk biiminin deimedii srmlerde, pg_upgrade betii gncellemenin
bir dump/restore gerektirmeden yaplmasn salayacaktr. pg_upgrade
betiinin o srm iin bulunup bulunmadn srm notlar iinde
bulabilirsiniz.
3.11) Nasl bir donanm kullanmalym?
PC donanm tamamen uyumlu olduu iin, insanlar tm PC donanmlarnn
ayn kalitede olduunu dnrler. Oysa byle deildir. ECC RAM, SCSI
ve kaliteli anakartlar daha ucuz donanmlara gre daha ok
gvenilirlerdir ve baarmlar daha yksektir. PostgreSQL hemen hemen
tm donanmda alabilmektedir, ancak gvenilirlik ve baarm nemli
ise donanm seeneklerini ok iyi aratrmak gereklidir. E-posta
listelerimi donanmlarla ilgili sorular ve de ticaret iin
kullanlabilir.
_________________________________________________________________
letimsel Sorular
4.1) Binary cursor ve normal cursor arasndaki fark nedir?
DECLARE yardm sayfasna baknz.
4.2) Sorgunun sadece ilk birka satrn nasl SELECT edebilirim?
FETCH yardm sayfasna baknz, ya da SELECT ... LIMIT ... kullannz.
lk birka satr almak isteseniz bile, tm sorgu deerlendirilmek
durumunda kalnabilir. ORDER BY ieren bir sorgu dnn. Eer ORDER
BY ie eleen bir index varsa, PostgreSQL istenen ilk birka satr
ileyebilir, ya da tm sorgu istenen satrlar retilene kadar
ilenebilir.
4.3) psql'in iinde grdgm tablolarn ya da dier eylerin listesini
nasl alabilirim?
pgsql/src/bin/psql/describe.c iindeki psql kaynak kodunu
okuyabilirsiniz. Bu kod, psql'in \ ile balayan komutlarnn ktsn
olusturan SQL komutlarn ierir. Ayn zamanda, psql'i -E seenei ile
balatp, verdiiniz komutlar altrmak iin yapt sorgularn
ktlarn grebilirsiniz.
4.4) Bir tablodan bir kolonu nasl kaldrabilirim?
Bu zellik (ALTER TABLE DROP COLUMN) 7.3 srm ile gelmitir. Eski
srmlerde aadakileri uygulamalsnz:
BEGIN; BEGIN;
LOCK TABLE old_table; LOCK TABLE old_table;
SELECT ... -- select all columns but the one you want to remove SELECT ... -- select all columns but the one you want to remove
...@@ -484,57 +694,56 @@ DROP TABLE old_table; ...@@ -484,57 +694,56 @@ DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table; ALTER TABLE new_table RENAME TO old_table;
COMMIT; COMMIT;
4.5) Bir satr, tablo ve veritaban iin en fazla byklk nedir?
4.5) Bir satr, tablo ve veritaban iin en fazla byklk nedir?
Snrlar:
Snrlar:
Veritaban iin en fazla byklk nedir?
Veritaban iin en fazla byklk nedir? Snrsz (32 TB'lk veritaban bulunmaktadr)
Snrsz (32 TB'lk veritaban bulunmaktadr) Bir tablo iin en fazla byklk nedir?
32 TB
Bir tablo iin en fazla byklk nedir? Bir satr iin en fazla byklk nedir?
32 TB 1.6 TB
Bir alan iin en fazla byklk nedir?
Bir satr iin en fazla byklk nedir? 1 GB
1.6 TB Tabloda en fazla satr says katr?
Snrsz
Bir alan iin en fazla byklk nedir? Bir tabloda olabilecek en fazla kolon says katr?
1 GB Kolon tiplerine bal olarak 250-1600
Bir tabloda olabilecek en fazla index says katr?
Tabloda en fazla satr says katr? Snrsz
Snrsz
Tabii ki bunlar aslnda snrsz degildir. Burada belirtilen snrlar,
Bir tabloda olabilecek en fazla kolon says katr? fiziksel snrlarn haricindeki snrlardr. Bo disk alan,
Kolon tiplerine bal olarak 250-1600 hafza/takas alan na bal snrlamalar vardr. Baarm, snr
deerlere yaklatka, ya da deerler ok byk olduunda debilir.
Bir tabloda olabilecek en fazla index says katr?
Snrsz Bir tablo iin byklk snr olan 32 TB, iletim sisteminin byk
dosya destei olup olmamasndan bamszdr. Byk tablolar, 1 GB'lik
Tabii ki bunlar aslnda snrsz degildir. Burada belirtilen snrlar, fiziksel snrlarn haricindeki snrlardr. Bo dosyalarda sakland iin, dosya sistemi snrlarnin bir nemi
disk alan, hafza/takas alan na bal snrlamalar vardr. Baarm, snr deerlere yaklatka, ya da deerler ok yoktur.
byk olduunda debilir.
Tablo ve kolon says byklkleri, n tanml blok bykl 32k ya
Bir tablo iin byklk snr olan 32 TB, iletim sisteminin byk dosya destei olup olmamasndan bamszdr. Byk karlarak arttrlabilir.
tablolar, 1 GB'lik dosyalarda sakland iin, dosya sistemi snrlarnin bir nemi yoktur.
4.6) Tipik bir metin dosyasndaki veriyi saklamak iin ne kadar disk alan
Tablo ve kolon says byklkleri, n tanml blok bykl 32k ya karlarak arttrlabilir. gereklidir?
4.6) Tipik bir metin dosyasndaki veriyi saklamak iin ne kadar disk alan gereklidir?
Bir PostgreSQL veritaban, veriyi "flat" metin dosyasnda saklamak
Bir PostgreSQL veritaban, veriyi "flat" metin dosyasnda saklamak iin gereken alann 5 kat fazla disk alanna iin gereken alann 5 kat fazla disk alanna gereksinim duyabilir.
gereksinim duyabilir.
Her satrnda bir tamsay ve metin (text) ieren, 100.000 satrlk bir
Her satrnda bir tamsay ve metin (text) ieren, 100.000 satrlk bir dosya dnn. Her satrn ortalama 20 byte dosya dnn. Her satrn ortalama 20 byte olduunu farzedelim. Metin
olduunu farzedelim. Metin dosyas 2.8 MB olacaktr. Bu veriyi tutan PostgreSQL veritaban yaklak 6.4 MB yer dosyas 2.8 MB olacaktr. Bu veriyi tutan PostgreSQL veritaban
kaplayacaktr. yaklak 6.4 MB yer kaplayacaktr.
36 byte: Her bir satr bal (yaklak) 36 byte: Her bir satr bal (yaklak)
+ 24 byte: Bir tamsay (int) alan ve bir metin (text) alan + 24 byte: Bir tamsay (int) alan ve bir metin (text) alan
+ 4 byte: Sayfada tuple a pointer + 4 byte: Sayfada tuple a pointer
---------------------------------------- ----------------------------------------
64 byte -> kayt bana 64 byte -> kayt bana
PostgreSQL'de veri sayfas (data page) bykl 8192 byte (8k)dr, dolaysyla: PostgreSQL'de veri sayfas (data page) bykl 8192 byte (8k)dr,
dolaysyla:
8192 byte -> page bana 8192 byte -> page bana
------------------------- = Her bir veritaban page' bana 128 satr (yaklak) ------------------------- = Her bir veritaban page' bana 128 satr (yaklak)
Satr bana 64 byte Satr bana 64 byte
...@@ -543,99 +752,131 @@ PostgreSQL'de veri sayfas ...@@ -543,99 +752,131 @@ PostgreSQL'de veri sayfas
-------------------- = 782 veritaban sayfas -------------------- = 782 veritaban sayfas
128 satr 128 satr
782 veritaban sayfas * sayfa bana 8192 byte = 6,406,144 bytes (6.4 MB) 782 veritaban sayfas * sayfa bana 8192 byte = 6,406,144 bytes (6.4
MB)
Index'ler ok fazla yere gereksinim duymazlar, ama index'lenmi veriyi tutacaklarndan byk olabilirler.
Index'ler ok fazla yere gereksinim duymazlar, ama index'lenmi veriyi
NULL deerler bitmapler iinde tutulur; dolaysyla ok az yer kaplarlar. tutacaklarndan byk olabilirler.
4.7) Veritabannda hangi tablo ya da index'lerin tanmlandn nasl grebilirim?
NULL deerler bitmapler iinde tutulur; dolaysyla ok az yer
psql, bu tr bilgileri gstermek iin, \ ile balayan bir ok komut sunmaktadr. \? komutu ile bu komutlar kaplarlar.
grebilirsiniz. Ayrca, bunlar aklayan ve pg_ ile balayan ok sayda sistem tablosu bulunmaktadr. Ayn zamanda,
psql -l ile tm veritabanlarn listeyelebirsiniz. 4.7) Veritabannda hangi tablo ya da index'lerin tanmlandn nasl
grebilirim?
Ayrca, pgsql/src/tutorial/syscat.source kodunu inceleyebilirsiniz. Bu dosya, veritaban sistem dosyalarndan bilgiyi
almak iin gereksinim duyulan bir ok SELECT'leri gsterir. psql, bu tr bilgileri gstermek iin, \ ile balayan bir ok komut
4.8) Sorgularm cok yava, ya da index'lerimi kullanmyorlar. Neden? sunmaktadr. \? komutu ile bu komutlar grebilirsiniz. Ayrca,
bunlar aklayan ve pg_ ile balayan ok sayda sistem tablosu
Indexler her sorgu tarafndan otomatik olarak kullanlmazlar. Indexler eer bir tablonun bykl minimum bir bulunmaktadr. Ayn zamanda, psql -l ile tm veritabanlarn
byklkten fazla ise ve sorgu tablodaki satrlarn sadece kk bir yzdesini seiyorsa kullanlr. Bunun nedeni, listeyelebirsiniz.
index eriiminin neden olduu raslansal disk eriimi nin diskin ya da tablonun sral okunmasndan daha yavas
olabilmesidir. Ayrca, pgsql/src/tutorial/syscat.source kodunu inceleyebilirsiniz. Bu
dosya, veritaban sistem dosyalarndan bilgiyi almak iin gereksinim
Bir index'in kullanlp kullanlmayacan belirlemek iin, PostgreSQL tablo hakkndaki istatistiklere gereksinmesi duyulan bir ok SELECT'leri gsterir.
vardr. Bu istatistikler, VACUUM ANALYZE kullanlarak toplanrlar. Optimizer, istatistikleri kullanarak, tabloda ka
satr olduunu ve bilir ve indexin kullanlp kullanlmayacana daha iyi karar verir. Istatistikler, ayn zamanda en 4.8) Sorgularm cok yava, ya da index'lerimi kullanmyorlar. Neden?
uygun join srasn ve yntemini belirlemekte ok nemlidir. statistik toplanmas, tablo ierikleri deitike
periyodik olarak yaplmaldr. Indexler her sorgu tarafndan otomatik olarak kullanlmazlar. Indexler
eer bir tablonun bykl minimum bir byklkten fazla ise ve sorgu
Indexler normalde ORDER BY sorgular ya da join ilemlerini gerekletirmek iin kullanlmazlar. Ak bir sralamay tablodaki satrlarn sadece kk bir yzdesini seiyorsa kullanlr.
takip eden sral bir arama (sequential scan), byk bir tabloda index aramas yapmaktan genelde daha hzldr. Bunun nedeni, index eriiminin neden olduu raslansal disk eriimi nin
Ancak, ORDER BY ile birlemi LIMIT genellikle bir index kullanacaktr; nk tablonun sadece belirli bir miktar diskin ya da tablonun sral okunmasndan daha yavas olabilmesidir.
dndrlecektir. Aslnda, MAX() ve MIN() fonksiyonlarnn index kullanmamalarndan dolay, bu gibi deerleri ORDER BY
ve LIMIT kullanarak da almak olasdr: Bir index'in kullanlp kullanlmayacan belirlemek iin, PostgreSQL
tablo hakkndaki istatistiklere gereksinmesi vardr. Bu istatistikler,
VACUUM ANALYZE kullanlarak toplanrlar. Optimizer, istatistikleri
kullanarak, tabloda ka satr olduunu ve bilir ve indexin kullanlp
kullanlmayacana daha iyi karar verir. Istatistikler, ayn zamanda
en uygun join srasn ve yntemini belirlemekte ok nemlidir.
statistik toplanmas, tablo ierikleri deitike periyodik olarak
yaplmaldr.
Indexler normalde ORDER BY sorgular ya da join ilemlerini
gerekletirmek iin kullanlmazlar. Ak bir sralamay takip eden
sral bir arama (sequential scan), byk bir tabloda index aramas
yapmaktan genelde daha hzldr.
Ancak, ORDER BY ile birlemi LIMIT genellikle bir index
kullanacaktr; nk tablonun sadece belirli bir miktar
dndrlecektir. Aslnda, MAX() ve MIN() fonksiyonlarnn index
kullanmamalarndan dolay, bu gibi deerleri ORDER BY ve LIMIT
kullanarak da almak olasdr:
SELECT col SELECT col
FROM tab FROM tab
ORDER BY col [ DESC ] ORDER BY col [ DESC ]
LIMIT 1; LIMIT 1;
Eer optimizer'n sral arama yapmasnn yanl olduuna inanyorsanz, SET enable_seqscan TO 'off' kullann ve index Eer optimizer'n sral arama yapmasnn yanl olduuna
kullanan aramalarn hala daha hzl olup olmadn grn. inanyorsanz, SET enable_seqscan TO 'off' kullann ve index kullanan
aramalarn hala daha hzl olup olmadn grn.
LIKE ya da ~ gibi operatrler kullanyorsanz, index'ler sadece aadaki koullarda kullanlabilir:
LIKE ya da ~ gibi operatrler kullanyorsanz, index'ler sadece
aadaki koullarda kullanlabilir:
* Arama dizininin ba, dizinin ba ile balanmaldr. Yani, * Arama dizininin ba, dizinin ba ile balanmaldr. Yani,
o LIKE sorgular % ile balamamaldr. + LIKE sorgular % ile balamamaldr.
o Dzenli ifade sorgular ^ ie balamamaldr. + Dzenli ifade sorgular ^ ie balamamaldr.
* Arama metni bir karakter snf ile balayamaz. rnek: [a-e] * Arama metni bir karakter snf ile balayamaz. rnek: [a-e]
* ILIKE ve ~* gibi byk/kk harfe duyarsz aramalar index'lerden yararlanmazlar. Onun yerine, blm 4.12'de * ILIKE ve ~* gibi byk/kk harfe duyarsz aramalar index'lerden
anlatlan fonksiyonel index'leri kullanabilirsiniz. yararlanmazlar. Onun yerine, blm 4.12'de anlatlan fonksiyonel
index'leri kullanabilirsiniz.
* initdb srasnda ntanml C locale'i kullanlmaldr. * initdb srasnda ntanml C locale'i kullanlmaldr.
4.9) query-optimizer'n sorgularm nasl deerlendirdiini, ileme soktuunu nasl grebilirim? 4.9) query-optimizer'n sorgularm nasl deerlendirdiini, ileme
soktuunu nasl grebilirim?
EXPLAIN yardm sayfasna baknz.
4.10) R-tree index nedir?
EXPLAIN yardm sayfasna baknz. R-tree index, uzaysal (spatial) verileri indexlemek iin kullanlr.
4.10) R-tree index nedir? Bir hash index, dizi aramalarnda (range search) kullanlamaz. B-tree
index dizi aramalarnda sadece tek boyutlu almaktadr. R-tree, ok
boyutlu veriyi destekler. rnein, eer bir R-tree index point veri
tipi zerinde ina edililebilirse, sistem "select all points within a
bounding rectangle" gibi sorgulara daha verimli yantlar verecektir.
R-tree index, uzaysal (spatial) verileri indexlemek iin kullanlr. Bir hash index, dizi aramalarnda (range search) Orijinal R-tree tasarmn aklayan belge:
kullanlamaz. B-tree index dizi aramalarnda sadece tek boyutlu almaktadr. R-tree, ok boyutlu veriyi destekler.
rnein, eer bir R-tree index point veri tipi zerinde ina edililebilirse, sistem "select all points within a
bounding rectangle" gibi sorgulara daha verimli yantlar verecektir.
Orijinal R-tree tasarmn aklayan belge: Guttman, A. "R-trees: A Dynamic Index Structure for Spatial
Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of
Data, 45-57.
Guttman, A. "R-trees: A Dynamic Index Structure for Spatial Searching." Proceedings of the 1984 ACM SIGMOD Int'l Conf Bu belgeyi, Stonebraker'n "Readings in Database Systems" kitabnda
on Mgmt of Data, 45-57. bulabilirsiniz.
Bu belgeyi, Stonebraker'n "Readings in Database Systems" kitabnda bulabilirsiniz. Gml R-tree indexleri poligon ve boxlar kullanabilir. Teorik
olarak, R-tree indexlerin zelliklerini geniletmek bir miktar aba
gerektirir ve bunun nasl yaplacana dair bir belgemiz henz
bulunmamaktadr.
Gml R-tree indexleri poligon ve boxlar kullanabilir. Teorik olarak, R-tree indexlerin zelliklerini geniletmek bir 4.11) Genetic Query Optimizer nedir?
miktar aba gerektirir ve bunun nasl yaplacana dair bir belgemiz henz bulunmamaktadr.
4.11) Genetic Query Optimizer nedir?
GEQO modl, Genetic Algorithm(GA) kullanlarak tablolar birletirildiinde sorgu optimizasyonunu hzlandrr. GEQO modl, Genetic Algorithm(GA) kullanlarak tablolar
4.12) Dzenli ifade (Regular Expression) aramalarn ve byk/kk harfe duyarsz aramalar nasl yapabilirim? Bu birletirildiinde sorgu optimizasyonunu hzlandrr.
byk(kk harfe duyarl aramalar iin index'i nasl kullanabilirim?
~ operatr dzenli ifade elemesi ve ~* byk/kk harfe duyarsz dzenli ifade elemesi yapar. Byk/kk harfe 4.12) Dzenli ifade (Regular Expression) aramalarn ve byk/kk harfe
duyarl olan LIKE'n byk/kk harfe duyarsz olan biimi ILIKE'tr ve PostgreSQL 7.1 srm ile birlikte gelmitir. duyarsz aramalar nasl yapabilirim? Bu byk(kk harfe duyarl aramalar
iin index'i nasl kullanabilirim?
Byk-kk harfe duyarsz eitlik karlatrmalar aadaki gibi ifade edilir: ~ operatr dzenli ifade elemesi ve ~* byk/kk harfe duyarsz
dzenli ifade elemesi yapar. Byk/kk harfe duyarl olan LIKE'n
byk/kk harfe duyarsz olan biimi ILIKE'tr ve PostgreSQL 7.1
srm ile birlikte gelmitir.
Byk-kk harfe duyarsz eitlik karlatrmalar aadaki gibi
ifade edilir:
SELECT * SELECT *
FROM tab FROM tab
WHERE lower(col) = 'abc' WHERE lower(col) = 'abc'
Bu standart bir index yaratmayacaktr. Ancak eer fonksiyonel bir
Bu standart bir index yaratmayacaktr. Ancak eer fonksiyonel bir index yaratrsanz; o kullanlacaktr: index yaratrsanz; o kullanlacaktr:
CREATE INDEX tabindex on tab (lower(col)); CREATE INDEX tabindex on tab (lower(col));
4.13) Bir sorguda, bir alanin "NULL" olduunu nasl ortaya karabilirim? 4.13) Bir sorguda, bir alanin "NULL" olduunu nasl ortaya karabilirim?
Kolonu, IS NULL ve IS NOT NULL ile test edebilirsiniz.
Kolonu, IS NULL ve IS NOT NULL ile test edebilirsiniz. 4.14) esitli karakter tipleri arasndaki farklar nelerdir?
4.14) esitli karakter tipleri arasndaki farklar nelerdir?
Veri Tipi Ad Not Veri Tipi Ad Not
-------------------------------------------------- --------------------------------------------------
...@@ -645,31 +886,37 @@ TEXT text uzunlukta herhangi bir ...@@ -645,31 +886,37 @@ TEXT text uzunlukta herhangi bir
BYTEA bytea variable-length byte array (null-byte safe) BYTEA bytea variable-length byte array (null-byte safe)
"char" char bir karakter "char" char bir karakter
adlar (internal name) sistem kataloglarn ve baz hata
mesajlarn incelerken greceksiniz.
adlar (internal name) sistem kataloglarn ve baz hata mesajlarn incelerken greceksiniz. lk drt veri tipi "varlena" tipidir (yani, diskteki ilk 4 bayt
uzunluktur; devam da veridir.) Dolaysyla, kullanlan gerek alan,
belirtilen alandan biraz daha byktr. Ancak, bu veri tipleri,
sktrlmaya tabi tutulabilir; dolaysyla disk alan beklenilenden
kk olabilir. VARCHAR(n) bykl artabilen ama en byk uzunluu
snrl olan verileri saklamak iin en uygun yntemdir. TEXT, 1 GB
bykle kadar olan verileri tutmak iin kullanlr.
lk drt veri tipi "varlena" tipidir (yani, diskteki ilk 4 bayt uzunluktur; devam da veridir.) Dolaysyla, kullanlan CHAR(n), ayn uzunluktaki dizilerin saklanmas iin kullanmr.
gerek alan, belirtilen alandan biraz daha byktr. Ancak, bu veri tipleri, sktrlmaya tabi tutulabilir; CHAR(n) belirtilen uzunlua kadar boluk ile doldurur; ancak
dolaysyla disk alan beklenilenden kk olabilir. VARCHAR(n) bykl artabilen ama en byk uzunluu snrl olan VARCHAR(n) sadece verilen karakterleri saklar. BYTEA binary veri
verileri saklamak iin en uygun yntemdir. TEXT, 1 GB bykle kadar olan verileri tutmak iin kullanlr. saklamak iindir; ayrca "NULL" bayt ieren deerleri de saklar.
Burada anlatlan veri tipi de benzer baarm karakteristiklere
sahiptir.
CHAR(n), ayn uzunluktaki dizilerin saklanmas iin kullanmr. CHAR(n) belirtilen uzunlua kadar boluk ile doldurur; 4.15.1) Nasl serial/otomatik artan (auto-incrementing) bir alan
ancak VARCHAR(n) sadece verilen karakterleri saklar. BYTEA binary veri saklamak iindir; ayrca "NULL" bayt ieren yaratabilirim?
deerleri de saklar. Burada anlatlan veri tipi de benzer baarm karakteristiklere sahiptir.
4.15.1) Nasl serial/otomatik artan (auto-incrementing) bir alan yaratabilirim?
PostgreSQL'de SERIAL veri tipi vardr. Bu veri tipi bir sequence ve kolon zerinde bir index yaratr. PostgreSQL'de SERIAL veri tipi vardr. Bu veri tipi bir sequence ve
kolon zerinde bir index yaratr.
rnek, aadaki sorgu:
rnek, aadaki sorgu:
CREATE TABLE person ( CREATE TABLE person (
id SERIAL, id SERIAL,
name TEXT name TEXT
); );
buna evrilir:
buna evrilir:
CREATE SEQUENCE person_id_seq; CREATE SEQUENCE person_id_seq;
CREATE TABLE person ( CREATE TABLE person (
id INT4 NOT NULL DEFAULT nextval('person_id_seq'), id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
...@@ -677,70 +924,91 @@ CREATE TABLE person ( ...@@ -677,70 +924,91 @@ CREATE TABLE person (
); );
CREATE UNIQUE INDEX person_id_key ON person ( id ); CREATE UNIQUE INDEX person_id_key ON person ( id );
Sequenceler hakknda daha fazla bilgi iin create_sequence yardm
sayfasna bakabilirsiniz. Her satrn OID alann tekil bir say
olarak alabilirsiniz. Ancak, veritabannzn dump'n alp yeniden
yklerseniz, OID deerlerini koruyabilmek iin pg_dump'n -o
parametresini ya da "COPY WITH OIDS" seeneini kullanmanz
gerekecektir.
Sequenceler hakknda daha fazla bilgi iin create_sequence yardm sayfasna bakabilirsiniz. Her satrn OID alann 4.15.2) SERIAL giriinin degerini nasl alabilirim?
tekil bir say olarak alabilirsiniz. Ancak, veritabannzn dump'n alp yeniden yklerseniz, OID deerlerini
koruyabilmek iin pg_dump'n -o parametresini ya da "COPY WITH OIDS" seeneini kullanmanz gerekecektir.
4.15.2) SERIAL giriinin degerini nasl alabilirim?
Bir yaklam, sequence nesnesindeki SERIAL deerini, veriyi girmeden nce nextval() ile alp, aldnz deeri
kendinizin girmesidir. 4.15.1'deki rnek tabloyu kullanarak bir rnek verelim:
Bir yaklam, sequence nesnesindeki SERIAL deerini, veriyi girmeden
nce nextval() ile alp, aldnz deeri kendinizin girmesidir.
4.15.1'deki rnek tabloyu kullanarak bir rnek verelim:
new_id = execute("SELECT nextval('person_id_seq')"); new_id = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
Dier sorgular iin new_id'de yeni deerin saklanmas gerekir. Otomatik olarak yaratlan SEQUENE nesnesinin ad, __seq Dier sorgular iin new_id'de yeni deerin saklanmas gerekir.
eklinde olacaktr (< > iaretleri olmadan). Otomatik olarak yaratlan SEQUENE nesnesinin ad, <tablo ad>_<serial
kolonu ad>_seq eklinde olacaktr (< > iaretleri olmadan).
Alternatif olarak, atanm SERIAL deerini, deer girildikten sonra currval() fonksiyonu ile alabilirsiniz:
Alternatif olarak, atanm SERIAL deerini, deer girildikten sonra
currval() fonksiyonu ile alabilirsiniz:
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')"); new_id = execute("SELECT currval('person_id_seq')");
Son olarak, n tanml deeri bulmak iin INSERT ifadesinden dnen OID
Son olarak, n tanml deeri bulmak iin INSERT ifadesinden dnen OID deerini kullanabilirsiniz; ancak bu en az deerini kullanabilirsiniz; ancak bu en az tanabilir zm
tanabilir zm olacaktr. Perl'de, Edmund Mergl'in DBD:Pg mdl ile birlikte DBI kullanarak, OID deeri olacaktr. Perl'de, Edmund Mergl'in DBD:Pg mdl ile birlikte DBI
$sth->execute() altrldktan sonra $sth->(pg_oid_status) ile alnabilir. kullanarak, OID deeri $sth->execute() altrldktan sonra
4.15.3) currval() ve nextval() dier kullanclara sorun yaratmaz m? $sth->(pg_oid_status) ile alnabilir.
Hayr. curval(), tm kullanclar deil, backend tarafndan atanan geerli deeri dndrr. 4.15.3) currval() ve nextval() dier kullanclara sorun yaratmaz m?
4.15.4) Neden sequence saylar transaction ileminin iptalinden sonra yeniden kullanlyor? Neden sequence/SERIAL
kolonumdaki saylarda atlamalar oluyor? Hayr. curval(), tm kullanclar deil, backend tarafndan atanan
geerli deeri dndrr.
Uyumluluu arttrmak iin, sequence deerleri alan transaction'lara gerektii ekilde aktarlr ve transaction
bitene kadar o deer kilitlenmez. Bu, iptal edilen transaction ilemleri nedeniyle boluklara neden olur. 4.15.4) Neden sequence saylar transaction ileminin iptalinden sonra
4.16) OID nedir? TID nedir? yeniden kullanlyor? Neden sequence/SERIAL kolonumdaki saylarda atlamalar
oluyor?
OIDler, tekil satr numaralarna PostgreSQL'in yantdr. PostgreSQL'de yaratlan her say, tekil bir OID alr. initdb
ilemi srasnda yaratlan tm OID'ler 16384'ten kktr (backend/access/transam.h). Kullanclar tarafndan yaratlan Uyumluluu arttrmak iin, sequence deerleri alan transaction'lara
tm OID'ler bu sayya eit ya da bu saydan byktr. Varsaylan durumda, tm bu OIDler sadece bir tablo ya da gerektii ekilde aktarlr ve transaction bitene kadar o deer
veritabannda deil, tm PostgreSQL kurulumunda tekildir. kilitlenmez. Bu, iptal edilen transaction ilemleri nedeniyle
boluklara neden olur.
PostgreSQL OIDleri, tablolar arasnda satrlar ilikilendirmek iin kendi i tablolarnda kullanr. Bu OIDler belirli
kullanc satrlarn belirtmek iin kullanabilir ve join ilemlerinde kullanlr. OID deerlerini saklamak iin OID 4.16) OID nedir? TID nedir?
kolon tipini kullanmanz nerinir. Daha hzl bir eriim iin, OID alannda bir index yaratabilirsiniz.
OIDler, tekil satr numaralarna PostgreSQL'in yantdr.
OID'ler yeni satrlara, tm veritabanlar tarafnda kullanlan ortak bir alandan atanrlar. Eer OID'i baka bir deere PostgreSQL'de yaratlan her say, tekil bir OID alr. initdb ilemi
eitlemek isterseniz ya da tablonun bir kopyasn orijinal OIDler ile karmak isterseniz, bu mmkndr: srasnda yaratlan tm OID'ler 16384'ten kktr
(backend/access/transam.h). Kullanclar tarafndan yaratlan tm
OID'ler bu sayya eit ya da bu saydan byktr. Varsaylan durumda,
tm bu OIDler sadece bir tablo ya da veritabannda deil, tm
PostgreSQL kurulumunda tekildir.
PostgreSQL OIDleri, tablolar arasnda satrlar ilikilendirmek iin
kendi i tablolarnda kullanr. Bu OIDler belirli kullanc
satrlarn belirtmek iin kullanabilir ve join ilemlerinde
kullanlr. OID deerlerini saklamak iin OID kolon tipini kullanmanz
nerinir. Daha hzl bir eriim iin, OID alannda bir index
yaratabilirsiniz.
OID'ler yeni satrlara, tm veritabanlar tarafnda kullanlan ortak
bir alandan atanrlar. Eer OID'i baka bir deere eitlemek
isterseniz ya da tablonun bir kopyasn orijinal OIDler ile karmak
isterseniz, bu mmkndr:
CREATE TABLE new_table(old_oid oid, mycol int); CREATE TABLE new_table(old_oid oid, mycol int);
SELECT old_oid, mycol INTO new FROM old; SELECT old_oid, mycol INTO new FROM old;
COPY new TO '/tmp/pgtable'; COPY new TO '/tmp/pgtable';
DELETE FROM new; DELETE FROM new;
COPY new WITH OIDS FROM '/tmp/pgtable'; COPY new WITH OIDS FROM '/tmp/pgtable';
OIDler 4-bit tamsay olarak saklanrlar ve 4 milyarda overflow
olacaktr. Kimse bu sayya ulatna dair bir bilgi iletmedi ve bu
snr kimse bu snra ulamadan kaldracaz.
OIDler 4-bit tamsay olarak saklanrlar ve 4 milyarda overflow olacaktr. Kimse bu sayya ulatna dair bir bilgi TIDler, belirli fiziksel satrlar block ve offset deerleri ile
iletmedi ve bu snr kimse bu snra ulamadan kaldracaz. belirtmekte kullanlr. TIDler, satrlar deitiinde ya da yeniden
yklendiinde deiirler. Index girdileri tarafndan fiziksel
TIDler, belirli fiziksel satrlar block ve offset deerleri ile belirtmekte kullanlr. TIDler, satrlar deitiinde satrlar gstermek iin kullanlrlar.
ya da yeniden yklendiinde deiirler. Index girdileri tarafndan fiziksel satrlar gstermek iin kullanlrlar.
4.17) PostgreSQL'de kullanlan baz terimlerin anlamlar nelerdir?
Kaynak kodun bir ksm ve eski belgeler, daha geni kullanm alan olan terimleri kullanrlar. Bunlarn bazlar: 4.17) PostgreSQL'de kullanlan baz terimlerin anlamlar nelerdir?
Kaynak kodun bir ksm ve eski belgeler, daha geni kullanm alan
olan terimleri kullanrlar. Bunlarn bazlar:
* table, relation, class * table, relation, class
* row, record, tuple * row, record, tuple
* column, field, attribute * column, field, attribute
...@@ -751,86 +1019,94 @@ Kaynak kodun bir k ...@@ -751,86 +1019,94 @@ Kaynak kodun bir k
* portal, cursor * portal, cursor
* range variable, table name, table alias * range variable, table name, table alias
Genel veritaban terimleri, http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html Genel veritaban terimleri,
adresinde bulunabilir. http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasn alyorum? /glossary.html adresinde bulunabilir.
Sisteminizde sanal belleinizi tketmi olabilirsiniz, ya da ekirdeiniz belli kaynaklar icin dk bir snra sahip 4.18) Neden "ERROR: Memory exhausted in AllocSetAlloc()" hatasn alyorum?
olabilir. postmaster' balatmadan nce aadakileri deneyebilirsiniz:
Sisteminizde sanal belleinizi tketmi olabilirsiniz, ya da
ekirdeiniz belli kaynaklar icin dk bir snra sahip olabilir.
postmaster' balatmadan nce aadakileri deneyebilirsiniz:
ulimit -d 262144 ulimit -d 262144
limit datasize 256m limit datasize 256m
Kabuunuza bal olarak, bunlardan sadece biri olumlu sonu
verecektir, ama bu ilem veri segment snrnz arttracak, ve belki
de sorgunuzun tamamlanmasn salayacaktr. Bu komut, varolan ileme
(current process) ve komut altrldktan sonraki tm alt ilemlere
uygulanr. Eer SQL istemcinizle, backend'in ok fazla veri dndrmesi
nedeniyle bir sorun yayorsanz, bunu istemciyi balatmadan nce
deneyiniz.
Kabuunuza bal olarak, bunlardan sadece biri olumlu sonu verecektir, ama bu ilem veri segment snrnz 4.19) Hangi PostgreSQL srmn altrdm nasl grebilirim?
arttracak, ve belki de sorgunuzun tamamlanmasn salayacaktr. Bu komut, varolan ileme (current process) ve komut
altrldktan sonraki tm alt ilemlere uygulanr. Eer SQL istemcinizle, backend'in ok fazla veri dndrmesi
nedeniyle bir sorun yayorsanz, bunu istemciyi balatmadan nce deneyiniz.
4.19) Hangi PostgreSQL srmn altrdm nasl grebilirim?
psql arabiriminde, select version(); yaznz. psql arabiriminde, select version(); yaznz.
4.20) Neden large-object ilemlerim, "invalid large obj descriptor" hatasn veriyor?
Large object ilemlerinizin ularna, yani lo_open ... lo_close komutlarnn evresine, BEGIN WORK ve COMMIT koymanz 4.20) Neden large-object ilemlerim, "invalid large obj descriptor"
gerekmektedir; hatasn veriyor?
u anda, PostgreSQL kurallar large objectleri transaction commit edildiinde kapatarak uygulamaktadr. Dolaysyla Large object ilemlerinizin ularna, yani lo_open ... lo_close
handle ile yaplacak ilk ey invalid large obj descriptor hatas ile sonulanacaktr.Dolaysyla alan kodunuz eer komutlarnn evresine, BEGIN WORK ve COMMIT koymanz gerekmektedir;
transaction kullanmazsanz hata mesajlar retecektir.
Eer ODBC gibi bir istemci arabirimi kullanyorsanz, auto-commit'i kapatmanz gerekebilir. u anda, PostgreSQL kurallar large objectleri transaction commit
4.21) u andaki zaman ntanml deer olarak kabul eden How do I create a column that will default to the current edildiinde kapatarak uygulamaktadr. Dolaysyla handle ile yaplacak
time? ilk ey invalid large obj descriptor hatas ile
sonulanacaktr.Dolaysyla alan kodunuz eer transaction
kullanmazsanz hata mesajlar retecektir.
Alttakini kullanabilirsiniz: Eer ODBC gibi bir istemci arabirimi kullanyorsanz, auto-commit'i
kapatmanz gerekebilir.
4.21) u andaki zaman ntanml deer olarak kabul eden How do I create a
column that will default to the current time?
Alttakini kullanabilirsiniz:
CURRENT_TIMESTAMP: CURRENT_TIMESTAMP:
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
4.22) Neden IN kullanan subquery'lerim ok yavas?
4.22) Neden IN kullanan subquery'lerim ok yavas? 7.4 srmnden nce, subqueryler. Eer subquery sadece birka satr ve
outer query bol sayda satr dndryorsa, IN en hzlsdr. Sorgular
7.4 srmnden nce, subqueryler. Eer subquery sadece birka satr ve outer query bol sayda satr dndryorsa, IN en hzlandrmak iin IN yerine EXISTS kullann:
hzlsdr. Sorgular hzlandrmak iin IN yerine EXISTS kullann:
SELECT * SELECT *
FROM tab FROM tab
WHERE col1 IN (SELECT col2 FROM TAB2) WHERE col1 IN (SELECT col2 FROM TAB2)
sorgusunu, aadaki ile deitirin:
sorgusunu, aadaki ile deitirin:
SELECT * SELECT *
FROM tab FROM tab
WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2) WHERE EXISTS (SELECT col2 FROM TAB2 WHERE col1 = col2)
Bu ilemin hzl olmas iin, subcol'un indexlenmi bir kolon olmas
gerekmektedir.
Bu ilemin hzl olmas iin, subcol'un indexlenmi bir kolon olmas gerekmektedir. 7.4 srm ve sonrasnda, IN aslnda normal sorgularla ayn karmak
join tekniklerini kullanr ve EXISTS'e tercih edilir.
7.4 srm ve sonrasnda, IN aslnda normal sorgularla ayn karmak join tekniklerini kullanr ve EXISTS'e tercih 4.23) Outer join ilemini nasl yapabilirim?
edilir.
4.23) Outer join ilemini nasl yapabilirim?
PostgreSQL outer joins islemlerini SQL standartlarn kullanarak gerekletirmektedir. Aada 2 rnek bulunmaktadr:
PostgreSQL outer joins islemlerini SQL standartlarn kullanarak
gerekletirmektedir. Aada 2 rnek bulunmaktadr:
SELECT * SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
ya da
ya da
SELECT * SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
Bu zde sorgular t1.col' i t2.col'ye join ederler ve ayn zamanda
Bu zde sorgular t1.col' i t2.col'ye join ederler ve ayn zamanda t1'deki unjoined satrlar (t2'de elenmemi t1'deki unjoined satrlar (t2'de elenmemi olanlarla) dndrrler.
olanlarla) dndrrler. RIGHT JOIN t2'nin unjoined satrlarn ekleyecektir. Bir FULL join, elemi btn satrlar ve RIGHT JOIN t2'nin unjoined satrlarn ekleyecektir. Bir FULL join,
t1 ile t2'den tm balanmam (unjoined) satrlar alr. OUTER szc seimseldir ve LEFT, RIGHT ve FULL join elemi btn satrlar ve t1 ile t2'den tm balanmam (unjoined)
ilemlerinde olduu kabul edilir. Sradan join ilemleri INNER JOIN olarak adlandrlr. satrlar alr. OUTER szc seimseldir ve LEFT, RIGHT ve FULL join
ilemlerinde olduu kabul edilir. Sradan join ilemleri INNER JOIN
nceki srmlerde, OUTER JOINler UNION ve NOT IN kullanlarak simle edilebiliyordu. rnein, tab1 ve tab2'yi olarak adlandrlr.
birletirirken, aadaki sorgu iki tablonun dtan balanmasn salar:
nceki srmlerde, OUTER JOINler UNION ve NOT IN kullanlarak simle
edilebiliyordu. rnein, tab1 ve tab2'yi birletirirken, aadaki
sorgu iki tablonun dtan balanmasn salar:
SELECT tab1.col1, tab2.col2 SELECT tab1.col1, tab2.col2
FROM tab1, tab2 FROM tab1, tab2
WHERE tab1.col1 = tab2.col1 WHERE tab1.col1 = tab2.col1
...@@ -840,58 +1116,77 @@ FROM tab1 ...@@ -840,58 +1116,77 @@ FROM tab1
WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2) WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
ORDER BY col1 ORDER BY col1
4.24) Ayn andan birden fazla veritabannda nasl ilem yapabilirim?
4.24) Ayn andan birden fazla veritabannda nasl ilem yapabilirim? Mevcut veritabannz dndaki baka bir veritabannz sorgulamanzn
bir yolu bulunmamaktadr. Bunun nedeni, PostgreSQL'in veritabanna
Mevcut veritabannz dndaki baka bir veritabannz sorgulamanzn bir yolu bulunmamaktadr. Bunun nedeni, zel sistem kataloglar yklemesidir. Bu nedenle, cross-database bir
PostgreSQL'in veritabanna zel sistem kataloglar yklemesidir. Bu nedenle, cross-database bir sorgunun nasl sorgunun nasl davranacan kestirmek zordur.
davranacan kestirmek zordur.
contrib/dblink fonksiyon arlarn kullanarak cross-database sorgulara izin verir. Tabii ki, bir istemci deiik
veritabanlarna ayn anda eriim salayabilir ve bilgiyi bu ekilde birletirebilir.
4.25) Bir fonksiyondan nasl oklu satr ya da kolon dndrebilirim? contrib/dblink fonksiyon arlarn kullanarak cross-database
sorgulara izin verir. Tabii ki, bir istemci deiik veritabanlarna
ayn anda eriim salayabilir ve bilgiyi bu ekilde birletirebilir.
7.3 srmnde, bir fonksiyondan kolaylkla oklu satr ya da stun dndrebilirsiniz. 4.25) Bir fonksiyondan nasl oklu satr ya da kolon dndrebilirim?
(http://techdocs.postgresql.org/guides/SetReturningFunctions)
4.26) Neden Pl/PgSQL fonksiyonlar iinden gvenli bir ekilde tablo yaratma/kaldrma ilemlerini yapamyoruz? 7.3 srmnde, bir fonksiyondan kolaylkla oklu satr ya da stun
dndrebilirsiniz.
(http://techdocs.postgresql.org/guides/SetReturningFunctions)
PL/PgSQL fonksiyon ierikleri cache'ler. Bunun istenmeyen bir taraf, eer bir PL/PgSQL fonksiyonu geici bir tabloya 4.26) Neden Pl/PgSQL fonksiyonlar iinden gvenli bir ekilde tablo
eriiyorsa ve bu tablo ileride kaldrlp yeniden oluturulduktan sonra fonksiyon yeniden arlrsa, fonksiyon yaratma/kaldrma ilemlerini yapamyoruz?
almayacaktr; nk cache'lenmi fonksiyon hala eski geici tabloyu gsteriyor olacaktr. zm, geici tablo
eriimleri iin PL/PgSQL'de EXECUTE kullanmaktr. Bu, sorgunun her seferinde yeniden ilenmesini salayacaktr.
4.27) Hangi ifreleme seenekleri bulunmaktadr? PL/PgSQL fonksiyon ierikleri cache'ler. Bunun istenmeyen bir taraf,
eer bir PL/PgSQL fonksiyonu geici bir tabloya eriiyorsa ve bu tablo
ileride kaldrlp yeniden oluturulduktan sonra fonksiyon yeniden
arlrsa, fonksiyon almayacaktr; nk cache'lenmi fonksiyon
hala eski geici tabloyu gsteriyor olacaktr. zm, geici tablo
eriimleri iin PL/PgSQL'de EXECUTE kullanmaktr. Bu, sorgunun her
seferinde yeniden ilenmesini salayacaktr.
* contrib/pgcrypto SQL sorgularnda kullanlabilmesi iin ifreleme fonksiyonlar iermektedir. 4.27) 4.28) Hangi ifreleme seenekleri bulunmaktadr?
* stemciden sunucuya iletiimi ifrelemek iin, sunucuda ssl seenei postgresql.conf iinde ak olmaldr.
Ayrca,pg_hba.conf dosyas iinde host ya da hostssl kayd mutlaka olmaldr ve istemci sslmode kapatlmamaldr. (Ayn
zamanda,PostgreSQL'in doal SSL balantlar dnda ssh ya da ssl gibi 3.parti ifrelenmi veri iletimi de mmkndr.)
* Veritaban kullanc ad ve ifreleri 7.3 srm ile birlikte otomatik olarak ifrelenirler. nceki srmlerde,
postgresql.conf iindeki PASSWORD_ENCRYPTION seeneini aktif hale getirmeniz gerekmektedir.
* Sunucunun kendisini ifreli dosya sistemi zerinde altrabilirsiniz.
PostgreSQL zelliklerini Geniletmek * contrib/pgcrypto SQL sorgularnda kullanlabilmesi iin ifreleme
fonksiyonlar iermektedir.
* stemciden sunucuya iletiimi ifrelemek iin, sunucuda ssl
seenei postgresql.conf iinde ak olmaldr. Ayrca,pg_hba.conf
dosyas iinde host ya da hostssl kayd mutlaka olmaldr ve
istemci sslmode kapatlmamaldr. (Ayn zamanda,PostgreSQL'in
doal SSL balantlar dnda ssh ya da ssl gibi 3.parti
ifrelenmi veri iletimi de mmkndr.)
* Veritaban kullanc ad ve ifreleri 7.3 srm ile birlikte
otomatik olarak ifrelenirler. nceki srmlerde, postgresql.conf
iindeki PASSWORD_ENCRYPTION seeneini aktif hale getirmeniz
gerekmektedir.
* Sunucunun kendisini ifreli dosya sistemi zerinde
altrabilirsiniz.
_________________________________________________________________
5.1) Kullanc-tanml bir fonksiyon yazdm. psql'de altrdm zaman neden core dump ediyor? PostgreSQL zelliklerini Geniletmek
Sorunun nedeni birden fazla ey olabilir. Kullanc-tanml fonksiyonunuzu stand-alone bir programda altrmay 5.1) Kullanc-tanml bir fonksiyon yazdm. psql'de altrdm zaman
deneyiniz. neden core dump ediyor?
5.2) PostgreSQL'e nasl yeni tipler/fonksiyonlar ekleyebilirim? Sorunun nedeni birden fazla ey olabilir. Kullanc-tanml
fonksiyonunuzu stand-alone bir programda altrmay deneyiniz.
almalarnz pgsql-hackers e-posta listesine gnderiniz. Kodunuz incelendikten sonra /contrib dizinine konacaktr. 5.2) PostgreSQL'e nasl yeni tipler/fonksiyonlar ekleyebilirim?
5.3) Bir tuple dondrmek icin bir C fonksiyonunu nasil yazarm? almalarnz pgsql-hackers e-posta listesine gnderiniz. Kodunuz
incelendikten sonra /contrib dizinine konacaktr.
PostgreSQL 7.3 srm ile birlikte, C, PL/PgSQL ve SQL kullanlarak tablo-dndren fonksiyonlar tamamen 5.3) Bir tuple dondrmek icin bir C fonksiyonunu nasil yazarm?
desteklenmektedir. Ayrntl bilgi iin PostgreSQL 7.3.2 Kullanc Rehberi'ne bakabilrisiniz. Bir rnei
contrib/tablefunc iinde bulabilirsiniz.
5.4) Bir kaynak dosyasnda deiiklik yaptm. Yeniden derlememe ramen deiiklik geerli olmuyor. Neden? PostgreSQL 7.3 srm ile birlikte, C, PL/PgSQL ve SQL kullanlarak
tablo-dndren fonksiyonlar tamamen desteklenmektedir. Ayrntl bilgi
iin PostgreSQL 7.3.2 Kullanc Rehberi'ne bakabilrisiniz. Bir rnei
contrib/tablefunc iinde bulabilirsiniz.
Makefile'lar include dosyalar iin tam bir bamllk iermezler. ncelikle make clean, ardndan da baska bir make 5.4) Bir kaynak dosyasnda deiiklik yaptm. Yeniden derlememe ramen
ilemi yapmanz gerekir. GCC kullanyorsanz, configure betiinin --enable-depend seeneini, derleyicinin deiiklik geerli olmuyor. Neden?
bamllklar otomatik olarak hesaplamas iin kullanabilirsiniz.
Makefile'lar include dosyalar iin tam bir bamllk iermezler.
ncelikle make clean, ardndan da baska bir make ilemi yapmanz
gerekir. GCC kullanyorsanz, configure betiinin --enable-depend
seeneini, derleyicinin bamllklar otomatik olarak hesaplamas
iin kullanabilirsiniz.
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
alink="#0000ff"> alink="#0000ff">
<H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1> <H1>Frequently Asked Questions (FAQ) for PostgreSQL</H1>
<P>Last updated: Thu Feb 24 23:18:31 EST 2005</P> <P>Last updated: Fri Mar 11 16:42:06 EST 2005</P>
<P>Current maintainer: Bruce Momjian (<A href= <P>Current maintainer: Bruce Momjian (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>) "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)
...@@ -197,7 +197,7 @@ ...@@ -197,7 +197,7 @@
and Win2003. A prepackaged installer is available at <a href= and Win2003. A prepackaged installer is available at <a href=
"http://pgfoundry.org/projects/pginstaller"> "http://pgfoundry.org/projects/pginstaller">
http://pgfoundry.org/projects/pginstaller</a>. MSDOS-based versions http://pgfoundry.org/projects/pginstaller</a>. MSDOS-based versions
of Windows (Win95, Win98, WinMe) can run PostgreSQL using Cygwin. of Windows (Win95, Win98, WinMe) can run PostgreSQL using Cygwin.</P>
<p>There is also a Novell Netware 6 port at <p>There is also a Novell Netware 6 port at
<a href="http://forge.novell.com">http://forge.novell.com</a>, <a href="http://forge.novell.com">http://forge.novell.com</a>,
...@@ -217,14 +217,14 @@ ...@@ -217,14 +217,14 @@
via email. The main web site to subscribe to the email lists is via email. The main web site to subscribe to the email lists is
<a href="http://www.postgresql.org/community/lists/"> <a href="http://www.postgresql.org/community/lists/">
http://www.postgresql.org/community/lists/</a>. The <I>general</I> http://www.postgresql.org/community/lists/</a>. The <I>general</I>
or <I>bugs</I> lists are a good place to start. or <I>bugs</I> lists are a good place to start.</P>
<P>The major IRC channel is <I>#postgresql</I> on Freenode <P>The major IRC channel is <I>#postgresql</I> on Freenode
(<I>irc.freenode.net</I>). To connect you can use the Unix (<I>irc.freenode.net</I>). To connect you can use the Unix
program <CODE>irc -c '#postgresql' "$USER" irc.freenode.net</CODE> program <CODE>irc -c '#postgresql' "$USER" irc.freenode.net</CODE>
or use any of the other popular IRC clients. A Spanish one also exists or use any of the other popular IRC clients. A Spanish one also exists
on the same network, (<I>#postgresql-es</I>), and a French one, on the same network, (<I>#postgresql-es</I>), and a French one,
(<I>#postgresqlfr</I>). There is also a PostgreSQL channel on EFNet. (<I>#postgresqlfr</I>). There is also a PostgreSQL channel on EFNet.</P>
<P>A list of commercial support companies is available at <A href= <P>A list of commercial support companies is available at <A href=
"http://techdocs.postgresql.org/companies.php"> "http://techdocs.postgresql.org/companies.php">
...@@ -482,7 +482,7 @@ ...@@ -482,7 +482,7 @@
<li>Use of Prepared queries</li> <li>Use of Prepared queries</li>
<li>Use of <SMALL>ANALYZE</SMALL> to maintain accurate optimizer <li>Use of <SMALL>ANALYZE</SMALL> to maintain accurate optimizer
statistics</li> statistics</li>
<li>Regular use of <SMALL>VACUUM</SMALL> or <I>pg_autovacuum</I> <li>Regular use of <SMALL>VACUUM</SMALL> or <I>pg_autovacuum</I></li>
<li>Dropping of indexes during large data changes</li> <li>Dropping of indexes during large data changes</li>
</ul><BR> </ul><BR>
<BR> <BR>
...@@ -609,7 +609,7 @@ ...@@ -609,7 +609,7 @@
<SMALL>SELECT</SMALL> time, use a cursor and <SMALL>SELECT</SMALL> time, use a cursor and
<SMALL>FETCH</SMALL>.</P> <SMALL>FETCH</SMALL>.</P>
<P>To <SMALL>SELECT</SMALL> a random row, use: <P>To <SMALL>SELECT</SMALL> a random row, use:</P>
<PRE> <PRE>
SELECT col SELECT col
FROM tab FROM tab
...@@ -643,7 +643,7 @@ ...@@ -643,7 +643,7 @@
<H4><A name="4.3">4.3</A>) How do you change a column's data type?</H4> <H4><A name="4.3">4.3</A>) How do you change a column's data type?</H4>
<P>Changing the data type of a column can be done easily in 8.0 <P>Changing the data type of a column can be done easily in 8.0
and later with <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>. and later with <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
<P>In earlier releases, do this:</P> <P>In earlier releases, do this:</P>
<PRE> <PRE>
...@@ -661,7 +661,7 @@ ...@@ -661,7 +661,7 @@
<P>These are the limits:</P> <P>These are the limits:</P>
<BLOCKQUOTE> <BLOCKQUOTE>
<TABLE BORDER=1> <TABLE >
<TR><TD>Maximum size for a database?</TD><TD>unlimited (32 TB databases <TR><TD>Maximum size for a database?</TD><TD>unlimited (32 TB databases
exist)</TD></TR> exist)</TD></TR>
<TR><TD>Maximum size for a table?</TD><TD>32 TB</TD></TR> <TR><TD>Maximum size for a table?</TD><TD>32 TB</TD></TR>
...@@ -731,7 +731,7 @@ table?</TD><TD>unlimited</TD></TR> ...@@ -731,7 +731,7 @@ table?</TD><TD>unlimited</TD></TR>
used if the table is larger than a minimum size, and the query used if the table is larger than a minimum size, and the query
selects only a small percentage of the rows in the table. This is selects only a small percentage of the rows in the table. This is
because the random disk access caused by an index scan can be because the random disk access caused by an index scan can be
slower than a straight read through the table, or sequential scan. slower than a straight read through the table, or sequential scan. </P>
<P>To determine if an index should be used, PostgreSQL must have <P>To determine if an index should be used, PostgreSQL must have
statistics about the table. These statistics are collected using statistics about the table. These statistics are collected using
...@@ -843,7 +843,7 @@ table?</TD><TD>unlimited</TD></TR> ...@@ -843,7 +843,7 @@ table?</TD><TD>unlimited</TD></TR>
<H4><A name="4.10">4.10</A>) What is the difference between the <H4><A name="4.10">4.10</A>) What is the difference between the
various character types?</H4> various character types?</H4>
<BLOCKQUOTE> <BLOCKQUOTE>
<TABLE BORDER=1> <TABLE >
<TR><TH>Type</TH><TH>Internal Name</TH><TH>Notes</TH></TR> <TR><TH>Type</TH><TH>Internal Name</TH><TH>Notes</TH></TR>
<TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>size specifies maximum <TR><TD>VARCHAR(n)</TD><TD>varchar</TD><TD>size specifies maximum
length, no padding</TD></TR> length, no padding</TD></TR>
...@@ -1057,7 +1057,7 @@ length</TD></TR> ...@@ -1057,7 +1057,7 @@ length</TD></TR>
<P>It is easy using set-returning functions, <P>It is easy using set-returning functions,
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions"> <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
http://techdocs.postgresql.org/guides/SetReturningFunctions</a>. http://techdocs.postgresql.org/guides/SetReturningFunctions</a></P>.
<H4><A name="4.20">4.20</A>) Why do I get "relation with OID ##### <H4><A name="4.20">4.20</A>) Why do I get "relation with OID #####
does not exist" errors when accessing temporary tables in PL/PgSQL does not exist" errors when accessing temporary tables in PL/PgSQL
...@@ -1082,7 +1082,7 @@ length</TD></TR> ...@@ -1082,7 +1082,7 @@ length</TD></TR>
<I>pg_hba.conf</I>, and the client <I>sslmode</I> must not be <I>pg_hba.conf</I>, and the client <I>sslmode</I> must not be
<I>disable.</I> (Note that it is also possible to use a third-party <I>disable.</I> (Note that it is also possible to use a third-party
encrypted transport, such as stunnel or ssh, rather than PostgreSQL's encrypted transport, such as stunnel or ssh, rather than PostgreSQL's
native SSL connections.) native SSL connections.)</LI>
<LI>Database user passwords are automatically encrypted when stored in <LI>Database user passwords are automatically encrypted when stored in
the system tables.</LI> the system tables.</LI>
<LI>The server can run using an encrypted file system.</LI> <LI>The server can run using an encrypted file system.</LI>
......
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
<H1>Developer's Frequently Asked Questions (FAQ) for <H1>Developer's Frequently Asked Questions (FAQ) for
PostgreSQL</H1> PostgreSQL</H1>
<P>Last updated: Fri Mar 11 08:09:23 EST 2005</P> <P>Last updated: Fri Mar 11 16:43:05 EST 2005</P>
<P>Current maintainer: Bruce Momjian (<A href= <P>Current maintainer: Bruce Momjian (<A href=
"mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> "mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
...@@ -26,9 +26,7 @@ ...@@ -26,9 +26,7 @@
<BR> <BR>
<CENTER>
<H2>General Questions</H2> <H2>General Questions</H2>
</CENTER>
<A href="#1.1">1.1</A>) How do I get involved in PostgreSQL <A href="#1.1">1.1</A>) How do I get involved in PostgreSQL
development?<BR> development?<BR>
<A href="#1.2">1.2</A>) What development environment is required <A href="#1.2">1.2</A>) What development environment is required
...@@ -59,9 +57,7 @@ ...@@ -59,9 +57,7 @@
site development?<BR> site development?<BR>
<CENTER>
<H2>Technical Questions</H2> <H2>Technical Questions</H2>
</CENTER>
<A href="#2.1">2.1</A>) How do I efficiently access information in <A href="#2.1">2.1</A>) How do I efficiently access information in
tables from the backend code?<BR> tables from the backend code?<BR>
<A href="#2.2">2.2</A>) Why are table, column, type, function, <A href="#2.2">2.2</A>) Why are table, column, type, function,
...@@ -152,7 +148,7 @@ ...@@ -152,7 +148,7 @@
http://momjian.postgresql.org/cgi-bin/pgpatches</a>, and http://momjian.postgresql.org/cgi-bin/pgpatches</a>, and
those that are being kept for the next release, those that are being kept for the next release,
<a href="http://momjian.postgresql.org/cgi-bin/pgpatches2"> <a href="http://momjian.postgresql.org/cgi-bin/pgpatches2">
http://momjian.postgresql.org/cgi-bin/pgpatches2</a>. http://momjian.postgresql.org/cgi-bin/pgpatches2</a>.</P>
<H3><A name="1.5">1.5</A>) Where can I learn more about the <H3><A name="1.5">1.5</A>) Where can I learn more about the
code?</H3> code?</H3>
...@@ -703,9 +699,7 @@ ...@@ -703,9 +699,7 @@
href= href=
"http://xzilla.postgresql.org/todo">http://xzilla.postgresql.org/todo</A></P> "http://xzilla.postgresql.org/todo">http://xzilla.postgresql.org/todo</A></P>
<CENTER>
<H2>Technical Questions</H2> <H2>Technical Questions</H2>
</CENTER>
<H3><A name="2.1">2.1</A>) How do I efficiently access information <H3><A name="2.1">2.1</A>) How do I efficiently access information
in tables from the backend code?</H3> in tables from the backend code?</H3>
......
...@@ -71,8 +71,6 @@ The mailing list for discussion is ...@@ -71,8 +71,6 @@ The mailing list for discussion is
<i>pgsql-hackers-win32@postgresql.org</i>. You can subscribe by sending <i>pgsql-hackers-win32@postgresql.org</i>. You can subscribe by sending
an email body containing the word <i>subscribe</i> to <i><a an email body containing the word <i>subscribe</i> to <i><a
href="mailto:pgsql-hackers-win32-request@postgresql.org">pgsql-hackers-win32-request@postgresql.org</a></i>.<br> href="mailto:pgsql-hackers-win32-request@postgresql.org">pgsql-hackers-win32-request@postgresql.org</a></i>.<br>
<ul>
</ul>
<h2>Resources</h2> <h2>Resources</h2>
There are several resources that helped us complete this port:<br> There are several resources that helped us complete this port:<br>
<ul> <ul>
......
...@@ -17,7 +17,7 @@ ...@@ -17,7 +17,7 @@
</P> </P>
<P>Traduzido por: Euler Taveira de Oliveira (<A href= <P>Traduzido por: Euler Taveira de Oliveira (<A href=
"mailto:eulerto@yahoo.com.br">eulerto@yahoo.com.br</A>)<BR> "mailto:eulerto@yahoo.com.br">eulerto@yahoo.com.br</A>)</P>
<P>A vers&atilde;o mais recente desse documento pode ser vista em <A href= <P>A vers&atilde;o mais recente desse documento pode ser vista em <A href=
"http://www.postgresql.org/files/documentation/faqs/FAQ.html"> "http://www.postgresql.org/files/documentation/faqs/FAQ.html">
...@@ -202,14 +202,14 @@ ...@@ -202,14 +202,14 @@
baseados no NT tais como Win2000, WinXP e Win2003. Um instalador baseados no NT tais como Win2000, WinXP e Win2003. Um instalador
est&aacute; dispon&iacute;vel em <a href= est&aacute; dispon&iacute;vel em <a href=
"http://pgfoundry.org/projects/pginstaller"> "http://pgfoundry.org/projects/pginstaller">
http://pgfoundry.org/projects/pginstaller</a> Versões do Windows http://pgfoundry.org/projects/pginstaller</a> Vers&otilde;es do Windows
baseados no MSDOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin. baseados no MSDOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.</P>
<P>H&aacute; tamb&eacute;m um porte para Novell Netware 6 em <P>H&aacute; tamb&eacute;m um porte para Novell Netware 6 em
<A href="http://forge.novell.com">http://forge.novell.com</A> <A href="http://forge.novell.com">http://forge.novell.com</A>
e uma versão para OS/2 (eComStation) em <a href= e uma vers&atilde;o para OS/2 (eComStation) em <a href=
"http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F">
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>.</P> http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F</a>.</P>
<H4><A name="1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?</H4> <H4><A name="1.5">1.5</A>) Onde eu posso conseguir o PostgreSQL?</H4>
...@@ -253,7 +253,7 @@ H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon ...@@ -253,7 +253,7 @@ H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon
<P>Outras listas de discuss&otilde;es e informa&ccedil;&otilde;es sobre o PostgreSQL podem ser encontradas na homepage do PostgreSQL em:</P> <P>Outras listas de discuss&otilde;es e informa&ccedil;&otilde;es sobre o PostgreSQL podem ser encontradas na homepage do PostgreSQL em:</P>
<BLOCKQUOTE> <BLOCKQUOTE>
<A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A> <P><A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A></P>
</BLOCKQUOTE> </BLOCKQUOTE>
<P>O principal canal de IRC &eacute; o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar voc&ecirc; pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hisp&acirc;nico (<I>#postgresql-es</I>) e um franc&ecirc;s (<I>#postgresqlfr</I>) tamb&eacute;m existem na mesma rede. H&aacute; tamb&eacute;m um canal PostgreSQL na EFNet.</P> <P>O principal canal de IRC &eacute; o <I>#postgresql</I> na Freenode (<I>irc.freenode.net</I>). Para se conectar voc&ecirc; pode utilizar o comando Unix <code>irc -c '#postgresql' "$USER" irc.freenode.net</code> ou utilizar qualquer outro cliente de IRC. Um canal hisp&acirc;nico (<I>#postgresql-es</I>) e um franc&ecirc;s (<I>#postgresqlfr</I>) tamb&eacute;m existem na mesma rede. H&aacute; tamb&eacute;m um canal PostgreSQL na EFNet.</P>
...@@ -499,9 +499,9 @@ H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon ...@@ -499,9 +499,9 @@ H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon
<P>Se o <I>postmaster</I> n&atilde;o est&aacute; sendo executado, voc&ecirc; pode executar o n&uacute;cleo do <I>postgres</I> a partir da linha de comando, e digitar a sua senten&ccedil;a <SMALL>SQL</SMALL> diretamente. Isso &eacute; recomendado <B>somente</B> para fins de depura&ccedil;&atilde;o. Note que uma nova linha termina a consulta, e n&atilde;o um ponto-e-v&iacute;rgula. Se voc&ecirc; compilou com s&iacute;mbolos de depura&ccedil;&atilde;o, voc&ecirc; pode utilizar um depurador para ver o que est&aacute; acontecendo. Como o n&uacute;cleo (backend) n&atilde;o foi iniciado a partir do <I>postmaster</I>, ele n&atilde;o est&aacute; executando em um ambiente id&ecirc;ntico e problemas de itera&ccedil;&atilde;o com o n&uacute;cleo/travamento n&atilde;o podem ser reproduzidos.</P> <P>Se o <I>postmaster</I> n&atilde;o est&aacute; sendo executado, voc&ecirc; pode executar o n&uacute;cleo do <I>postgres</I> a partir da linha de comando, e digitar a sua senten&ccedil;a <SMALL>SQL</SMALL> diretamente. Isso &eacute; recomendado <B>somente</B> para fins de depura&ccedil;&atilde;o. Note que uma nova linha termina a consulta, e n&atilde;o um ponto-e-v&iacute;rgula. Se voc&ecirc; compilou com s&iacute;mbolos de depura&ccedil;&atilde;o, voc&ecirc; pode utilizar um depurador para ver o que est&aacute; acontecendo. Como o n&uacute;cleo (backend) n&atilde;o foi iniciado a partir do <I>postmaster</I>, ele n&atilde;o est&aacute; executando em um ambiente id&ecirc;ntico e problemas de itera&ccedil;&atilde;o com o n&uacute;cleo/travamento n&atilde;o podem ser reproduzidos.</P>
<P>Se o <i>postmaster</i> est&aacute; sendo executado, inicie o <i>psql</i> em uma janela, e ent&atilde;o encontre o <small>PID</small> do processo <i>postgres</i> utilizado pelo <i>psql</i> utilizando <pre>SELECT pg_backend_pid()</pre>. Utilize um depurador para anexar ao <small>PID</small> do <i>postgres</i>. Voc&ecirc; pode definir pontos de parada (<i>breakpoints</i>) no depurador e digitar consultas no <i>psql</i>. Se voc&ecirc; est&aacute; depurando a inicializa&ccedil;&atilde;o do <i>postgres</i>, voc&ecirc; pode definir PGOPTIONS="-W n" e ent&atilde;o iniciar o <i>psql</i>. Isto retardar&aacute; a inicializa&ccedil;&atilde;o por <i>n</i> segundos ent&atilde;o voc&ecirc; pode anexar o depurador ao processo, definir quaisquer pontos de parada e continuar pela sequ&ecirc;ncia de inicializa&ccedil;&atilde;o.</p> <P>Se o <i>postmaster</i> est&aacute; sendo executado, inicie o <i>psql</i> em uma janela, e ent&atilde;o encontre o <small>PID</small> do processo <i>postgres</i> utilizado pelo <i>psql</i> utilizando <code>SELECT pg_backend_pid()</code>. Utilize um depurador para anexar ao <small>PID</small> do <i>postgres</i>. Voc&ecirc; pode definir pontos de parada (<i>breakpoints</i>) no depurador e digitar consultas no <i>psql</i>. Se voc&ecirc; est&aacute; depurando a inicializa&ccedil;&atilde;o do <i>postgres</i>, voc&ecirc; pode definir PGOPTIONS="-W n" e ent&atilde;o iniciar o <i>psql</i>. Isto retardar&aacute; a inicializa&ccedil;&atilde;o por <i>n</i> segundos ent&atilde;o voc&ecirc; pode anexar o depurador ao processo, definir quaisquer pontos de parada e continuar pela sequ&ecirc;ncia de inicializa&ccedil;&atilde;o.</p>
<P>H&aacute; v&aacute;rias vari&aacute;veis de configura&ccedil;&atilde;o do servidor <pre>log_*</pre> que habilitam a exibi&ccedil;&atilde;o de estat&iacute;sticas que podem ser muito &uacute;teis para depura&ccedil;&atilde;o e medidas de performance.</P> <P>H&aacute; v&aacute;rias vari&aacute;veis de configura&ccedil;&atilde;o do servidor <code>log_*</code> que habilitam a exibi&ccedil;&atilde;o de estat&iacute;sticas que podem ser muito &uacute;teis para depura&ccedil;&atilde;o e medidas de performance.</P>
<P>Voc&ecirc; tamb&eacute;m pode compilar com perfil para ver que fun&ccedil;&otilde;es est&atilde;o demandando tempo de execu&ccedil;&atilde;o. Os arquivo de perfil do n&uacute;cleo (backend) ser&atilde;o colocados no diret&oacute;rio <I>pgsql/data/base/dbname</I>. O arquivo de perfil do cliente ser&aacute; colocado no diret&oacute;rio atual do cliente. O Linux requer uma compila&ccedil;&atilde;o com <I>-DLINUX_PROFILE</I> para cria&ccedil;&atilde;o dos perfis.</P> <P>Voc&ecirc; tamb&eacute;m pode compilar com perfil para ver que fun&ccedil;&otilde;es est&atilde;o demandando tempo de execu&ccedil;&atilde;o. Os arquivo de perfil do n&uacute;cleo (backend) ser&atilde;o colocados no diret&oacute;rio <I>pgsql/data/base/dbname</I>. O arquivo de perfil do cliente ser&aacute; colocado no diret&oacute;rio atual do cliente. O Linux requer uma compila&ccedil;&atilde;o com <I>-DLINUX_PROFILE</I> para cria&ccedil;&atilde;o dos perfis.</P>
...@@ -526,7 +526,7 @@ H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon ...@@ -526,7 +526,7 @@ H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon
<H4><A name="3.11">3.11</A>) Que tipo de hardware eu devo usar?</H4> <H4><A name="3.11">3.11</A>) Que tipo de hardware eu devo usar?</H4>
<P>Por causa do hardware de PC ser em sua maioria compat&iacute;vel, pessoas tendem a acreditar que todos os hardwares de PC são de mesma qualidade. Não &eacute; verdade. ECC RAM, SCSI e placas m&atilde;e de qualidade s&atilde;o mais confi&aacute;veis e t&ecirc;m uma melhor performance do que hardwares mais baratos. O PostgreSQL executar&aacute; em quase todo hardware, mas se a confiabilidade e a performance forem importantes &eacute; prudente pesquisar sobre as op&ccedil;&otilde;es de hardware. Nossas listas de discuss&atilde;o podem ser usadas para discutir op&ccedil;&otilde;es de hardware e dilemas.</P> <P>Por causa do hardware de PC ser em sua maioria compat&iacute;vel, pessoas tendem a acreditar que todos os hardwares de PC satilde;o de mesma qualidade. Natilde;o &eacute; verdade. ECC RAM, SCSI e placas m&atilde;e de qualidade s&atilde;o mais confi&aacute;veis e t&ecirc;m uma melhor performance do que hardwares mais baratos. O PostgreSQL executar&aacute; em quase todo hardware, mas se a confiabilidade e a performance forem importantes &eacute; prudente pesquisar sobre as op&ccedil;&otilde;es de hardware. Nossas listas de discuss&atilde;o podem ser usadas para discutir op&ccedil;&otilde;es de hardware e dilemas.</P>
<HR> <HR>
...@@ -543,7 +543,7 @@ H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon ...@@ -543,7 +543,7 @@ H&aacute; tamb&eacute;m uma lista de discuss&atilde;o dos desenvolvedores dispon
<P>Toda a consulta tem que ser avaliada, mesmo se voc&ecirc; s&oacute; quer os primeiros registros. Considere utilizar uma consulta que tenha um <SMALL>ORDER BY</SMALL>. Se h&aacute; um &iacute;ndice que combina com o <SMALL>ORDER BY</SMALL>, o PostgreSQL pode ser capaz de avaliar somente os primeiros registros requisitados, ou toda consulta tem que ser avaliada at&eacute; que os registros desejados tenham sido gerados.</P> <P>Toda a consulta tem que ser avaliada, mesmo se voc&ecirc; s&oacute; quer os primeiros registros. Considere utilizar uma consulta que tenha um <SMALL>ORDER BY</SMALL>. Se h&aacute; um &iacute;ndice que combina com o <SMALL>ORDER BY</SMALL>, o PostgreSQL pode ser capaz de avaliar somente os primeiros registros requisitados, ou toda consulta tem que ser avaliada at&eacute; que os registros desejados tenham sido gerados.</P>
<P>Para obter um registro rand&ocirc;mico, utilize: <P>Para obter um registro rand&ocirc;mico, utilize:</P>
<PRE> <PRE>
SELECT col SELECT col
FROM tab FROM tab
...@@ -639,7 +639,7 @@ N&uacute;mero m&aacute;ximo de &iacute;ndices em uma tabela? ilimitado ...@@ -639,7 +639,7 @@ N&uacute;mero m&aacute;ximo de &iacute;ndices em uma tabela? ilimitado
utilizados se uma tabela &eacute; maior do que o tamanho m&iacute;nimo e uma consulta utilizados se uma tabela &eacute; maior do que o tamanho m&iacute;nimo e uma consulta
seleciona somente uma porcentagem pequena de registros de uma tabela. Isto porque seleciona somente uma porcentagem pequena de registros de uma tabela. Isto porque
o acesso rand&ocirc;mico ao disco causado por uma busca por &iacute;ndice pode ser o acesso rand&ocirc;mico ao disco causado por uma busca por &iacute;ndice pode ser
mais lento do que uma leitura ao longo da tabela ou uma busca sequencial. mais lento do que uma leitura ao longo da tabela ou uma busca sequencial.</p>
<P>Para determinar se um &iacute;ndice pode ser utilizado, o PostgreSQL deve ter <P>Para determinar se um &iacute;ndice pode ser utilizado, o PostgreSQL deve ter
estat&iacute;sticas sobre a tabela. Estas estat&iacute;sticas s&atilde;o coletadas utilizando estat&iacute;sticas sobre a tabela. Estas estat&iacute;sticas s&atilde;o coletadas utilizando
...@@ -686,11 +686,10 @@ N&uacute;mero m&aacute;ximo de &iacute;ndices em uma tabela? ilimitado ...@@ -686,11 +686,10 @@ N&uacute;mero m&aacute;ximo de &iacute;ndices em uma tabela? ilimitado
<LI>A localidade padr&atilde;o <I>C</I> deve ser utilizada durante o <LI>A localidade padr&atilde;o <I>C</I> deve ser utilizada durante o
<i>initdb</i> porque n&atilde;o &eacute; poss&iacute;vel saber o pr&oacute;ximo/maior caracter <i>initdb</i> porque n&atilde;o &eacute; poss&iacute;vel saber o pr&oacute;ximo/maior caracter
em uma localidade que n&atilde;o seja a C. Voc&ecirc; pode criar um &iacute;ndice em uma localidade que n&atilde;o seja a C. Voc&ecirc; pode criar um &iacute;ndice
especial <PRE>text_pattern_ops</PRE> para tais casos que funcionam somente para especial <tt>text_pattern_ops</tt> para tais casos que funcionam somente para
indexa&ccedil;&atilde;o utilizando <PRE>LIKE</PRE>. indexa&ccedil;&atilde;o utilizando <tt>LIKE</tt>.
</LI> </LI>
</UL> </UL>
<P>
<P>Em vers&otilde;es anteriores a 8.0, &iacute;ndices frequentemente n&atilde;o podiam ser usados a menos que os tipos de dados correspodessem aos tipos da coluna do &iacute;ndice. Isto &eacute; particularmente verdadeiro para &iacute;ndices de coluna int2, int8 e numeric.</P> <P>Em vers&otilde;es anteriores a 8.0, &iacute;ndices frequentemente n&atilde;o podiam ser usados a menos que os tipos de dados correspodessem aos tipos da coluna do &iacute;ndice. Isto &eacute; particularmente verdadeiro para &iacute;ndices de coluna int2, int8 e numeric.</P>
...@@ -922,14 +921,15 @@ Veja a p&aacute;gina sobre <I>create_sequence</I> no manual para mais informa&cc ...@@ -922,14 +921,15 @@ Veja a p&aacute;gina sobre <I>create_sequence</I> no manual para mais informa&cc
FROM tab FROM tab
WHERE col IN (SELECT subcol FROM subtab); WHERE col IN (SELECT subcol FROM subtab);
</PRE> </PRE>
por: <p>por:</p>
<PRE> SELECT * <PRE> SELECT *
FROM tab FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col); WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
</PRE> </PRE>
<p>
Para isto ser r&aacute;pido, <CODE>subcol</CODE> deve ser uma coluna indexada. <P>A partir da vers&atilde;o 7.4, <CODE>IN</CODE> utiliza a mesma t&eacute;cnica de agrupamento do que consultas normais, e &eacute; recomendado utilizar <CODE>EXISTS</CODE>. Para isto ser r&aacute;pido, <CODE>subcol</CODE> deve ser uma coluna indexada.</P>
<P>A partir da vers&atilde;o 7.4, <CODE>IN</CODE> utiliza a mesma t&eacute;cnica de agrupamento do que consultas normais, e &eacute; recomendado utilizar <CODE>EXISTS</CODE>.
</p>
<H4><A name="4.23">4.23</A>) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?</H4> <H4><A name="4.23">4.23</A>) Como eu fa&ccedil;o uma jun&ccedil;&atilde;o externa (outer join)?</H4>
<P>PostgreSQL suporta jun&ccedil;&otilde;es externas utilizando a sintaxe padr&atilde;o do SQL. Aqui temos dois exemplos:</P> <P>PostgreSQL suporta jun&ccedil;&otilde;es externas utilizando a sintaxe padr&atilde;o do SQL. Aqui temos dois exemplos:</P>
...@@ -965,7 +965,7 @@ Para isto ser r&aacute;pido, <CODE>subcol</CODE> deve ser uma coluna indexada. < ...@@ -965,7 +965,7 @@ Para isto ser r&aacute;pido, <CODE>subcol</CODE> deve ser uma coluna indexada. <
<H4><A name="4.25">4.25</A>) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?</H4> <H4><A name="4.25">4.25</A>) Como eu retorno m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o?</H4>
<P>No 7.3, voc&ecirc; pode facilmente retornar m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o, <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>. <P>No 7.3, voc&ecirc; pode facilmente retornar m&uacute;ltiplos registros ou colunas de uma fun&ccedil;&atilde;o, <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P>
<H4><A name="4.26">4.26</A>) Por que eu n&atilde;o posso confiar na cria&ccedil;&atilde;o/remo&ccedil;&atilde;o de tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?</H4> <H4><A name="4.26">4.26</A>) Por que eu n&atilde;o posso confiar na cria&ccedil;&atilde;o/remo&ccedil;&atilde;o de tabelas tempor&aacute;rias em fun&ccedil;&otilde;es PL/PgSQL?</H4>
<P>PL/PgSQL armazena o conte&uacute;do da fun&ccedil;&atilde;o, e o efeito indesejado &eacute; que se uma fun&ccedil;&atilde;o PL/PgSQL acessa uma tabela tempor&aacute;ria, e aquela tabela &eacute; removida e criada novamente, e a fun&ccedil;&atilde;o &eacute; chamada novamente, a fun&ccedil;&atilde;o ir&aacute; falhar porque o conte&uacute;do armazenado da fun&ccedil;&atilde;o ainda apontar&aacute; para a tabela tempor&aacute;ria antiga. A solu&ccedil;&atilde;o &eacute; utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas tempor&aacute;rias no PL/PgSQL. Isto ir&aacute; fazer com que a consulta seja avaliada toda vez.</P> <P>PL/PgSQL armazena o conte&uacute;do da fun&ccedil;&atilde;o, e o efeito indesejado &eacute; que se uma fun&ccedil;&atilde;o PL/PgSQL acessa uma tabela tempor&aacute;ria, e aquela tabela &eacute; removida e criada novamente, e a fun&ccedil;&atilde;o &eacute; chamada novamente, a fun&ccedil;&atilde;o ir&aacute; falhar porque o conte&uacute;do armazenado da fun&ccedil;&atilde;o ainda apontar&aacute; para a tabela tempor&aacute;ria antiga. A solu&ccedil;&atilde;o &eacute; utilizar o <SMALL>EXECUTE</SMALL> para acesso a tabelas tempor&aacute;rias no PL/PgSQL. Isto ir&aacute; fazer com que a consulta seja avaliada toda vez.</P>
...@@ -973,7 +973,7 @@ Para isto ser r&aacute;pido, <CODE>subcol</CODE> deve ser uma coluna indexada. < ...@@ -973,7 +973,7 @@ Para isto ser r&aacute;pido, <CODE>subcol</CODE> deve ser uma coluna indexada. <
<H4><A name="4.27">4.27</A>) Que op&ccedil;&otilde;es para encripta&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H4> <H4><A name="4.27">4.27</A>) Que op&ccedil;&otilde;es para encripta&ccedil;&atilde;o est&atilde;o dispon&iacute;veis?</H4>
<UL> <UL>
<LI>No <I>contrib/pgcrypto</I> cont&eacute;m muitas fun&ccedil;&otilde;es de encripta&ccedil;&atilde;o para serem utilizados em consultas <SMALL>SQL</SMALL>.</li> <LI>No <I>contrib/pgcrypto</I> cont&eacute;m muitas fun&ccedil;&otilde;es de encripta&ccedil;&atilde;o para serem utilizados em consultas <SMALL>SQL</SMALL>.</li>
<LI>Para encriptar a transmiss&atilde;o do cliente ao servidor, o servidor deve ter a op&ccedil;&atilde;o <I>ssl</I> definida como <I>true</I> no <I>postgresql.conf</I>, e um registro <I>host</I> ou <I>hostssl</I> deve existir no <I>pg_hba.conf</I>, e o <I>sslmode</I> no cliente n&atilde;o deve estar <I>disable</I>. (Note que tamb&eacute;m &eacute; poss&iacute;vel utilizar outros esquemas de transporte encriptado, tais como stunnel ou ssh, ao inv&eacute;s da conex&atilde;o SSL nativa do PostgreSQL.) <LI>Para encriptar a transmiss&atilde;o do cliente ao servidor, o servidor deve ter a op&ccedil;&atilde;o <I>ssl</I> definida como <I>true</I> no <I>postgresql.conf</I>, e um registro <I>host</I> ou <I>hostssl</I> deve existir no <I>pg_hba.conf</I>, e o <I>sslmode</I> no cliente n&atilde;o deve estar <I>disable</I>. (Note que tamb&eacute;m &eacute; poss&iacute;vel utilizar outros esquemas de transporte encriptado, tais como stunnel ou ssh, ao inv&eacute;s da conex&atilde;o SSL nativa do PostgreSQL.)</LI>
<LI>Senhas dos usu&aacute;rios do banco de dados s&atilde;o automaticamente encriptadas quando armazenadas na vers&atilde;o 7.3. Em vers&otilde;es anteriores, voc&ecirc; deve habilitar a op&ccedil;&atilde;o <I>PASSWORD_ENCRYPTION</I> no <I>postgresql.conf</I>.</li> <LI>Senhas dos usu&aacute;rios do banco de dados s&atilde;o automaticamente encriptadas quando armazenadas na vers&atilde;o 7.3. Em vers&otilde;es anteriores, voc&ecirc; deve habilitar a op&ccedil;&atilde;o <I>PASSWORD_ENCRYPTION</I> no <I>postgresql.conf</I>.</li>
<li>O servidor pode executar utilizando um sistema de arquivos encriptado.</li> <li>O servidor pode executar utilizando um sistema de arquivos encriptado.</li>
</UL> </UL>
......
...@@ -129,7 +129,7 @@ ...@@ -129,7 +129,7 @@
<H2 align="center">Obecn otzky</H2> <H2 align="center">Obecn otzky</H2>
<H4><A name="1.1">1.1</A>) Co je PostgreSQL? Jak se vyslovuje?</H2> <H4><A name="1.1">1.1</A>) Co je PostgreSQL? Jak se vyslovuje?</H4>
<P>PostgreSQL se vyslovuje <I>Post-Gres-Q-L</I>. Zvukov zznam je <P>PostgreSQL se vyslovuje <I>Post-Gres-Q-L</I>. Zvukov zznam je
dostupn na adrese <A href="http://www.postgresql.org/postgresql.mp3"></A>.</P> dostupn na adrese <A href="http://www.postgresql.org/postgresql.mp3"></A>.</P>
...@@ -206,18 +206,18 @@ ...@@ -206,18 +206,18 @@
Win32 knihovny <I>libpq</I> a <I>psql</I>. K databzi PostgerSQL lze pistupovat skrze Win32 knihovny <I>libpq</I> a <I>psql</I>. K databzi PostgerSQL lze pistupovat skrze
rozhran <SMALL>ODBC</SMALL>.</P> rozhran <SMALL>ODBC</SMALL>.</P>
<P><STRONG>Server</STRONG><P> <P><STRONG>Server</STRONG></P>
<P>Server me bt na WindowsNT a Win2k provozovn pouze s knihovnou <P>Server me bt na WindowsNT a Win2k provozovn pouze s knihovnou
Cygwin, Cygnus Unix/NT porting library. Vce <I>pgsql/doc/FAQ_MSWIN</I> v Cygwin, Cygnus Unix/NT porting library. Vce <I>pgsql/doc/FAQ_MSWIN</I> v
distribuci nebo MS Windows FAQ na adrese distribuci nebo MS Windows FAQ na adrese
<A href="http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A>. <A href="http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A>.</P>
<P>Na nativnm portu pro MS Win NT/2000/XP se pracuje. Dal informace <P>Na nativnm portu pro MS Win NT/2000/XP se pracuje. Dal informace
o aktulnm stavu PostgreSQL pro Windows naleznet na adrese o aktulnm stavu PostgreSQL pro Windows naleznet na adrese
<A href="http://techdocs.postgresql.org/guides/Windows">http://techdocs.postgresql.org/guides/Windows</A> a <A href="http://techdocs.postgresql.org/guides/Windows">http://techdocs.postgresql.org/guides/Windows</A> a
<A href="http://momjian.postgresql.org/main/writings/pgsql/win32.html"> <A href="http://momjian.postgresql.org/main/writings/pgsql/win32.html">
http://momjian.postgresql.org/main/writings/pgsql/win32.html</A>. http://momjian.postgresql.org/main/writings/pgsql/win32.html</A>.</P>
<P>Existujc port pro Novell Netware 6 naleznete na <P>Existujc port pro Novell Netware 6 naleznete na
<A href="http://forge.novell.com">http://forge.novell.com</A>.</P> <A href="http://forge.novell.com">http://forge.novell.com</A>.</P>
...@@ -238,7 +238,7 @@ ...@@ -238,7 +238,7 @@
subscribe subscribe
end end
</PRE> </PRE>
na adresu <A href="mailto:pgsql-general-request@PostgreSQL.org"> <P>na adresu <A href="mailto:pgsql-general-request@PostgreSQL.org">
pgsql-general-request@PostgreSQL.org</A>.</P> pgsql-general-request@PostgreSQL.org</A>.</P>
<P>Mete si vydat denn pehled (diggest), kter m zhruba 30K denn <P>Mete si vydat denn pehled (diggest), kter m zhruba 30K denn
...@@ -254,7 +254,7 @@ ...@@ -254,7 +254,7 @@
<P>Seznam dalch konferenc naleznete na strnkch PostgreSQL:</P> <P>Seznam dalch konferenc naleznete na strnkch PostgreSQL:</P>
<BLOCKQUOTE> <BLOCKQUOTE>
<A href="http://www.postgresql.org">http://www.postgresql.org</A> <P><A href="http://www.postgresql.org">http://www.postgresql.org</A></P>
</BLOCKQUOTE> </BLOCKQUOTE>
<H4><A name="1.7">1.7</A>) Jak je posledn verze?</H4> <H4><A name="1.7">1.7</A>) Jak je posledn verze?</H4>
...@@ -315,7 +315,7 @@ ...@@ -315,7 +315,7 @@
<P>Nejdve si sthnte nejnovj zdroje a pette si vvojskou <P>Nejdve si sthnte nejnovj zdroje a pette si vvojskou
dokumentaci na naem webu nebo v distribuci. Pak se pihlate do dokumentaci na naem webu nebo v distribuci. Pak se pihlate do
konferenc <I>pgsql-hackers</I> a <P>pgsql-patches</I>. Kvalitn zplaty poslejte do konferenc <I>pgsql-hackers</I> a <I>pgsql-patches</I>. Kvalitn zplaty poslejte do
pgsql-patches.</P> pgsql-patches.</P>
<P>Prvo commit m v <SMALL>CVS</SMALL> archivu asi tincti lid. Kad z nich poslal <P>Prvo commit m v <SMALL>CVS</SMALL> archivu asi tincti lid. Kad z nich poslal
...@@ -341,7 +341,7 @@ ...@@ -341,7 +341,7 @@
<SMALL>DBMS</SMALL>, nap. transakce, vnoen dotazy, spout, pohledy, kontrolu <SMALL>DBMS</SMALL>, nap. transakce, vnoen dotazy, spout, pohledy, kontrolu
referenn integrity a sofistikovan zamykn. Podporuje nkter referenn integrity a sofistikovan zamykn. Podporuje nkter
vlastnosti, kter tyto systmy nemaj, uivatelem definovan typy, vlastnosti, kter tyto systmy nemaj, uivatelem definovan typy,
ddinost, pravidla, MVCC redukujc zamykn.</BR></BR></DD> ddinost, pravidla, MVCC redukujc zamykn.<BR><BR></DD>
<DT><B>Vkon</B></DT> <DT><B>Vkon</B></DT>
<DD>Vkonnostn je na tom PostgreSQL podobn jako dal komern ale <DD>Vkonnostn je na tom PostgreSQL podobn jako dal komern ale
...@@ -363,7 +363,7 @@ ...@@ -363,7 +363,7 @@
kd s minimem chyb. Kad verze je vce ne msc v beta testovn, kd s minimem chyb. Kad verze je vce ne msc v beta testovn,
a nae historie verz ukazuje, e meme nabdnout stabiln, solidn a nae historie verz ukazuje, e meme nabdnout stabiln, solidn
verze, kter jsou pipraveny pro reln nasazen. V tto oblasti verze, kter jsou pipraveny pro reln nasazen. V tto oblasti
jsme srovnateln s dalmi databzemi.</BR></BR></DD> jsme srovnateln s dalmi databzemi.<BR><BR></DD>
<DT><B>Podpora</B></DT> <DT><B>Podpora</B></DT>
<DD>Na na mailov konferenci mete kontaktovat velkou skupinu <DD>Na na mailov konferenci mete kontaktovat velkou skupinu
...@@ -375,7 +375,7 @@ ...@@ -375,7 +375,7 @@
kte vyaduj podporu ke konkrtnm ppadm, existuje placen kte vyaduj podporu ke konkrtnm ppadm, existuje placen
podpora (<A href="#1.6">FAQ sekce 1.6</A>).<BR><BR></DD> podpora (<A href="#1.6">FAQ sekce 1.6</A>).<BR><BR></DD>
<DT><B>Cena</B><DT> <DT><B>Cena</B></DT>
<DD>PosgreSQL lze voln pouvat pro nekomern i komern pouit. <DD>PosgreSQL lze voln pouvat pro nekomern i komern pouit.
Mete do svch produkt pidat n kd bez omezen, respektive Mete do svch produkt pidat n kd bez omezen, respektive
v souladu s podmnkami na licenn smlouvy (v duchu BSD licence).<BR> v souladu s podmnkami na licenn smlouvy (v duchu BSD licence).<BR>
...@@ -553,7 +553,7 @@ ...@@ -553,7 +553,7 @@
napklad:</P> napklad:</P>
<PRE> <PRE>
cd /usr/local/pgsql cd /usr/local/pgsql
./bin/postmaster > server.log 2>&1 & ./bin/postmaster > server.log 2>&amp;1 &amp;
</PRE> </PRE>
<P>Tm se vytvo log v adresi PostgreSQL, Tento soubor obsahuje uiten <P>Tm se vytvo log v adresi PostgreSQL, Tento soubor obsahuje uiten
informace o problmech a chybch vyskytlch se na serveru. Postmaster m informace o problmech a chybch vyskytlch se na serveru. Postmaster m
...@@ -773,7 +773,7 @@ ...@@ -773,7 +773,7 @@
<P>Jinak je tomu v ppad pouit <SMALL>LIMIT</SMALL> a <SMALL>ORDER BY</SMALL>, pi kterm se vtinou <P>Jinak je tomu v ppad pouit <SMALL>LIMIT</SMALL> a <SMALL>ORDER BY</SMALL>, pi kterm se vtinou
index pouije, vsledkem je pouze mal st tabulky. Funkce MAX() a index pouije, vsledkem je pouze mal st tabulky. Funkce MAX() a
MIN() nepouvaj indexy, ale je mon tut hodnotu zskat: MIN() nepouvaj indexy, ale je mon tut hodnotu zskat:</P>
<PRE> <PRE>
SELECT col SELECT col
FROM tab FROM tab
...@@ -791,7 +791,7 @@ ...@@ -791,7 +791,7 @@
<UL> <UL>
<LI>vzor <SMALL>LIKE</SMALL> nesm zanat <I>%</I></LI> <LI>vzor <SMALL>LIKE</SMALL> nesm zanat <I>%</I></LI>
<LI><I>~</I> regulrn vraz mus zanat <I>^</I></LI> <LI><I>~</I> regulrn vraz mus zanat <I>^</I></LI>
</UL> </UL></LI>
<LI>vzor nesm zanat intervalem, nap. [a-e]</LI> <LI>vzor nesm zanat intervalem, nap. [a-e]</LI>
<LI>vyhledvan, kter nen Case sensitiv jako je <SMALL>ILIKE</SMALL> nebo <I>~*</I> <LI>vyhledvan, kter nen Case sensitiv jako je <SMALL>ILIKE</SMALL> nebo <I>~*</I>
nepouv indexy. Mete ale pout funkcionln indexy, kter jsou nepouv indexy. Mete ale pout funkcionln indexy, kter jsou
...@@ -926,7 +926,7 @@ BYTEA bytea pole byt ...@@ -926,7 +926,7 @@ BYTEA bytea pole byt
<P>Konen mete pout <SMALL>OID</SMALL> hodnotu vrcenou pkazem <SMALL>INSERT</SMALL>, ale to je <P>Konen mete pout <SMALL>OID</SMALL> hodnotu vrcenou pkazem <SMALL>INSERT</SMALL>, ale to je
pravdpodobn nejmn penositeln een. V Perlu pi pouit DBI pravdpodobn nejmn penositeln een. V Perlu pi pouit DBI
modulu Edmunda Mergleho DBD:Pg oid hodnotu zskme <I>$sth->{pg_oid_status}</I> modulu Edmunda Mergleho DBD:Pg oid hodnotu zskme <I>$sth->{pg_oid_status}</I>
po kadm <I>$sth->execute()</I>. po kadm <I>$sth->execute()</I>.</P>
<H4><A name="4.15.3">4.15.3</A>) Nepovede <I>currval()</I> a <I>nextval()</I> k rozhozen <H4><A name="4.15.3">4.15.3</A>) Nepovede <I>currval()</I> a <I>nextval()</I> k rozhozen
podmnek pi soubhu s jinmi uivateli?</H4> podmnek pi soubhu s jinmi uivateli?</H4>
...@@ -986,7 +986,7 @@ BYTEA bytea pole byt ...@@ -986,7 +986,7 @@ BYTEA bytea pole byt
<LI> pidn, vkldn (append, insert)</LI> <LI> pidn, vkldn (append, insert)</LI>
<LI> OID, serial value (OID, serial value)</LI> <LI> OID, serial value (OID, serial value)</LI>
<LI> portal, kurzor (portal, cursor)</LI> <LI> portal, kurzor (portal, cursor)</LI>
<LI> range variable, jmno tabulky, alias tabulky (range</LI> <LI> range variable, jmno tabulky, alias tabulky (range
variable, table name, table alias)</LI> variable, table name, table alias)</LI>
</UL> </UL>
...@@ -1038,13 +1038,13 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); ...@@ -1038,13 +1038,13 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
<P>Dvj verze (ped 7.4) spojovali vnoen dotazy k vnjm sekvennm <P>Dvj verze (ped 7.4) spojovali vnoen dotazy k vnjm sekvennm
tenm vsledku poddotazu pro kad dek vnjho dotazu. Pokud poddotaz tenm vsledku poddotazu pro kad dek vnjho dotazu. Pokud poddotaz
vrtil nkolik mlo dk <SMALL>IN</SMALL> bylo rychl. Pro ostatn ppady je vhodn vrtil nkolik mlo dk <SMALL>IN</SMALL> bylo rychl. Pro ostatn ppady je vhodn
nahradit <SMALL>IN</SMALL> <SMALL>EXISTS</SMALL>: nahradit <SMALL>IN</SMALL> <SMALL>EXISTS</SMALL>:</P>
<PRE> <PRE>
SELECT * SELECT *
FROM tab FROM tab
WHERE col IN (SELECT subcol FROM subtab); WHERE col IN (SELECT subcol FROM subtab);
</PRE> </PRE>
na: <p>na:</p>
<PRE> <PRE>
SELECT * SELECT *
FROM tab FROM tab
...@@ -1101,7 +1101,7 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); ...@@ -1101,7 +1101,7 @@ CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
<P>V PostgreSQL 7.3 mete jednodue vracet vce dk nebo sloupc z <P>V PostgreSQL 7.3 mete jednodue vracet vce dk nebo sloupc z
funkce, viz: funkce, viz:
<A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>. <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P>
<H4><A name="4.26">4.26</A>) Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL funkcch?</H4> <H4><A name="4.26">4.26</A>) Pro nelze spolehliv vytvet a ruit doasn tabulky v PL/pgSQL funkcch?</H4>
......
...@@ -152,7 +152,7 @@ ...@@ -152,7 +152,7 @@
<P>PostgreSQL se prononce <I>Post-Gres-Q-L</I>. Un fichier audio est <P>PostgreSQL se prononce <I>Post-Gres-Q-L</I>. Un fichier audio est
disponible sur <A disponible sur <A
HREF="http://www.postgresql.org/postgresql.mp3">http://www.postgresql.org/postgresql.mp3</A> href="http://www.postgresql.org/postgresql.mp3">http://www.postgresql.org/postgresql.mp3</A>
pour ceux souhaitant entendre la prononciation.</P> pour ceux souhaitant entendre la prononciation.</P>
<P>PostgreSQL est une amélioration du système de gestion de bases <P>PostgreSQL est une amélioration du système de gestion de bases
...@@ -173,7 +173,7 @@ ...@@ -173,7 +173,7 @@
développement de PostgreSQL. C'est un projet soutenu par une développement de PostgreSQL. C'est un projet soutenu par une
communauté sans être contrôlé par une société. Pour y contribuer, communauté sans être contrôlé par une société. Pour y contribuer,
voir la FAQ des développeurs sur <A voir la FAQ des développeurs sur <A
HREF="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">http://www.postgresql.org/docs/faqs/FAQ_DEV.html</A>.</P> href="http://www.postgresql.org/docs/faqs/FAQ_DEV.html">http://www.postgresql.org/docs/faqs/FAQ_DEV.html</A>.</P>
<P>Les auteurs de PostgreSQL 1.01 étaient Andrew Yu et Jolly Chen. <P>Les auteurs de PostgreSQL 1.01 étaient Andrew Yu et Jolly Chen.
Beaucoup d'autres personnes ont contribué au portage, aux tests, Beaucoup d'autres personnes ont contribué au portage, aux tests,
...@@ -292,7 +292,7 @@ ...@@ -292,7 +292,7 @@
PostgreSQL sur le site web de PostgreSQL&nbsp;:</P> PostgreSQL sur le site web de PostgreSQL&nbsp;:</P>
<BLOCKQUOTE> <BLOCKQUOTE>
<A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A> <p><A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A></p>
</BLOCKQUOTE> </BLOCKQUOTE>
<P>Il y a aussi un canal IRC sur Freenode et EFNet, le canal <P>Il y a aussi un canal IRC sur Freenode et EFNet, le canal
...@@ -819,7 +819,7 @@ ...@@ -819,7 +819,7 @@
l'intégralité de la requête peut être évaluée, jusqu'à générer les lignes l'intégralité de la requête peut être évaluée, jusqu'à générer les lignes
désirées.</P> désirées.</P>
<P>Pour faire un <SMALL>SELECT</SMALL> sur une ligne aléatoire&nbsp;: <P>Pour faire un <SMALL>SELECT</SMALL> sur une ligne aléatoire&nbsp;:</P>
<PRE> <PRE>
SELECT colonne SELECT colonne
FROM table FROM table
...@@ -1004,7 +1004,6 @@ ...@@ -1004,7 +1004,6 @@
<LI>La locale <I>C</I> par défaut doit être utilisée lors de <LI>La locale <I>C</I> par défaut doit être utilisée lors de
<i>initdb</i>.</LI> <i>initdb</i>.</LI>
</UL> </UL>
<P>
<p>Dans les versions antérieures à la 8.0, les indexs ne peuvent souvent <p>Dans les versions antérieures à la 8.0, les indexs ne peuvent souvent
pas être utilisés sauf si les types de données correspondent exactement au pas être utilisés sauf si les types de données correspondent exactement au
...@@ -1398,7 +1397,7 @@ BYTEA bytea tableau d'octets (accepte les octets nuls) ...@@ -1398,7 +1397,7 @@ BYTEA bytea tableau d'octets (accepte les octets nuls)
<P>A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes ou <P>A partir de la 7.3, vous pouvez facilement renvoyer plusieurs lignes ou
colonnes à partir d'une fonction, colonnes à partir d'une fonction,
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions"> <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">
http://techdocs.postgresql.org/guides/SetReturningFunctions</a>. http://techdocs.postgresql.org/guides/SetReturningFunctions</a>.</P>
<H4><A name="4.26">4.26</A>) Pourquoi ne puis-je pas créer/supprimer des <H4><A name="4.26">4.26</A>) Pourquoi ne puis-je pas créer/supprimer des
tables temporaires dans les fonctions PL/PgSQL de façon stable&nbsp;?</H4> tables temporaires dans les fonctions PL/PgSQL de façon stable&nbsp;?</H4>
...@@ -1422,7 +1421,7 @@ BYTEA bytea tableau d'octets (accepte les octets nuls) ...@@ -1422,7 +1421,7 @@ BYTEA bytea tableau d'octets (accepte les octets nuls)
exister dans <I>pg_hba.conf</I>, et le <I>sslmode</I> du client ne doit pas exister dans <I>pg_hba.conf</I>, et le <I>sslmode</I> du client ne doit pas
être <I>désactivée</I>. Notez qu'il est aussi possible d'utiliser un être <I>désactivée</I>. Notez qu'il est aussi possible d'utiliser un
transport crypté d'une troisième partie, tel que stunnel ou ssh, plutôt que transport crypté d'une troisième partie, tel que stunnel ou ssh, plutôt que
les connexions SSL natives de PostgreSQL. les connexions SSL natives de PostgreSQL.</LI>
<LI>Les mots de passe des utilisateurs sont automatiquement cryptés depuis <LI>Les mots de passe des utilisateurs sont automatiquement cryptés depuis
la version 7.3. Pour les versions précédentes, vous devez activer l'option la version 7.3. Pour les versions précédentes, vous devez activer l'option
<I>PASSWORD_ENCRYPTION</I> dans <I>postgresql.conf</I>.</LI> <I>PASSWORD_ENCRYPTION</I> dans <I>postgresql.conf</I>.</LI>
......
...@@ -212,7 +212,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p> ...@@ -212,7 +212,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
<p>Eine Portierung für Novell Netware 6 gibt es unter <a href="http://forge.novell.com">http://forge.novell.com</a>.</p> <p>Eine Portierung für Novell Netware 6 gibt es unter <a href="http://forge.novell.com">http://forge.novell.com</a>.</p>
<p>Für OS/2 (eComStation) gibt es eine Version hier: <p>Für OS/2 (eComStation) gibt es eine Version hier:
<a href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F">http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a> <a href="http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F">http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F</a></p>
<h4><a name="1.5">1.5</a>) Woher bekomme ich PostgreSQL?</h4> <h4><a name="1.5">1.5</a>) Woher bekomme ich PostgreSQL?</h4>
...@@ -223,7 +223,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p> ...@@ -223,7 +223,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
<h4><a name="1.6">1.6</a>) Wo bekomme ich Support für PostgreSQL?</h4> <h4><a name="1.6">1.6</a>) Wo bekomme ich Support für PostgreSQL?</h4>
<p>Die zentrale (englischsprachige) Mailing-Liste ist: <p>Die zentrale (englischsprachige) Mailing-Liste ist:
<a href="mailto:pgsql-general@postgresql.org">mailto:pgsql-general@postgresql.org</a> . <a href="mailto:pgsql-general@postgresql.org">mailto:pgsql-general@postgresql.org</a> .</p>
<p>Die Liste ist Themen vorbehalten, die PostgreSQL betreffen. Die Anmeldung <p>Die Liste ist Themen vorbehalten, die PostgreSQL betreffen. Die Anmeldung
erfolgt mit einer Email an die Adresse <a href="mailto:pgsql-general-request@postgresql.org">pgsql-general-request@postgresql.org</a> mit folgenden Zeilen im Text erfolgt mit einer Email an die Adresse <a href="mailto:pgsql-general-request@postgresql.org">pgsql-general-request@postgresql.org</a> mit folgenden Zeilen im Text
...@@ -260,7 +260,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p> ...@@ -260,7 +260,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
<p>Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich auf der PostgreSQL-Homepage:</p> <p>Weitere Mailinglisten und Informationen zu PostgreSQL befinden sich auf der PostgreSQL-Homepage:</p>
<blockquote> <blockquote>
<a href="http://www.postgresql.org">http://www.postgresql.org</a> <p><a href="http://www.postgresql.org">http://www.postgresql.org</a></p>
</blockquote> </blockquote>
<p>Es gibt außerdem einen IRC-Channel bei EFNet und bei Freenode, Channel <p>Es gibt außerdem einen IRC-Channel bei EFNet und bei Freenode, Channel
<em>#PostgreSQL</em>. Unter UNIX/Linux können Sie mit z.B. <em>#PostgreSQL</em>. Unter UNIX/Linux können Sie mit z.B.
...@@ -341,7 +341,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p> ...@@ -341,7 +341,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
<h4><a name="1.13">1.13</a>) Wie sende ich einen Fehlerbericht?</h4> <h4><a name="1.13">1.13</a>) Wie sende ich einen Fehlerbericht?</h4>
<p>Bitte besuchen Sie die PostgreSQL-BugTool-Seite <a href="http://www.postgresql.org/bugform.html">http://www.postgresql.org/bugform.html</a>, <p>Bitte besuchen Sie die PostgreSQL-BugTool-Seite <a href="http://www.postgresql.org/bugform.html">http://www.postgresql.org/bugform.html</a>,
die Hinweise und Anleitungen zur Einreichung von Fehlerberichten enthält. die Hinweise und Anleitungen zur Einreichung von Fehlerberichten enthält.</p>
<p>Überprüfe auch den ftp-Server <a href="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a>, <p>Überprüfe auch den ftp-Server <a href="ftp://ftp.postgresql.org/pub/">ftp://ftp.postgresql.org/pub/</a>,
um nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches gibt.</p> um nachzusehen, ob es eine neuere PostgreSQL-Version oder neue Patches gibt.</p>
...@@ -475,7 +475,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p> ...@@ -475,7 +475,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
</a>) und Rekall (<a href="http://www.thekompany.com/products/rekall/"> </a>) und Rekall (<a href="http://www.thekompany.com/products/rekall/">
http://www.thekompany.com/products/rekall/</a>, GPL/proprietär). Es gibt http://www.thekompany.com/products/rekall/</a>, GPL/proprietär). Es gibt
außerdem phpPgAdmin (<a href="http://phppgadmin.sourceforge.net/"> außerdem phpPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
http://phppgadmin.sourceforge.net/ </a>), eine web-basierte Schnittstelle. http://phppgadmin.sourceforge.net/ </a>), eine web-basierte Schnittstelle. </p>
<h4><a name="2.4">2.4</a>) Welche Programmiersprachen und Schnittstellen gibt es?</h4> <h4><a name="2.4">2.4</a>) Welche Programmiersprachen und Schnittstellen gibt es?</h4>
...@@ -500,7 +500,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p> ...@@ -500,7 +500,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
(Bereich <em>Drivers/Interfaces</em>) bezogen werden. (Bereich <em>Drivers/Interfaces</em>) bezogen werden.
</p> </p>
<hr /> <hr />
<h2 align="center">Administrative Fragen</h2><p> <h2 align="center">Administrative Fragen</h2>
<h4><a name="3.1">3.1</a>) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?</h4> <h4><a name="3.1">3.1</a>) Wie installiere ich PostgreSQL woanders als in /usr/local/pgsql?</h4>
...@@ -632,7 +632,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p> ...@@ -632,7 +632,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
<p>Wenn der <em>postmaster</em> hingegen läuft, führen Sie <em>psql</em> in einem Fenster aus, <p>Wenn der <em>postmaster</em> hingegen läuft, führen Sie <em>psql</em> in einem Fenster aus,
ermitteln Sie die Prozessnummer (<small>PID</small>) des <em>postgres</em>-Prozesses, der von <em>psql</em> ermitteln Sie die Prozessnummer (<small>PID</small>) des <em>postgres</em>-Prozesses, der von <em>psql</em>
verwendet wird (mit <pre>SELECT pg_backend_pid()</pre>). Binden Sie einen Debugger an diese <small>PID</small> verwendet wird (mit <code>SELECT pg_backend_pid()</code>). Binden Sie einen Debugger an diese <small>PID</small>
und führen Sie Abfragen von <em>psql</em> aus. Wenn Sie den postgres-Serverstart analysieren und führen Sie Abfragen von <em>psql</em> aus. Wenn Sie den postgres-Serverstart analysieren
wollen, setzen Sie die Umgebungsvariable <em>PGOPTIONS="-W </em>n<em>"</em>, und starten Sie wollen, setzen Sie die Umgebungsvariable <em>PGOPTIONS="-W </em>n<em>"</em>, und starten Sie
dann <em>psql</em>. Dies verzögert den Start um <em>n</em> Sekunden, damit Sie einen Debugger an dann <em>psql</em>. Dies verzögert den Start um <em>n</em> Sekunden, damit Sie einen Debugger an
...@@ -728,7 +728,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p> ...@@ -728,7 +728,7 @@ href="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</a>).</p>
<h4><a name="4.2">4.2</a>) Wie wähle ich per <small>SELECT</small>-Anweisung nur die ersten paar <h4><a name="4.2">4.2</a>) Wie wähle ich per <small>SELECT</small>-Anweisung nur die ersten paar
Zeilen bzw. eine beliebige Zeile in einer Abfrage aus?</h4> Zeilen bzw. eine beliebige Zeile in einer Abfrage aus?</h4>
<p>Vgl. die <small>FETCH</small> Man-Page, oder benutzen Sie <small>SELECT ... LIMIT...</small> . <p>Vgl. die <small>FETCH</small> Man-Page, oder benutzen Sie <small>SELECT ... LIMIT...</small> .</p>
<p>Selbst wenn Sie nur die ersten paar Zeilen einer Tabelle abfragen möchten, <p>Selbst wenn Sie nur die ersten paar Zeilen einer Tabelle abfragen möchten,
muß unter Umständen die komplette Abfrage abgearbeitet werden. Ziehen Sie also muß unter Umständen die komplette Abfrage abgearbeitet werden. Ziehen Sie also
...@@ -1123,7 +1123,7 @@ BYTEA bytea Bytearray mit variabler Länge (auch für ...@@ -1123,7 +1123,7 @@ BYTEA bytea Bytearray mit variabler Länge (auch für
durch Block und Offset Werte zu identifizieren. T<small>ID</small>s durch Block und Offset Werte zu identifizieren. T<small>ID</small>s
verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie verändern sich, sobald Zeilen verändert oder zurückgeladen werden. Sie
werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu werden in Indexeinträgen benutzt um auf die physikalischen Zeilen zu
zeigen. zeigen.</p>
<h4><a name="4.16">4.16</a>) Welche Bedeutung haben die verschiedenen Ausdrücke, die in <h4><a name="4.16">4.16</a>) Welche Bedeutung haben die verschiedenen Ausdrücke, die in
PostgreSQL benutzt werden (z.B. attribute, class,...)?</h4> PostgreSQL benutzt werden (z.B. attribute, class,...)?</h4>
......
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
<HTML> <HTML>
<HEAD> <HEAD>
<TITLE>PostgreSQL FAQ in Japanese</TITLE> <TITLE>PostgreSQL FAQ in Japanese</TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=x-euc-jp">
</HEAD> </HEAD>
<BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF"> <BODY BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#FF0000" VLINK="#A00000" ALINK="#0000FF">
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=x-euc-jp">
<H1> <H1>
PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)</H1> PostgreSQL(ポストグレス・キュー・エル)についてよくある質問とその解答(FAQ)</H1>
<P> <P>
...@@ -13,20 +13,19 @@ PostgreSQL( ...@@ -13,20 +13,19 @@ PostgreSQL(
現在の維持管理者: Bruce Momjian (<A 現在の維持管理者: Bruce Momjian (<A
HREF="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR> HREF="mailto:pgman@candle.pha.pa.us">pgman@candle.pha.pa.us</A>)<BR>
Maintainer of Japanese Translation: Jun Kuwamura (<A Maintainer of Japanese Translation: Jun Kuwamura (<A
HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)<BR><P> HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)<BR></P>
<P> <P>
この文書の最新版は この文書の最新版は
"http://www.postgresql.org/files/documentation/faqs/FAQ.html"> <a href="http://www.postgresql.org/files/documentation/faqs/FAQ.html">
http://www.postgresql.org/files/documentation/faqs/FAQ.html</A></P> http://www.postgresql.org/files/documentation/faqs/FAQ.html</A></P>
で見ることができます。 で見ることができます。
<P> <P>
プラットホームに特有の質問については: プラットホームに特有の質問については:
"http://www.postgresql.org/docs/faq/"> <a href="http://www.postgresql.org/docs/faq/">
http://www.postgresql.org/docs/faq/</A></P> http://www.postgresql.org/docs/faq/</A></P>
<BR>に回答があります。 <BR>に回答があります。
<P> <PRE>
<SMALL><PRE>
(以下、訳者による注釈を [訳注: と ] とで囲んで記します。) (以下、訳者による注釈を [訳注: と ] とで囲んで記します。)
[訳注: [訳注:
日本語版製作についてのメモは最後尾へ移動しました。 日本語版製作についてのメモは最後尾へ移動しました。
...@@ -42,11 +41,9 @@ HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)<BR><P> ...@@ -42,11 +41,9 @@ HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)<BR><P>
2005年01月12日 桑村 潤 2005年01月12日 桑村 潤
] ]
</PRE></SMALL> </PRE>
<P>
<HR> <HR>
<P>
<H2 align="center">一般的な質問</H2> <H2 align="center">一般的な質問</H2>
...@@ -133,15 +130,14 @@ HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)<BR><P> ...@@ -133,15 +130,14 @@ HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)<BR><P>
<A HREF="#5.2">5.2</A>) PostgreSQL 用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献したいのですが?<BR> <A HREF="#5.2">5.2</A>) PostgreSQL 用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献したいのですが?<BR>
<A HREF="#5.3">5.3</A>) タプルを返す C言語の関数はどのように書きますか?<BR> <A HREF="#5.3">5.3</A>) タプルを返す C言語の関数はどのように書きますか?<BR>
<A HREF="#5.4">5.4</A>) ソース・ファイルを変更しました。再コンパイルしても変化が見られないのはなぜですか?<BR> <A HREF="#5.4">5.4</A>) ソース・ファイルを変更しました。再コンパイルしても変化が見られないのはなぜですか?<BR>
<P>
<HR> <HR>
<H2 align="center">一般的な質問</H2> <H2 align="center">一般的な質問</H2>
<P>
<H4><A NAME="1.1">1.1</A>) PostgreSQL とは何ですか? 何と読みますか?</H4> <H4><A NAME="1.1">1.1</A>) PostgreSQL とは何ですか? 何と読みますか?</H4>
<P>PostgreSQLは<I>Post-Gres-Q-L</I>(ポスト - グレス - キュー - エル) と発音します。</P> <P>PostgreSQLは<I>Post-Gres-Q-L</I>(ポスト - グレス - キュー - エル) と発音します。</P>
<P>PostgreSQL は次世代 <SMALL>DBMS</SMALL> 研究用のプロトタイプであった POSTGRES データベース管理システムの改良版です(このため、今でもときどき "Postgres" と呼ばれることがあります)。PostgreSQL は POSTGRES の強力なデータ・モデルと豊富なデータ・タイプ(型)を保持しながら、POSTGRES で使われた PostQuel 問い合わせ言語を、拡張した <SMALL>SQL</SMALL> のサブセットに置き換えています。PostgreSQL は無料で完全なソースを利用できます。 <P>PostgreSQL は次世代 <SMALL>DBMS</SMALL> 研究用のプロトタイプであった POSTGRES データベース管理システムの改良版です(このため、今でもときどき "Postgres" と呼ばれることがあります)。PostgreSQL は POSTGRES の強力なデータ・モデルと豊富なデータ・タイプ(型)を保持しながら、POSTGRES で使われた PostQuel 問い合わせ言語を、拡張した <SMALL>SQL</SMALL> のサブセットに置き換えています。PostgreSQL は無料で完全なソースを利用できます。
</P>
<P>PostgreSQL の開発は、PostgreSQL 開発メーリングリストに参加している開発者達のチームですべて行なわれています。現在の座長は Marc G. Fournier (<A HREF="mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> )です。(下記の<a href="#1.6">1.6節</a>に参加の仕方があります。)現在、このチームが PostgreSQL 開発のすべての面倒をみています。このチームはコミュニティプロジェクトであり、いかなる企業によっても制御を受けません。参加したければ、<A href= <P>PostgreSQL の開発は、PostgreSQL 開発メーリングリストに参加している開発者達のチームですべて行なわれています。現在の座長は Marc G. Fournier (<A HREF="mailto:scrappy@PostgreSQL.org">scrappy@PostgreSQL.org</A> )です。(下記の<a href="#1.6">1.6節</a>に参加の仕方があります。)現在、このチームが PostgreSQL 開発のすべての面倒をみています。このチームはコミュニティプロジェクトであり、いかなる企業によっても制御を受けません。参加したければ、<A href=
"http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html"> "http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html">
...@@ -150,18 +146,20 @@ HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)<BR><P> ...@@ -150,18 +146,20 @@ HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)<BR><P>
</P> </P>
<P>Postgres95-1.01 の中心的な開発者は Andrew Yu と Jolly Chen でしたが、その他大勢の人々がこのコードの移植、テスト、デバグ、および、改良に参加しました。PostgreSQL の派生元コードである Postgres はカリフォルニア大学バークレイ校において、 Michael Stonebraker 教授の指揮のもと、多くの学生、卒業生、本職のプログラマたちの努力により作られました。 <P>Postgres95-1.01 の中心的な開発者は Andrew Yu と Jolly Chen でしたが、その他大勢の人々がこのコードの移植、テスト、デバグ、および、改良に参加しました。PostgreSQL の派生元コードである Postgres はカリフォルニア大学バークレイ校において、 Michael Stonebraker 教授の指揮のもと、多くの学生、卒業生、本職のプログラマたちの努力により作られました。
</P>
<P>バークレイにおけるこのソフトウェアのもとの名前は Postgres でしたが、<SMALL>SQL</SMALL> の機能が追加された 1995 年にその名前は Postgres95 に変更され、1996 年の終りにその名前は PostgreSQL に変更されました。 <P>バークレイにおけるこのソフトウェアのもとの名前は Postgres でしたが、<SMALL>SQL</SMALL> の機能が追加された 1995 年にその名前は Postgres95 に変更され、1996 年の終りにその名前は PostgreSQL に変更されました。
</P>
<P>
<H4><A NAME="1.2">1.2</A>) PostgreSQL の著作権はどうなってますか?</H4> <H4><A NAME="1.2">1.2</A>) PostgreSQL の著作権はどうなってますか?</H4>
<P> PostgreSQL は下記の著作権に従います。 <P> PostgreSQL は下記の著作権に従います。
<SMALL><PRE> </P>
<PRE>
[訳注: [訳注:
正文は英語です。参考として、訳文を併記掲載します。 正文は英語です。参考として、訳文を併記掲載します。
] ]
</PRE></SMALL> </PRE>
<P> <P>
PostgreSQL Data Base Management System</P> PostgreSQL Data Base Management System</P>
<P> <P>
...@@ -187,7 +185,7 @@ IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO ...@@ -187,7 +185,7 @@ IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO
OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
MODIFICATIONS.</P> MODIFICATIONS.</P>
<SMALL><PRE> <PRE>
POSTGRESQL データベース管理システム POSTGRESQL データベース管理システム
部分的著作権 (c) 1996-2004, PostgreSQL国際開発チーム 部分的著作権 (c) 1996-2004, PostgreSQL国際開発チーム
...@@ -214,7 +212,7 @@ MODIFICATIONS.</P> ...@@ -214,7 +212,7 @@ MODIFICATIONS.</P>
著作権に関する正文は上記の英語による表記です。日本語訳はあくまで 著作権に関する正文は上記の英語による表記です。日本語訳はあくまで
参考です。 参考です。
] ]
</PRE></SMALL> </PRE>
<P>上記はBSDライセンスで古きオープンソースのライセンスです。ソースコード <P>上記はBSDライセンスで古きオープンソースのライセンスです。ソースコード
がどのように使われようとも制限しません。好ましいことなので、我々もそれを がどのように使われようとも制限しません。好ましいことなので、我々もそれを
...@@ -225,7 +223,6 @@ MODIFICATIONS.</P> ...@@ -225,7 +223,6 @@ MODIFICATIONS.</P>
<P> <P>
一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働させられるはずです。リリースの時点で実際にテストを行なったことの報告がなされたプラットホームについてはインストール手引書に列挙してあります。</P> 一般的に、最近のUnix互換プラットホームであればPostgreSQLを稼働させられるはずです。リリースの時点で実際にテストを行なったことの報告がなされたプラットホームについてはインストール手引書に列挙してあります。</P>
<P>
<H4><A NAME="1.4">1.4</A>) Unix以外の移植版で使えるものは?</H4> <H4><A NAME="1.4">1.4</A>) Unix以外の移植版で使えるものは?</H4>
<P>バージョン8.0になり、PostgreSQL は、Win2000, WinXP, Win2003などの Microsoft Windows NTベースのオペレーティングシステムでネイティブに走るようになりました。 <P>バージョン8.0になり、PostgreSQL は、Win2000, WinXP, Win2003などの Microsoft Windows NTベースのオペレーティングシステムでネイティブに走るようになりました。
...@@ -233,18 +230,18 @@ MODIFICATIONS.</P> ...@@ -233,18 +230,18 @@ MODIFICATIONS.</P>
Windows (Win95, Win98, WinMe)など、MSDOSベースのバージョンでは、Cygwin を使ってPostgreSQLを走らせることができます。 Windows (Win95, Win98, WinMe)など、MSDOSベースのバージョンでは、Cygwin を使ってPostgreSQLを走らせることができます。
</P> </P>
<small><pre> <pre>
[訳注 [訳注
pgInstaller の入手はFTPミラーサイトの win32 ディレクトリからも可能です。 pgInstaller の入手はFTPミラーサイトの win32 ディレクトリからも可能です。
http://www.postgresql.org/mirrors-ftp.html http://www.postgresql.org/mirrors-ftp.html
] ]
</pre></small> </pre>
<p>次のサイトに Novell Netware 6 への移植もあります。 <p>次のサイトに Novell Netware 6 への移植もあります。
<a href="http://forge.novell.com">http://forge.novell.com</a> <a href="http://forge.novell.com">http://forge.novell.com</a>
また、OS/2 (eComStation) バージョンは、<a href= また、OS/2 (eComStation) バージョンは、<a href=
"http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F"> "http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F">
http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgreSQL&stype=all&sort=type&dir=%2F</a>にあります。</p> http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&amp;button=Search&amp;key=postgreSQL&amp;stype=all&amp;sort=type&amp;dir=%2F</a>にあります。</p>
<BR> <BR>
...@@ -256,7 +253,7 @@ href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A> ...@@ -256,7 +253,7 @@ href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>
です。 です。
ミラーサイトについては、我々のメイン Web ページをご覧下さい。</P> ミラーサイトについては、我々のメイン Web ページをご覧下さい。</P>
<SMALL><PRE> <PRE>
[訳注: [訳注:
以下は日本のミラーサイトです: 以下は日本のミラーサイトです:
...@@ -274,7 +271,7 @@ href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A> ...@@ -274,7 +271,7 @@ href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>
Japan: <A HREF="ftp://ring.so-net.ne.jp/pub/misc/db/PostgreSQL/">ftp://ring.so-net.ne.jp/pub/misc/db/PostgreSQL/</A> Japan: <A HREF="ftp://ring.so-net.ne.jp/pub/misc/db/PostgreSQL/">ftp://ring.so-net.ne.jp/pub/misc/db/PostgreSQL/</A>
Japan: <A HREF="ftp://ring.aist.go.jp/pub/misc/db/PostgreSQL/">ftp://ring.aist.go.jp/pub/misc/db/PostgreSQL/</A> Japan: <A HREF="ftp://ring.aist.go.jp/pub/misc/db/PostgreSQL/">ftp://ring.aist.go.jp/pub/misc/db/PostgreSQL/</A>
] ]
</PRE></SMALL> </PRE>
<H4><A NAME="1.6">1.6</A>) サポートはどこで受けられますか?</H4> <H4><A NAME="1.6">1.6</A>) サポートはどこで受けられますか?</H4>
...@@ -292,33 +289,35 @@ href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A> ...@@ -292,33 +289,35 @@ href="ftp://ftp.PostgreSQL.org/pub/">ftp://ftp.PostgreSQL.org/pub/</A>
end end
</PRE> </PRE>
と書いて <A HREF="mailto:pgsql-general-digest-request@PostgreSQL.org"> pgsql-general-digest-request@PostgreSQL.org</A> へ電子メールを送って下さい。</P> <P>と書いて <A HREF="mailto:pgsql-general-digest-request@PostgreSQL.org"> pgsql-general-digest-request@PostgreSQL.org</A> へ電子メールを送って下さい。</P>
<P> ダイジェスト版は、メインリストで受信するメッセージが 30k 程度溜る毎にダイジェスト版リストのメンバーに送付されます。</P> <P> ダイジェスト版は、メインリストで受信するメッセージが 30k 程度溜る毎にダイジェスト版リストのメンバーに送付されます。</P>
<P> バグレポート用のメーリングリストもあります。このリストへの参加は "本文" に: <P> バグレポート用のメーリングリストもあります。このリストへの参加は "本文" に:
</P>
<PRE> <PRE>
subscribe subscribe
end end
</PRE> </PRE>
<P>
と書いて<A と書いて<A
HREF="mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A> HREF="mailto:pgsql-bugs-request@PostgreSQL.org">pgsql-bugs-request@PostgreSQL.org</A>
へ電子メールを送って下さい。</P> へ電子メールを送って下さい。</P>
<P> 開発者の議論のためのメーリングリストも利用できます。このリストへの参加は電子メールの本文に: <P> 開発者の議論のためのメーリングリストも利用できます。このリストへの参加は電子メールの本文に:
</P>
<PRE> <PRE>
subscribe subscribe
end end
</PRE> </PRE>
と書いて、<A HREF="mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>へ電子メールを送って下さい。</P> <P>と書いて、<A HREF="mailto:pgsql-hackers-request@PostgreSQL.org">pgsql-hackers-request@PostgreSQL.org</A>へ電子メールを送って下さい。</P>
<P PostgreSQL についてもっと詳しく知りたければ、次の PostgreSQL WWWホームページからたどれます: <P>PostgreSQL についてもっと詳しく知りたければ、次の PostgreSQL WWWホームページからたどれます:</P>
<BLOCKQUOTE> <BLOCKQUOTE>
<A HREF="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A> <P><A HREF="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A></P>
</BLOCKQUOTE> </BLOCKQUOTE>
</P>
<P>メジャーなIRC チャンネルは、Freenode (<I>irc.freenode.net</I>)の <P>メジャーなIRC チャンネルは、Freenode (<I>irc.freenode.net</I>)の
<I>#PostgreSQL</I> というチャンネルです。 <I>#PostgreSQL</I> というチャンネルです。
UNIX コマンドで、 UNIX コマンドで、
...@@ -329,8 +328,7 @@ UNIX ...@@ -329,8 +328,7 @@ UNIX
EFNetにもPostgreSQLチャンネルがあります。 EFNetにもPostgreSQLチャンネルがあります。
</P> </P>
<P> <PRE>
<SMALL><PRE>
[訳注: [訳注:
1999年7月23日、日本ポストグレスユーザー会、略称JPUGが設立されました。 1999年7月23日、日本ポストグレスユーザー会、略称JPUGが設立されました。
JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場となっています。 JPUG は非営利組織で、PostgreSQLを利用する人達の相互協力の場となっています。
...@@ -341,7 +339,7 @@ EFNet ...@@ -341,7 +339,7 @@ EFNet
をご覧ください。会員登録も可能となっています。 をご覧ください。会員登録も可能となっています。
日本語のIRCチャンネル '#PostgreSQL*jp' も存在します。 日本語のIRCチャンネル '#PostgreSQL*jp' も存在します。
</PRE></SMALL> </PRE>
<P>商用サポート会社のリストは<a href="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</a>にあります。</P> <P>商用サポート会社のリストは<a href="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</a>にあります。</P>
...@@ -358,24 +356,25 @@ PostgreSQL ...@@ -358,24 +356,25 @@ PostgreSQL
<P> 配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュアル・ページ)およびいくつかの小さなテスト例題が含まれます。<I>/doc</I> ディレクトリをご覧下さい。また、マニュアルは、<A HREF="http://www.ca.PostgreSQL.org/docs/">http://www.ca.PostgreSQL.org/docs/</A>でオンラインでも閲覧できます。</P> <P> 配付の中に、いくつかのマニュアルとオンライン・マニュアル(マニュアル・ページ)およびいくつかの小さなテスト例題が含まれます。<I>/doc</I> ディレクトリをご覧下さい。また、マニュアルは、<A HREF="http://www.ca.PostgreSQL.org/docs/">http://www.ca.PostgreSQL.org/docs/</A>でオンラインでも閲覧できます。</P>
<SMALL><PRE> <PRE>
[訳注: [訳注:
(株)SRAと日本PostgreSQLユーザ会で翻訳され、 (株)SRAと日本PostgreSQLユーザ会で翻訳され、
<A HREF="http://osb.sra.co.jp/PostgreSQL/Manual/">「PostgreSQL オフィシャルマニュアル」</A> <A HREF="http://osb.sra.co.jp/PostgreSQL/Manual/">「PostgreSQL オフィシャルマニュアル」</A>
として出版されています。 として出版されています。
] ]
</PRE></SMALL> </PRE>
<P>オンラインで参照できる PostgreSQL の本も2冊あります。<A href= <P>オンラインで参照できる PostgreSQL の本も2冊あります。<A href=
"http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A> "http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</A>
<SMALL><PRE> </P>
<PRE>
[訳注: [訳注:
日本ポストグレスユーザー会の<A HREF="http://www.PostgreSQL.jp/wg/psqltrans/"> 「PostgreSQL Book翻訳分科会」</A> 日本ポストグレスユーザー会の<A HREF="http://www.PostgreSQL.jp/wg/psqltrans/"> 「PostgreSQL Book翻訳分科会」</A>
にて翻訳されました。 にて翻訳されました。
] ]
</PRE></SMALL> </PRE>
<P>
および、 <A href= および、 <A href=
"http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A> "http://www.commandprompt.com/ppbook/">http://www.commandprompt.com/ppbook/</A>
です。 です。
...@@ -415,14 +414,13 @@ PostgreSQL ...@@ -415,14 +414,13 @@ PostgreSQL
<A HREF="http://www.PostgreSQL.org/docs/awbook.html"> <A HREF="http://www.PostgreSQL.org/docs/awbook.html">
http://www.PostgreSQL.org/docs/awbook.html</A> http://www.PostgreSQL.org/docs/awbook.html</A>
にあるPostgreSQL本で <SMALL>SQL</SMALL> を教えています。 にあるPostgreSQL本で <SMALL>SQL</SMALL> を教えています。
</P>
<SMALL><PRE> <PRE>
[訳注: [訳注:
日本ポストグレスユーザー会の<A HREF="http://www.PostgreSQL.jp/wg/psqltrans/"> 「PostgreSQL Book翻訳分科会」</A> 日本ポストグレスユーザー会の<A HREF="http://www.PostgreSQL.jp/wg/psqltrans/"> 「PostgreSQL Book翻訳分科会」</A>
にて翻訳され出版されています。 にて翻訳され出版されています。
] ]
</PRE></SMALL> </PRE>
</P>
<P> <P>
その他にも PostgreSQL本として、<A href= その他にも PostgreSQL本として、<A href=
...@@ -449,8 +447,7 @@ http://www.PostgreSQL.org/docs/awbook.html</A> ...@@ -449,8 +447,7 @@ http://www.PostgreSQL.org/docs/awbook.html</A>
のようなのもあります。 のようなのもあります。
</P> </P>
<P> <PRE>
<SMALL><PRE>
[訳注: [訳注:
石井達夫氏による日本語の参考文献の紹介ページ 石井達夫氏による日本語の参考文献の紹介ページ
<A HREF="http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html">http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html</A> <A HREF="http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html">http://www.SRA.co.jp/people/t-ishii/PostgreSQL/doc-jp/index.html</A>
...@@ -465,8 +462,7 @@ http://www.PostgreSQL.org/docs/awbook.html</A> ...@@ -465,8 +462,7 @@ http://www.PostgreSQL.org/docs/awbook.html</A>
<A HREF="http://www.wakhok.ac.jp/DB/DB.html">http://www.wakhok.ac.jp/DB/DB.html</A> <A HREF="http://www.wakhok.ac.jp/DB/DB.html">http://www.wakhok.ac.jp/DB/DB.html</A>
もオンラインで読むことができます。 もオンラインで読むことができます。
] ]
</PRE></SMALL> </PRE>
</P>
<H4><A NAME="1.11">1.11</A>) PostgreSQLは西暦2000年問題(Y2K)に対応していますか? <H4><A NAME="1.11">1.11</A>) PostgreSQLは西暦2000年問題(Y2K)に対応していますか?
</H4> </H4>
...@@ -536,6 +532,7 @@ http://www.PostgreSQL.org/docs/awbook.html</A> ...@@ -536,6 +532,7 @@ http://www.PostgreSQL.org/docs/awbook.html</A>
<P>質の良い基盤は、オープンソース・プロジェクトにとってはとても大切なもので、プロジェクトが前進する勢いを失って分裂するのを回避します。</P> <P>質の良い基盤は、オープンソース・プロジェクトにとってはとても大切なもので、プロジェクトが前進する勢いを失って分裂するのを回避します。</P>
<P>もちろん、この基盤は安いものではありません。維持し続けるためには毎月あるいは一時的に経費がかかります。もし、あなたやあなたの会社に、こうした努力のための資金の援助を施すことができるようでしたら、<A href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A>から寄付をお願いします。 <P>もちろん、この基盤は安いものではありません。維持し続けるためには毎月あるいは一時的に経費がかかります。もし、あなたやあなたの会社に、こうした努力のための資金の援助を施すことができるようでしたら、<A href="http://store.pgsql.com/shopping/">http://store.pgsql.com/shopping/</A>から寄付をお願いします。
</P>
<P>また、Webページには PostgreSQL,Inc とありますが、そこの "貢献(contributions)"という項目は、 PostgreSQL プロジェクトを支援するだけのためで、決して特定の会社のための資金ではありません。もし、小切手(check)の方が都合よければ連絡先の住所へお送り下さい。</P> <P>また、Webページには PostgreSQL,Inc とありますが、そこの "貢献(contributions)"という項目は、 PostgreSQL プロジェクトを支援するだけのためで、決して特定の会社のための資金ではありません。もし、小切手(check)の方が都合よければ連絡先の住所へお送り下さい。</P>
...@@ -546,10 +543,8 @@ http://www.PostgreSQL.org/docs/awbook.html</A> ...@@ -546,10 +543,8 @@ http://www.PostgreSQL.org/docs/awbook.html</A>
へお送りください。 へお送りください。
</P> </P>
<P>
<HR> <HR>
<H2 align="center">ユーザー・クライアントの質問</H2> <H2 align="center">ユーザー・クライアントの質問</H2>
<P>
<H4><A NAME="2.1">2.1</A>) PostgreSQL のための <SMALL>ODBC</SMALL> ドライバーはありますか? <H4><A NAME="2.1">2.1</A>) PostgreSQL のための <SMALL>ODBC</SMALL> ドライバーはありますか?
</H4> </H4>
...@@ -563,26 +558,27 @@ http://www.PostgreSQL.org/docs/awbook.html</A> ...@@ -563,26 +558,27 @@ http://www.PostgreSQL.org/docs/awbook.html</A>
</P> </P>
<P> OpenLink <SMALL>ODBC</SMALL><A HREF="http://www.openlinksw.com/">http://www.openlinksw.com/</A>から入手できます。標準的な <SMALL>ODBC</SMALL> クライアント・ソフトウェアで使えますので、支援しているすべてのプラットホーム(Win, Mac, Unix, VMS)から PostgreSQL の <SMALL>ODBC</SMALL> が利用できます。 <P> OpenLink <SMALL>ODBC</SMALL><A HREF="http://www.openlinksw.com/">http://www.openlinksw.com/</A>から入手できます。標準的な <SMALL>ODBC</SMALL> クライアント・ソフトウェアで使えますので、支援しているすべてのプラットホーム(Win, Mac, Unix, VMS)から PostgreSQL の <SMALL>ODBC</SMALL> が利用できます。
</P>
<P> たぶん彼らは、商用品質のサポートの必要な人々に売っていると思いますが、 <P> たぶん彼らは、商用品質のサポートの必要な人々に売っていると思いますが、
フリーウェア版はいつでも入手可能のようです。質問は、<A href= フリーウェア版はいつでも入手可能のようです。質問は、<A href=
"mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A> "mailto:postgres95@openlink.co.uk">postgres95@openlink.co.uk</A>
へ送って下さい。</P> へ送って下さい。</P>
<P>
<A HREF="http://www.PostgreSQL.org/docs/programmer/odbc.html"> <A HREF="http://www.PostgreSQL.org/docs/programmer/odbc.html">
Programmer's Guide</A> Programmer's Guide</A>
<SMALL>ODBC</SMALL> の章もご覧ください。 <SMALL>ODBC</SMALL> の章もご覧ください。
</P>
<P>
<H4><A NAME="2.2">2.2</A>) PostgreSQL を Web ページと連携させるにはどんなツールがありますか? <H4><A NAME="2.2">2.2</A>) PostgreSQL を Web ページと連携させるにはどんなツールがありますか?
</H4> </H4>
<P> データベースを裏に持つ Web ページについての素晴らしい紹介が、<BR> <P> データベースを裏に持つ Web ページについての素晴らしい紹介が、<BR>
<A href="http://www.webreview.com">http://www.webreview.com</A>にあります。</P> <A href="http://www.webreview.com">http://www.webreview.com</A>にあります。</P>
<P> Web への拡張のためには、PHP が卓越したインターフェイスとなっています。<A HREF="http://www.php.net">http://www.php.net/</A>にあります。 <P> Web への拡張のためには、PHP が卓越したインターフェイスとなっています。<A HREF="http://www.php.net">http://www.php.net/</A>にあります。
</P>
<SMALL><PRE> <PRE>
[訳注: [訳注:
PHPに関する日本語の情報は、2000年4月19日に発足した日本PHPユーザ会のサイト PHPに関する日本語の情報は、2000年4月19日に発足した日本PHPユーザ会のサイト
<A HREF="http://www.php.gr.jp/">http://www.php.gr.jp/</A> <A HREF="http://www.php.gr.jp/">http://www.php.gr.jp/</A>
...@@ -590,11 +586,12 @@ Programmer's Guide</A> ...@@ -590,11 +586,12 @@ Programmer's Guide</A>
<A HREF="http://www.geocities.jp/rui_hirokawa/php/">http://www.geocities.jp/rui_hirokawa/php/</A> <A HREF="http://www.geocities.jp/rui_hirokawa/php/">http://www.geocities.jp/rui_hirokawa/php/</A>
にかなりまとめられています。 にかなりまとめられています。
] ]
</PRE></SMALL> </PRE>
<P> 処理が複雑な場合、多くの人は Perl インターフェイスと CGI.pm か mod_perl を使います。 <P> 処理が複雑な場合、多くの人は Perl インターフェイスと CGI.pm か mod_perl を使います。
</P>
<SMALL><PRE> <PRE>
[訳注: [訳注:
WDB は、Web から DataBase への Perl の Interface です。 WDB は、Web から DataBase への Perl の Interface です。
wdb-p95 へのリンクは切れてしまっています。おそらく、Perl DBI 経由で DBD::Pg の利用が可能と思われます。 wdb-p95 へのリンクは切れてしまっています。おそらく、Perl DBI 経由で DBD::Pg の利用が可能と思われます。
...@@ -604,9 +601,8 @@ Programmer's Guide</A> ...@@ -604,9 +601,8 @@ Programmer's Guide</A>
<A HREF="http://www.i-con.dk/wdb/">http://www.i-con.dk/wdb/</A> <A HREF="http://www.i-con.dk/wdb/">http://www.i-con.dk/wdb/</A>
とがあります。その経緯はよくわかりません。 とがあります。その経緯はよくわかりません。
] ]
</PRE></SMALL> </PRE>
<P>
<H4><A NAME="2.3">2.3</A>) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか? <H4><A NAME="2.3">2.3</A>) PostgreSQL にグラフィカル・ユーザインターフェイスはありますか?
</H4> </H4>
<p>もちろん、PostgreSQL へのグラフィカルインターフェイスがいくつかあります。 <p>もちろん、PostgreSQL へのグラフィカルインターフェイスがいくつかあります。
...@@ -626,12 +622,12 @@ RHDB Admin (<a ...@@ -626,12 +622,12 @@ RHDB Admin (<a
PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/"> PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
http://phppgadmin.sourceforge.net/ </a>) はPostgreSQLへのWebベースの http://phppgadmin.sourceforge.net/ </a>) はPostgreSQLへのWebベースの
インターフェイスを提供します。 インターフェイスを提供します。
</P>
<P>より詳細なリストについては、<a <P>より詳細なリストについては、<a
href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a> href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</a>
をご覧ください。</P> をご覧ください。</P>
<P>
<H4><A NAME="2.4">2.4</A>) どのような言語で PostgreSQL と通信できすか? <H4><A NAME="2.4">2.4</A>) どのような言語で PostgreSQL と通信できすか?
</H4> </H4>
...@@ -640,42 +636,41 @@ PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/"> ...@@ -640,42 +636,41 @@ PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
</P> </P>
<P>以下のインターフェイスはPostgreSQLの配布に含まれています。 <P>以下のインターフェイスはPostgreSQLの配布に含まれています。
</P>
<UL> <UL>
<LI>C (libpq) <LI>C (libpq)</LI>
<LI>埋め込みC (ecpg) <LI>埋め込みC (ecpg)</LI>
<LI>Java (jdbc) <LI>Java (jdbc)</LI>
<LI>Python (<A HREF="http://www.druid.net/pygresql/">PyGreSQL</A>) <LI>Python (<A HREF="http://www.druid.net/pygresql/">PyGreSQL</A>)</LI>
<LI>TCL (libpgtcl) <LI>TCL (libpgtcl)</LI>
</UL> </UL>
<P>その他の利用可能なインターフェイスは <a <P>その他の利用可能なインターフェイスは
<a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A> <a href="http://gborg.postgresql.org">http://gborg.postgresql.org</A>
<I>Drivers/Interfaces</I>のセクションにあります。 <I>Drivers/Interfaces</I>のセクションにあります。
</P> </P>
<SMALL><PRE> <PRE>
[訳注: [訳注:
永安悟史さんは Palm 版の libpq を開発されました。 永安悟史さんは Palm 版の libpq を開発されました。
<a href="http://www.snaga.org/libpq/">http://www.snaga.org/libpq/</a> <a href="http://www.snaga.org/libpq/">http://www.snaga.org/libpq/</a>
] ]
</PRE></SMALL> </PRE>
<P>
<HR> <HR>
<H2 align="center">管理上の質問</H2> <H2 align="center">管理上の質問</H2>
<P>
<H4><A NAME="3.1">3.1</A>) どのようにすれば <I>/usr/local/pgsql</I> 以外の場所にインストールできますか?</H4> <H4><A NAME="3.1">3.1</A>) どのようにすれば <I>/usr/local/pgsql</I> 以外の場所にインストールできますか?</H4>
<P> 簡単な方法は、 <I>configure</I> を走らせるときに --prefix オプションを指定することです。 <P> 簡単な方法は、 <I>configure</I> を走らせるときに --prefix オプションを指定することです。
</P>
<P>
<H4><A NAME="3.2">3.2</A>) postmaster を走らせると、<I>Bad System Call</I> とかコア・ダンプしたとのメッセージが出ます。なぜですか? <H4><A NAME="3.2">3.2</A>) postmaster を走らせると、<I>Bad System Call</I> とかコア・ダンプしたとのメッセージが出ます。なぜですか?
</H4> </H4>
<P> さまざまな問題が考えられますが、まず最初にあなたのカーネルに System V IPC の拡張がインストールされているかを確認して見てください。PostgreSQL はカーネルによる共有メモリーとセマフォのサポートを必要とします。 <P> さまざまな問題が考えられますが、まず最初にあなたのカーネルに System V IPC の拡張がインストールされているかを確認して見てください。PostgreSQL はカーネルによる共有メモリーとセマフォのサポートを必要とします。
<P> </P>
<H4><A NAME="3.3">3.3</A>) <I>postmaster</I> を走らせようとすると、<I>IpcMemoryCreate</I> エラーが出ます。なぜですか? <H4><A NAME="3.3">3.3</A>) <I>postmaster</I> を走らせようとすると、<I>IpcMemoryCreate</I> エラーが出ます。なぜですか?
</H4> </H4>
...@@ -686,11 +681,11 @@ PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/"> ...@@ -686,11 +681,11 @@ PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
に共有メモリーとセマフォについての情報の詳細がありますのでご覧ください。</P> に共有メモリーとセマフォについての情報の詳細がありますのでご覧ください。</P>
<P>
<H4><A NAME="3.4">3.4</A>) <I>postmasterを</I>走らせようとすると、<I>IpcSemaphoreCreate</I> エラーが出ます。なぜですか? <H4><A NAME="3.4">3.4</A>) <I>postmasterを</I>走らせようとすると、<I>IpcSemaphoreCreate</I> エラーが出ます。なぜですか?
</H4> </H4>
<P>もしエラーメッセージが<I>IpcSemaphoreCreate: semget failed (No space left on device)</I>であれば、カーネルが十分なセマフォを使えるように構成されていません。Postgresは潜在的なバックエンドプロセス毎に一つのセマフォを必要とします。とりあえずの解決策は<I>postmaster</I>を起動するときに、バックエンドプロセスの数をより少なく制限をすることです。既定値の32より小さな数のパラメータを<I>-N</I>で使います。より恒久的な解決策は、カーネルの<SMALL>SEMMNS</SMALL><SMALL>SEMMNI</SMALL> パラメータを増やすことです。 <P>もしエラーメッセージが<I>IpcSemaphoreCreate: semget failed (No space left on device)</I>であれば、カーネルが十分なセマフォを使えるように構成されていません。Postgresは潜在的なバックエンドプロセス毎に一つのセマフォを必要とします。とりあえずの解決策は<I>postmaster</I>を起動するときに、バックエンドプロセスの数をより少なく制限をすることです。既定値の32より小さな数のパラメータを<I>-N</I>で使います。より恒久的な解決策は、カーネルの<SMALL>SEMMNS</SMALL><SMALL>SEMMNI</SMALL> パラメータを増やすことです。
</P>
<P>操作不能のセマフォも過度なデータベースアクセスの間にクラッシュを <P>操作不能のセマフォも過度なデータベースアクセスの間にクラッシュを
起こす可能性があります。 起こす可能性があります。
...@@ -699,7 +694,6 @@ PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/"> ...@@ -699,7 +694,6 @@ PhpPgAdmin (<a href="http://phppgadmin.sourceforge.net/">
<P>もし、エラーメッセージがなにか他のものであれば、カーネルの構成でまったくセマフォのサポートをしていないかもしれません。 <P>もし、エラーメッセージがなにか他のものであれば、カーネルの構成でまったくセマフォのサポートをしていないかもしれません。
PostgreSQL Administrator's Guide に共有メモリーとセマフォについての情報の詳細があります。</P> PostgreSQL Administrator's Guide に共有メモリーとセマフォについての情報の詳細があります。</P>
<P>
<H4><A NAME="3.5">3.5</A>) 他のホストからの接続はどのように制御しますか? <H4><A NAME="3.5">3.5</A>) 他のホストからの接続はどのように制御しますか?
</H4> </H4>
...@@ -707,56 +701,68 @@ PostgreSQL Administrator's Guide ...@@ -707,56 +701,68 @@ PostgreSQL Administrator's Guide
<P> 既定値では、PostgreSQL は Unix ドメインソケット、または、TCP/IP接続のローカルマシンからの接続しか許しません。postgresql.conf の中の listen_addresses を修正し、<B>かつ、</B><I>$PGDATA/pg_hba.conf</I> ファイルを適切に直して、ホスト主導型認証を有効にしないかぎりは、他のマシンからは接続できないでしょう。 <P> 既定値では、PostgreSQL は Unix ドメインソケット、または、TCP/IP接続のローカルマシンからの接続しか許しません。postgresql.conf の中の listen_addresses を修正し、<B>かつ、</B><I>$PGDATA/pg_hba.conf</I> ファイルを適切に直して、ホスト主導型認証を有効にしないかぎりは、他のマシンからは接続できないでしょう。
</p> </p>
<P>
<H4><A NAME="3.6">3.6</A>) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良いですか? <H4><A NAME="3.6">3.6</A>) より良い性能を得るためには、データベース・エンジンをどのように調整すれば良いですか?
</H4> </H4>
<P> 確かにインデックスは問い合わせの速度を増します。<SMALL>EXPLAIN ANALYZE</SMALL>コマンドで PostgreSQL がどのようにあなたの問い合わせを翻訳しているかを見ることができ、そして、どのインデックスが使われているかを見ることができます。 <P> 確かにインデックスは問い合わせの速度を増します。<SMALL>EXPLAIN ANALYZE</SMALL>コマンドで PostgreSQL がどのようにあなたの問い合わせを翻訳しているかを見ることができ、そして、どのインデックスが使われているかを見ることができます。
</P>
<P>もし <SMALL>INSERT</SMALL> を多用している場合は、<SMALL>COPY</SMALL> コマンドを使って大きなバッチ処理でそれを行なうことを検討して下さい。これは、<SMALL>INSERT</SMALL> を別々に行なうよりもっと高速です。次に、<SMALL>BEGIN WORK/COMMIT</SMALL> のトランザクション・ブロックの中に無い文は、それら自身がそれぞれのトランザクションに入っていると見なされます。いくつかの文を一つのトランザクション・ブロックの中で行なうことを考えて下さい。これによりトランザクションのオーバーヘッドが減ります。また、大きなデータの変更を行なう際はインデックスを一度外して、作り直すことを考えてみて下さい。 <P>もし <SMALL>INSERT</SMALL> を多用している場合は、<SMALL>COPY</SMALL> コマンドを使って大きなバッチ処理でそれを行なうことを検討して下さい。これは、<SMALL>INSERT</SMALL> を別々に行なうよりもっと高速です。次に、<SMALL>BEGIN WORK/COMMIT</SMALL> のトランザクション・ブロックの中に無い文は、それら自身がそれぞれのトランザクションに入っていると見なされます。いくつかの文を一つのトランザクション・ブロックの中で行なうことを考えて下さい。これによりトランザクションのオーバーヘッドが減ります。また、大きなデータの変更を行なう際はインデックスを一度外して、作り直すことを考えてみて下さい。
</P>
<P> <a href= <P> <a href=
"http://www.postgresql.org/docs/current/static/runtime.html"> "http://www.postgresql.org/docs/current/static/runtime.html">
Administration Guide/Server Run-time Environment/Run-time Administration Guide/Server Run-time Environment/Run-time
Configuration</a>には、 Configuration</a>には、
チューニングのオプションがいくつかあります。<i>fsync</I>オプションで<I>fsync()</I> を無効にすることができます。これによって、各トランザクション毎に <I>fsync()</I> でディスクを更新するのを止めさせます。 チューニングのオプションがいくつかあります。<i>fsync</I>オプションで<I>fsync()</I> を無効にすることができます。これによって、各トランザクション毎に <I>fsync()</I> でディスクを更新するのを止めさせます。
</P>
<P> <I>shared_buffers</I>オプションを使ってバックエンド・プロセスにより使われる共有メモリー・バッファを大きくすることもできます。もし、このパラメータを高くしすぎると、カーネルの共有メモリー空間の制限値を越えてしまうために <I>postmaster</I> が走らなくなるでしょう。既定値では、それぞれのバッファの大きさは 8K で、バッファ数は 1000 です。 <P> <I>shared_buffers</I>オプションを使ってバックエンド・プロセスにより使われる共有メモリー・バッファを大きくすることもできます。もし、このパラメータを高くしすぎると、カーネルの共有メモリー空間の制限値を越えてしまうために <I>postmaster</I> が走らなくなるでしょう。既定値では、それぞれのバッファの大きさは 8K で、バッファ数は 1000 です。
</P>
<P> <I>sort_mem</I> (PostgreSQL 8.0からは: <I>work_mem</I>)オプションを使って、それぞれのバックエンド・プロセスが一時的な並べ替えによって使うメモリーの最大サイズを増やすこともできます。 既定値は 1024 (すなわち、1MB)です。 <P> <I>sort_mem</I> (PostgreSQL 8.0からは: <I>work_mem</I>)オプションを使って、それぞれのバックエンド・プロセスが一時的な並べ替えによって使うメモリーの最大サイズを増やすこともできます。 既定値は 1024 (すなわち、1MB)です。
</P>
<P> また、<SMALL>CLUSTER</SMALL> コマンドを使って、テーブルのデータをインデックスに合わせるためにグループ化することもできます。詳しくは、オンラインマニュアルで <I>CLUSTER</I> を見て下さい。 <P> また、<SMALL>CLUSTER</SMALL> コマンドを使って、テーブルのデータをインデックスに合わせるためにグループ化することもできます。詳しくは、オンラインマニュアルで <I>CLUSTER</I> を見て下さい。
</P>
<P>
<H4><A NAME="3.7">3.7</A>) どのようなデバグ機能が使えますか?</H4> <H4><A NAME="3.7">3.7</A>) どのようなデバグ機能が使えますか?</H4>
<P> PostgreSQL は、デバグのために意味のある、状態情報を報告するいくつかの機能を持ちます。 <P> PostgreSQL は、デバグのために意味のある、状態情報を報告するいくつかの機能を持ちます。
</P>
<P> まず、--enable-cassert オプションで <I>configure</I> を走らせます。そうしてコンパイルすることにより、沢山の <I>assert()</I> が、バックエンドの進捗状況を監視し、何か予期せぬことが起きるとプログラムを停止するようになります。 <P> まず、--enable-cassert オプションで <I>configure</I> を走らせます。そうしてコンパイルすることにより、沢山の <I>assert()</I> が、バックエンドの進捗状況を監視し、何か予期せぬことが起きるとプログラムを停止するようになります。
</P>
<P> <I>postmaster</I><I>postgres</I> の両方でいくつかのデバグ・オプションの利用ができます。まず、次のように <I>postmaster</I> を起動するときはいつでも、標準出力とエラー出力をログ・ファイルに送るようにしてあることを確かめて下さい。 <P> <I>postmaster</I><I>postgres</I> の両方でいくつかのデバグ・オプションの利用ができます。まず、次のように <I>postmaster</I> を起動するときはいつでも、標準出力とエラー出力をログ・ファイルに送るようにしてあることを確かめて下さい。
</P>
<PRE> <PRE>
cd /usr/local/pgsql cd /usr/local/pgsql
./bin/postmaster &gt;server.log 2&gt;&1 & ./bin/postmaster &gt;server.log 2&gt;&amp;1 &amp;
</PRE> </PRE>
<P> これにより PostgreSQL の最上部のディレクトリに server.log ファイルが置かれます。このファイルはサーバーが遭遇した問題やエラーについて有用な情報を含みます。<I>Postmaster</I> は更に詳細な情報を報告するための <I>-d</I> オプションを持ちます。その <I>-d</I> オプションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大きなログファイルを生成することに注意しなくてはなりません。 <P> これにより PostgreSQL の最上部のディレクトリに server.log ファイルが置かれます。このファイルはサーバーが遭遇した問題やエラーについて有用な情報を含みます。<I>Postmaster</I> は更に詳細な情報を報告するための <I>-d</I> オプションを持ちます。その <I>-d</I> オプションは、デバグ・レベルを指定します。高いデバグ・レベルでは、大きなログファイルを生成することに注意しなくてはなりません。
</P>
<P>もし、<i>postmaster</i>が走っていなければ、<I>postgres</I>バックエンドをコマンドラインから走らせることができ、直接<SMALL>SQL</SMALL>文をタイプすることができます。このやりかたは、デバグ目的のとき<B>だけ</B>お奨めします。セミコロンではなく、改行が問い合わせの終りになることに注意してください。もし、デバグシンボルを入れてコンパイルしていれば、デバッガを使って何が起きているかを見ることができます。postmaster からバックエンドを開始したわけではないので、独立な環境で走っているのではなくロック/バックエンドとの対話の問題が重複することはありません。 <P>もし、<i>postmaster</i>が走っていなければ、<I>postgres</I>バックエンドをコマンドラインから走らせることができ、直接<SMALL>SQL</SMALL>文をタイプすることができます。このやりかたは、デバグ目的のとき<B>だけ</B>お奨めします。セミコロンではなく、改行が問い合わせの終りになることに注意してください。もし、デバグシンボルを入れてコンパイルしていれば、デバッガを使って何が起きているかを見ることができます。postmaster からバックエンドを開始したわけではないので、独立な環境で走っているのではなくロック/バックエンドとの対話の問題が重複することはありません。
</P>
<P> もし、<i>postmaster</i>が走っていれば、あるウィンドウで<I>psql</I>を開始すると、<pre>SELECT pg_backend_pid()</pre>を使って、<i>psql</i> で使われる <i>postgres</i> プロセスの<SMALL>PID</SMALL>が見つかります。 <P> もし、<i>postmaster</i>が走っていれば、あるウィンドウで<I>psql</I>を開始すると、<code>SELECT pg_backend_pid()</code>を使って、<i>psql</i> で使われる <i>postgres</i> プロセスの<SMALL>PID</SMALL>が見つかります。
デバッガを使って<i>postgres</i><SMALL>PID</SMALL>にアタッチ(attach)します。デバッガの中からブレーク・ポイントをセットし、<i>psql</i> から問い合わせを発行します。デバグのために<i>postgres</i>を始動する場合は、PGOPTIONS="-W n" を設定でき、それから、<i>psql</i> を開始します。これにより、<i>n</i> 秒開始を遅らせるはずなので、デバッガでプロセスにアタッチして、ブレークポイントを設定し、開始から順を追って見てゆくことができます。 デバッガを使って<i>postgres</i><SMALL>PID</SMALL>にアタッチ(attach)します。デバッガの中からブレーク・ポイントをセットし、<i>psql</i> から問い合わせを発行します。デバグのために<i>postgres</i>を始動する場合は、PGOPTIONS="-W n" を設定でき、それから、<i>psql</i> を開始します。これにより、<i>n</i> 秒開始を遅らせるはずなので、デバッガでプロセスにアタッチして、ブレークポイントを設定し、開始から順を追って見てゆくことができます。
<P> いくつかの<pre>log_*</pre>サーバ構成変数は、デバッグと性能測定にとても役に立つプロセスの統計の印刷を可能にします。 </P>
<P> いくつかの<code>log_*</code>サーバ構成変数は、デバッグと性能測定にとても役に立つプロセスの統計の印刷を可能にします。
</P>
<P> 何という関数がどのくらい実行時間を食っているかを見るために、プロファイリング(プロフィール付き)でコンパイルすることも可能です。そのバックエンドのプロフィール・ファイルは <I>pgsql/data/base/dbname</I> ディレクトリに格納されるでしょう。クライアントのプロフィールはクライアントの現行ディレクトリに置かれるでしょう。Linux でまともなプロファイリングを行うには <I>-DLINUX_PROFILE</I> でコンパイルする必要があります。 <P> 何という関数がどのくらい実行時間を食っているかを見るために、プロファイリング(プロフィール付き)でコンパイルすることも可能です。そのバックエンドのプロフィール・ファイルは <I>pgsql/data/base/dbname</I> ディレクトリに格納されるでしょう。クライアントのプロフィールはクライアントの現行ディレクトリに置かれるでしょう。Linux でまともなプロファイリングを行うには <I>-DLINUX_PROFILE</I> でコンパイルする必要があります。
</P>
<P>
<H4><A NAME="3.8">3.8</A>) 接続しようとするときに <I>'Sorry, too many clients'</I> が出るのはなぜですか? <H4><A NAME="3.8">3.8</A>) 接続しようとするときに <I>'Sorry, too many clients'</I> が出るのはなぜですか?
</H4> </H4>
<P> <I>postmasterが</I>同時始動できるバックエンドプロセスに対する制限数を増やす必要があります。 <P> <I>postmasterが</I>同時始動できるバックエンドプロセスに対する制限数を増やす必要があります。
</P>
<P>既定の最大プロセスは32プロセスです。<I>-N</I>に適切な値を引数にして<I>postmaster</I>を再起動するか、PostgreSQL.conf を修正することによって、その値を増やすことができます。 <P>既定の最大プロセスは32プロセスです。<I>-N</I>に適切な値を引数にして<I>postmaster</I>を再起動するか、PostgreSQL.conf を修正することによって、その値を増やすことができます。
</P>
<P>もし、<I>-N</I> を 32よりも大きくするのであれば、<I>-B</I>も既定の64より大きい値に増加させなくてはならないし、<I>-B</I> は少なくとも <I>-N</I> の2倍はなくてはならず、おそらく最高性能を望むならばそれより大きい値が必要なはずです。バックエンドプロセスをたくさんにすると、いろいろなUnixカーネル構成パラメータも増やすことが必要になるかもしれません。 <P>もし、<I>-N</I> を 32よりも大きくするのであれば、<I>-B</I>も既定の64より大きい値に増加させなくてはならないし、<I>-B</I> は少なくとも <I>-N</I> の2倍はなくてはならず、おそらく最高性能を望むならばそれより大きい値が必要なはずです。バックエンドプロセスをたくさんにすると、いろいろなUnixカーネル構成パラメータも増やすことが必要になるかもしれません。
共有メモリー・ブロックの最大値(<SMALL>SHMMAX</SMALL>)、 共有メモリー・ブロックの最大値(<SMALL>SHMMAX</SMALL>)、
...@@ -767,17 +773,19 @@ PostgreSQL Administrator's Guide ...@@ -767,17 +773,19 @@ PostgreSQL Administrator's Guide
も確認事項に含まれます。 も確認事項に含まれます。
PostgreSQLに許されるバックエンドのプロセス数が制限されているのは、 PostgreSQLに許されるバックエンドのプロセス数が制限されているのは、
システムのリソースを使い果してしまうことを避けるためです。 システムのリソースを使い果してしまうことを避けるためです。
</P>
<P> <H4><A NAME="3.9">3.9</A>) <I>pgsql_tmp</I> ディレクトリの中には何がありますか?
<H4><A NAME="3.9">3.9</A>) pgsql_tmp</I> ディレクトリの中には何がありますか?
</H4> </H4>
<P> 問い合わせ実行モジュールによって生成された一時的なファイルが、このディ <P> 問い合わせ実行モジュールによって生成された一時的なファイルが、このディ
レクトリに含まれます。例えば、もし <SMALL>ORDER BY</SMALL> 句を満たすためにバックエンドの <I>-S</I> パラメータで許可した値よりも大きなスペースがソートの際に必要だとすると、溢れたデータを保持するために一時的なファイルがいくつかここに生成されます。 レクトリに含まれます。例えば、もし <SMALL>ORDER BY</SMALL> 句を満たすためにバックエンドの <I>-S</I> パラメータで許可した値よりも大きなスペースがソートの際に必要だとすると、溢れたデータを保持するために一時的なファイルがいくつかここに生成されます。
</P>
<P> <P>
一時的なファイルは自動的に消し去られるはずですが、もし、ソートの途中でバックエンドがクラッシュしてしまうとそうはなりません。<I>postmaster</I>の停止とリスタートでこれらのファイルはディレクトリから消しさられます。 一時的なファイルは自動的に消し去られるはずですが、もし、ソートの途中でバックエンドがクラッシュしてしまうとそうはなりません。<I>postmaster</I>の停止とリスタートでこれらのファイルはディレクトリから消しさられます。
</P>
<SMALL><PRE> <PRE>
[訳注: [訳注:
SYSLOGD 経由でログを出力するには、まず、configure を --enable-syslog SYSLOGD 経由でログを出力するには、まず、configure を --enable-syslog
付きで走らせた後、コンパイルとインストールを行ないます。 付きで走らせた後、コンパイルとインストールを行ないます。
...@@ -787,41 +795,40 @@ PostgreSQL ...@@ -787,41 +795,40 @@ PostgreSQL
オプション付きにてサーバモードで起動します。(バージョン 7.1 からは オプション付きにてサーバモードで起動します。(バージョン 7.1 からは
pg_options は PostgreSQL.conf になっています。) pg_options は PostgreSQL.conf になっています。)
] ]
</PRE></SMALL> </PRE>
<P>
<H4><A name="3.10">3.10</A>) PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなくてはならないのはなぜですか?</H4> <H4><A name="3.10">3.10</A>) PostgreSQLのメジャーリリースをアップデートするのにダンプとリストアをしなくてはならないのはなぜですか?</H4>
<P> <P>
PostgreSQLチームはマイナーリリースでは小さな変更しか行ないませんので、7.2 から 7.2.1 へのアップグレードにはダンプとリストアの必要はありません。しかし、メジャーリリース(たとえば、7.2から7.3へのような)では、システムテーブルやデータファイルの内部フォーマットの変更をしばしば行ないます。これらの変更はたいてい複雑で、そのため我々はデータファイルのための後方互換性を維持することができません。ダンプは汎用フォーマットでデータを出力し、それを新しい内部フォーマットに読み込むことができます。</P> PostgreSQLチームはマイナーリリースでは小さな変更しか行ないませんので、7.2 から 7.2.1 へのアップグレードにはダンプとリストアの必要はありません。しかし、メジャーリリース(たとえば、7.2から7.3へのような)では、システムテーブルやデータファイルの内部フォーマットの変更をしばしば行ないます。これらの変更はたいてい複雑で、そのため我々はデータファイルのための後方互換性を維持することができません。ダンプは汎用フォーマットでデータを出力し、それを新しい内部フォーマットに読み込むことができます。</P>
<P> <P>
ディスク上でのフォーマットに変更のない同一リリースでは、アップグレードは、ダンプ/リストアではなく、<I>pg_upgrade</I> スクリプトを使うことができます。リリースノートには、<I>pg_upgrade</I> が利用可能なリリースかどうか記されています。</P> ディスク上でのフォーマットに変更のない同一リリースでは、アップグレードは、ダンプ/リストアではなく、<I>pg_upgrade</I> スクリプトを使うことができます。リリースノートには、<I>pg_upgrade</I> が利用可能なリリースかどうか記されています。</P>
<P>
<H4><A name="3.11">3.11</A>) ハードウェアにはどんなコンピュータを使えばよいですか?</H4> <H4><A name="3.11">3.11</A>) ハードウェアにはどんなコンピュータを使えばよいですか?</H4>
<P> <P>
PCハードウェアはほとんど互換性がありますので、ほとんどの人は、すべてのPCハードウェアが同じ品質だと思い込む傾向があります。しかし、それは間違いです。ECC RAM、SCSI、および、高品質マザーボードは、安いハードウェアに比べると、より信頼性が高く、より性能も良いのです。PostgreSQL はほとんどのハードウェアで稼働しますが、信頼性や性能が重要な場合は、ハードウェアのオプションを研究することが賢明です。メーリングリストでもハードウェアオプションとトレードオフについて議論することができます。</P> PCハードウェアはほとんど互換性がありますので、ほとんどの人は、すべてのPCハードウェアが同じ品質だと思い込む傾向があります。しかし、それは間違いです。ECC RAM、SCSI、および、高品質マザーボードは、安いハードウェアに比べると、より信頼性が高く、より性能も良いのです。PostgreSQL はほとんどのハードウェアで稼働しますが、信頼性や性能が重要な場合は、ハードウェアのオプションを研究することが賢明です。メーリングリストでもハードウェアオプションとトレードオフについて議論することができます。</P>
<P>
<HR> <HR>
<H2 align="center">操作上の質問</H2> <H2 align="center">操作上の質問</H2>
<P>
<H4><A NAME="4.1">4.1</A>) バイナリ・カーソルと通常カーソルとの厳密な違いは何ですか? <H4><A NAME="4.1">4.1</A>) バイナリ・カーソルと通常カーソルとの厳密な違いは何ですか?
</H4> </H4>
<P> 詳述は、オンラインマニュアルで <SMALL>DECLARE</SMALL> を見て下さい。 <P> 詳述は、オンラインマニュアルで <SMALL>DECLARE</SMALL> を見て下さい。
</P>
<P>
<H4><A NAME="4.2">4.2</A>) 最初の数ロウのみを <SMALL>SELECT</SMALL>するにはどうしますか?ランダムなロウ? <H4><A NAME="4.2">4.2</A>) 最初の数ロウのみを <SMALL>SELECT</SMALL>するにはどうしますか?ランダムなロウ?
</H4> </H4>
<P> オンラインマニュアルで<SMALL>FETCH</SMALL>を見てください。あるいは、SELECT ... LIMIT....を使ってみて下さい。 <P> オンラインマニュアルで<SMALL>FETCH</SMALL>を見てください。あるいは、SELECT ... LIMIT....を使ってみて下さい。
</P>
<P>たとえ、欲しいのは最初の数ロウだけでも、すべての問い合わせを評価しなくてはならないかもしれません。<SMALL>ORDER BY</SMALL> を持った問い合わせを使うことを考えてみて下さい。 <P>たとえ、欲しいのは最初の数ロウだけでも、すべての問い合わせを評価しなくてはならないかもしれません。<SMALL>ORDER BY</SMALL> を持った問い合わせを使うことを考えてみて下さい。
もし、<SMALL>ORDER BY</SMALL>に合ったインデックスがあるとすると PostgreSQLは要求された最初の数ロウだけで評価できるかもしれませんが、でなれば、PostgreSQL は意図したロウが生成されるまですべてのロウを評価しなければならないかもしれません。 もし、<SMALL>ORDER BY</SMALL>に合ったインデックスがあるとすると PostgreSQLは要求された最初の数ロウだけで評価できるかもしれませんが、でなれば、PostgreSQL は意図したロウが生成されるまですべてのロウを評価しなければならないかもしれません。
</P>
<P>ランダムなロウを<SMALL>SELECT</SMALL>するには、次の文を使います: <P>ランダムなロウを<SMALL>SELECT</SMALL>するには、次の文を使います:
</P>
<PRE> <PRE>
SELECT col SELECT col
FROM tab FROM tab
...@@ -829,7 +836,6 @@ PC ...@@ -829,7 +836,6 @@ PC
LIMIT 1; LIMIT 1;
</PRE> </PRE>
<P>
<H4><A NAME="4.3">4.3</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか? <H4><A NAME="4.3">4.3</A>) テーブルやその他の情報のリストを <I>psql</I> で見るにはどうしますか?
</H4> </H4>
<P> <P>
...@@ -842,6 +848,7 @@ PC ...@@ -842,6 +848,7 @@ PC
<P> <SMALL>DROP COLUMN</SMALL>機能が、<SMALL>ALTER TABLE DROP COLUMN</SMALL> としてリリース7.3 <P> <SMALL>DROP COLUMN</SMALL>機能が、<SMALL>ALTER TABLE DROP COLUMN</SMALL> としてリリース7.3
に加えられました。それまでのバージョンでは、その代わりにこうします: に加えられました。それまでのバージョンでは、その代わりにこうします:
</P>
<PRE> <PRE>
BEGIN; BEGIN;
...@@ -855,6 +862,7 @@ PC ...@@ -855,6 +862,7 @@ PC
</PRE> </PRE>
<P>カラムのデータタイプは次の文で変えられます: <P>カラムのデータタイプは次の文で変えられます:
</P>
<PRE> <PRE>
BEGIN; BEGIN;
...@@ -865,12 +873,13 @@ PC ...@@ -865,12 +873,13 @@ PC
</PRE> </PRE>
<P>これを行なったときは、抹消された行が使っているディスク空間を回収するために<I>VACUUM FULL tab</I>をしたほうが良いかもしれません。 <P>これを行なったときは、抹消された行が使っているディスク空間を回収するために<I>VACUUM FULL tab</I>をしたほうが良いかもしれません。
</P>
<P>
<H4><A NAME="4.5">4.5</A>) ロウ、テーブル、データベースの最大サイズは? <H4><A NAME="4.5">4.5</A>) ロウ、テーブル、データベースの最大サイズは?
</H4> </H4>
<P> 制限は以下のとおりです。 <P> 制限は以下のとおりです。
</P>
<PRE> <PRE>
データベースの最大サイズ? 制限無し (32 TB のデータベースも存在します) データベースの最大サイズ? 制限無し (32 TB のデータベースも存在します)
テーブルの最大サイズ? 32TB テーブルの最大サイズ? 32TB
...@@ -882,22 +891,25 @@ PC ...@@ -882,22 +891,25 @@ PC
</PRE> </PRE>
<P> もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーやスワップスペースの大きさにより制限されます。性能はこれらの値がことのほか大きな時に煽りを受けます。 <P> もちろん、これらは実際は無制限ではなく、ディスク容量とメモリーやスワップスペースの大きさにより制限されます。性能はこれらの値がことのほか大きな時に煽りを受けます。
</P>
<P> 最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファイルのサポートは必要としません。巨大なテーブルは複数の1GBのファイルに分けて保存されますので、ファイルシステムの制限は重要ではありません。 <P> 最大テーブルサイズの32TBはオペレーティングシステムによる巨大ファイルのサポートは必要としません。巨大なテーブルは複数の1GBのファイルに分けて保存されますので、ファイルシステムの制限は重要ではありません。
</P>
<P> デフォルトのブロックサイズを32kにすることで、最大テーブルサイズと最大カラム数とを4倍にすることができます。 <P> デフォルトのブロックサイズを32kにすることで、最大テーブルサイズと最大カラム数とを4倍にすることができます。
</P>
<P>
<H4><A NAME="4.6">4.6</A>) 一般的なテキストファイルからデータを保存するには、データベースのディスク容量はどのくらい必要です? <H4><A NAME="4.6">4.6</A>) 一般的なテキストファイルからデータを保存するには、データベースのディスク容量はどのくらい必要です?
</H4> </H4>
<P>
普通のテキストファイルを PostgreSQL のデータベースに保存するには、最大で約5倍のディスク容量を必要とします。<P> 普通のテキストファイルを PostgreSQL のデータベースに保存するには、最大で約5倍のディスク容量を必要とします。</P>
<P> 例題として、各行に整数とテキスト記述を持つ 100,000行のファイルを考え <P> 例題として、各行に整数とテキスト記述を持つ 100,000行のファイルを考え
てみましょう。テキストの文字列の平均長さを20バイトと仮定すると、フラット てみましょう。テキストの文字列の平均長さを20バイトと仮定すると、フラット
ファイルの大きさは約2.8MB です。このデータを含む PostgreSQL データベース ファイルの大きさは約2.8MB です。このデータを含む PostgreSQL データベース
ファイルの大きさは次のように約6.4MBと見積もることができます: ファイルの大きさは次のように約6.4MBと見積もることができます:
</P>
<PRE> <PRE>
32 bytes: 各ロウのヘッダ(概算) 32 bytes: 各ロウのヘッダ(概算)
...@@ -921,26 +933,29 @@ PC ...@@ -921,26 +933,29 @@ PC
<P> <P>
インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされるデータを含む以上、それなりに大きくなります。 インデックスは、これほどのオーバヘッドは要求しませんが、インデックス付けされるデータを含む以上、それなりに大きくなります。
</P>
<P><SMALL>NULL</SMALL>はビットマップとして保存されていて、それらがわずかにスペースを使います。 <P><SMALL>NULL</SMALL>はビットマップとして保存されていて、それらがわずかにスペースを使います。
</P>
<P>
<H4><A NAME="4.7">4.7</A>) 定義されたテーブル、インデックス、データベース、および、ユーザをどのようにして見つけ出しますか? <H4><A NAME="4.7">4.7</A>) 定義されたテーブル、インデックス、データベース、および、ユーザをどのようにして見つけ出しますか?
</H4> </H4>
<P> <I>psql</I> にはいろいろなバックスラッシュ・コマンドがあり、こうした情報を表示します。バックスラッシュ・コマンドの種類を見るには \? を使って下さい。また、<i>pg_</i> で始まるシステムテーブルにも記述されています。さらに、<i>psql -l</i> はすべてのデータベースをリスト表示します。 <P> <I>psql</I> にはいろいろなバックスラッシュ・コマンドがあり、こうした情報を表示します。バックスラッシュ・コマンドの種類を見るには \? を使って下さい。また、<i>pg_</i> で始まるシステムテーブルにも記述されています。さらに、<i>psql -l</i> はすべてのデータベースをリスト表示します。
</P>
<P> また、<I>pgsql/src/tutorial/syscat.source</I> ファイルを走らせてみて下さい。それは、沢山の <SMALL>SELECT</SMALL> 文により必要な情報をデータベースのシステム・テーブルから取り出して例示してくれます。 <P> また、<I>pgsql/src/tutorial/syscat.source</I> ファイルを走らせてみて下さい。それは、沢山の <SMALL>SELECT</SMALL> 文により必要な情報をデータベースのシステム・テーブルから取り出して例示してくれます。
</P>
<P>
<H4><A NAME="4.8">4.8</A>) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか? <H4><A NAME="4.8">4.8</A>) 問い合わせが遅いうえ、インデックスを使っている様子がありません。なぜですか?
</H4> </H4>
<P>
インデックスは自動的にすべての問い合わせで使われるわけではありません。テー インデックスは自動的にすべての問い合わせで使われるわけではありません。テー
ブルが最小サイズより大きく、問い合わせでそのわずかなパーセンテージのロウを ブルが最小サイズより大きく、問い合わせでそのわずかなパーセンテージのロウを
選択する時だけ、インデックスは使われます。これはインデックススキャンによ 選択する時だけ、インデックスは使われます。これはインデックススキャンによ
り起こされるランダムなディスクアクセスは、テーブルをストレートに読む順次 り起こされるランダムなディスクアクセスは、テーブルをストレートに読む順次
走査よりも遅くなることがあるからです。 走査よりも遅くなることがあるからです。
</P>
<P>インデックスを使うかを決定するために、PostgreSQL はテーブルについ <P>インデックスを使うかを決定するために、PostgreSQL はテーブルについ
ての統計情報を持たなければなりません。この統計情報は、<SMALL>VACUUM ての統計情報を持たなければなりません。この統計情報は、<SMALL>VACUUM
...@@ -953,10 +968,12 @@ ANALYZE</SMALL> ...@@ -953,10 +968,12 @@ ANALYZE</SMALL>
<P> インデックスは、通常 <SMALL>ORDER BY</SMALL> や結合を行な <P> インデックスは、通常 <SMALL>ORDER BY</SMALL> や結合を行な
うためには使われません。順次スキャンに続く明示的ソートは、巨大なテーブル うためには使われません。順次スキャンに続く明示的ソートは、巨大なテーブル
のインデックススキャンよりも普通は高速です。</P> のインデックススキャンよりも普通は高速です。</P>
<P>
しかし、<SMALL>ORDER BY</SMALL>と組み合わされた<SMALL>LIMIT</SMALL> しかし、<SMALL>ORDER BY</SMALL>と組み合わされた<SMALL>LIMIT</SMALL>
は、テーブルの小さな部分を返すためにたびたびインデックスを使うでしょう。 は、テーブルの小さな部分を返すためにたびたびインデックスを使うでしょう。
実際、MAX() や MIN() がインデックスを使わないとしても、このような値を 実際、MAX() や MIN() がインデックスを使わないとしても、このような値を
ORDER BY と LIMIT を使ってインデックスを使って取り出すことが可能です: ORDER BY と LIMIT を使ってインデックスを使って取り出すことが可能です:
</P>
<PRE> <PRE>
SELECT col SELECT col
...@@ -969,23 +986,23 @@ ORDER BY ...@@ -969,23 +986,23 @@ ORDER BY
<P> <SMALL>LIKE</SMALL> あるいは <I>~</I> のようなワイルドカード演算 <P> <SMALL>LIKE</SMALL> あるいは <I>~</I> のようなワイルドカード演算
子は特別な環境でしか使えません: 子は特別な環境でしか使えません:
</P>
<UL> <UL>
<LI>検索文字列が文字列の最初にききます。たとえば:</LI> <LI>検索文字列が文字列の最初にききます。たとえば:
<UL> <UL>
<LI><SMALL>LIKE</SMALL> パターンが<I>%</I>で始まらない</LI> <LI><SMALL>LIKE</SMALL> パターンが<I>%</I>で始まらない</LI>
<LI><I>~</I> (正規表現) パターンは<I>^</I>で始まらなければならない</LI> <LI><I>~</I> (正規表現) パターンは<I>^</I>で始まらなければならない</LI>
</UL> </UL></LI>
<LI>検索文字列を文字クラスから始めることはできません。たとえば、[a-e]。</LI> <LI>検索文字列を文字クラスから始めることはできません。たとえば、[a-e]。</LI>
<LI><SMALL>ILIKE</SMALL><I>~*</I> のような大文字と小文字を区別し <LI><SMALL>ILIKE</SMALL><I>~*</I> のような大文字と小文字を区別し
ない検索は使えません。そのかわり、このFAQの<a href="#4.12">4.12</a>節で説明する関数のインデックスが使えます。</LI> ない検索は使えません。そのかわり、このFAQの<a href="#4.12">4.12</a>節で説明する関数のインデックスが使えます。</LI>
<LI><i>initdb</i> においては、デフォルトで<I>C</I>ロケールが使われな <LI><i>initdb</i> においては、デフォルトで<I>C</I>ロケールが使われな
くてはなりません。その理由は、Cロケール以外では次に大きな文字を知ること くてはなりません。その理由は、Cロケール以外では次に大きな文字を知ること
ができないからです。このような場合、<PRE>LIKE</PRE>インデクシングにだけ ができないからです。このような場合、<code>LIKE</code>インデクシングにだけ
働くような、特別な<PRE>text_pattern_ops</PRE>インデックスを作成 働くような、特別な<code>text_pattern_ops</code>インデックスを作成
することもできます。 することもできます。
</LI> </LI>
</UL> </UL>
<P>
<P>8.0より前のリリースでは、インデックスは、データ型がちょうどインデックスのカラムの型と一致しなければ、使えないことがしばしばありました。おそらく、int2, int8, および numeric 等のカラムのインデックスがそうです。</P> <P>8.0より前のリリースでは、インデックスは、データ型がちょうどインデックスのカラムの型と一致しなければ、使えないことがしばしばありました。おそらく、int2, int8, および numeric 等のカラムのインデックスがそうです。</P>
...@@ -994,84 +1011,84 @@ ORDER BY ...@@ -994,84 +1011,84 @@ ORDER BY
] ]
<P>
<H4><A NAME="4.9">4.9</A>) 問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどうしますか? <H4><A NAME="4.9">4.9</A>) 問い合わせオブティマイザがどのように問い合わせを評価するのかを見るにはどうしますか?
</H4> </H4>
<P> オンラインマニュアルで <SMALL>EXPLAIN</SMALL> を見て下さい。 <P> オンラインマニュアルで <SMALL>EXPLAIN</SMALL> を見て下さい。
</P>
<P>
<H3><A NAME="4.10">4.10</A>) R-tree インデックスとは何ですか?</H3> <H3><A NAME="4.10">4.10</A>) R-tree インデックスとは何ですか?</H3>
<P> R-tree インデックスは空間的なデータにインデックスを付けるために使われます。ハッシュインデックスでは範囲の検索ができません。また、B-tree インデックスでは、1次元でしか範囲の検索ができません。R-tree インデックスであれば多次元のデータを扱えます。たとえば、もし R-tree インデックスを <I>point</I> 型の属性に付けることができるとするとシステムは、「長方形に囲まれた点をすべて選択する」というような問い合わせに、より効率良く答えられます。 <P> R-tree インデックスは空間的なデータにインデックスを付けるために使われます。ハッシュインデックスでは範囲の検索ができません。また、B-tree インデックスでは、1次元でしか範囲の検索ができません。R-tree インデックスであれば多次元のデータを扱えます。たとえば、もし R-tree インデックスを <I>point</I> 型の属性に付けることができるとするとシステムは、「長方形に囲まれた点をすべて選択する」というような問い合わせに、より効率良く答えられます。
</P>
<P> R-Tree の設計の原典となる権威ある論文は: <P> R-Tree の設計の原典となる権威ある論文は:
</P>
<P> Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching." <P> Guttman, A. "R-Trees: A Dynamic Index Structure for Spatial Searching."
Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57. Proceedings of the 1984 ACM SIGMOD Int'l Conf on Mgmt of Data, 45-57.
</P>
<P> この論文は、Stonebraker 教授の "Readings in Database Systems" <P> この論文は、Stonebraker 教授の "Readings in Database Systems"
でも取り上げられています。 でも取り上げられています。
</P>
<P> <PRE>
<SMALL><PRE>
[訳注: [訳注:
奈良先端大の石川佳治さんよりR-Tree関係の文献を紹介して頂きました。 奈良先端大の石川佳治さんよりR-Tree関係の文献を紹介して頂きました。
日本語 Postgres ML のアーカイブから "Subject: [postgres95 801] spatial data structures" 日本語 Postgres ML のアーカイブから "Subject: [postgres95 801] spatial data structures"
<A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html">http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html</A> <A HREF="http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html">http://www.sra.co.jp/people/t-ishii/PostgreSQL/mhonarc/pgsql-jp/1996Oct/msg00007.html</A>
をご覧下さい。 をご覧下さい。
] ]
</PRE></SMALL> </PRE>
<P> 組込みの R-Tree でポリゴンやボックスを操作できます。理論的にはR-Tree はもっと高い次元を操作するようにも拡張できます。実質的には、R-Tree の拡張にはちょっとした作業が必要でして、現在、我々はそれをどのようにするかについての文書を持っていません。 <P> 組込みの R-Tree でポリゴンやボックスを操作できます。理論的にはR-Tree はもっと高い次元を操作するようにも拡張できます。実質的には、R-Tree の拡張にはちょっとした作業が必要でして、現在、我々はそれをどのようにするかについての文書を持っていません。
</P>
<P> <PRE>
<SMALL><PRE>
[訳注: [訳注:
R-Tree インデックスはGiSTで開発されています。 R-Tree インデックスはGiSTで開発されています。
<a href="http://www.sai.msu.su/~megera/postgres/gist/">http://www.sai.msu.su/~megera/postgres/gist/</a> <a href="http://www.sai.msu.su/~megera/postgres/gist/">http://www.sai.msu.su/~megera/postgres/gist/</a>
] ]
</PRE></SMALL> </PRE>
<P>
<H4><A NAME="4.11">4.11</A>) 遺伝的問い合わせ最適化とは何ですか? <H4><A NAME="4.11">4.11</A>) 遺伝的問い合わせ最適化とは何ですか?
</H4> </H4>
<P> GEQO モジュールは、沢山のテーブルを結合するときに、遺伝的アルゴリズム(GA)で問合わせを高速化します。これにより、しらみつぶしに探索を行なわなくても、大きな結合(join queries)を扱うことができるようになります。 <P> GEQO モジュールは、沢山のテーブルを結合するときに、遺伝的アルゴリズム(GA)で問合わせを高速化します。これにより、しらみつぶしに探索を行なわなくても、大きな結合(join queries)を扱うことができるようになります。
</P>
<P>
<H4><A NAME="4.12">4.12</A>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか? <H4><A NAME="4.12">4.12</A>) 正規表現での検索や大文字と小文字とを区別しない正規表現検索はどのように実現しますか?大文字と小文字とを区別しない検索のためのインデックスはどのように使いますか?
</H4> </H4>
<P> <P>
<I>~</I>演算子は正規表現照合を行ない、<I>~*</I> は大文字と小文字を区別しない(case-insensitive)正規表現照合を行います。 大文字と小文字を区別しない <SMALL>LIKE</SMALL> 演算子を <SMALL>ILIKE</SMALL> といいます。 <I>~</I>演算子は正規表現照合を行ない、<I>~*</I> は大文字と小文字を区別しない(case-insensitive)正規表現照合を行います。 大文字と小文字を区別しない <SMALL>LIKE</SMALL> 演算子を <SMALL>ILIKE</SMALL> といいます。
</P>
<P>大文字と小文字を区別しない等値比較は次のように表現できる: <P>大文字と小文字を区別しない等値比較は次のように表現できる:
</P>
<PRE> <PRE>
SELECT * SELECT *
FROM tab FROM tab
WHERE lower(col) = 'abc'; WHERE lower(col) = 'abc';
</PRE> </PRE>
<P>
標準インデックスでは使われず、しかしながら、もし関数インデックスを 標準インデックスでは使われず、しかしながら、もし関数インデックスを
作ったならそれが使われるでしょう。 作ったならそれが使われるでしょう。
</P>
<PRE> <PRE>
CREATE INDEX tabindex ON tab (lower(col)); CREATE INDEX tabindex ON tab (lower(col));
</PRE> </PRE>
<P>
<H4><A NAME="4.13">4.13</A>) 問い合わせの中で、フィールドが <SMALL>NULL</SMALL> であることを検出するにはどうしますか? <H4><A NAME="4.13">4.13</A>) 問い合わせの中で、フィールドが <SMALL>NULL</SMALL> であることを検出するにはどうしますか?
</H4> </H4>
<P>カラムを <SMALL>IS NULL</SMALL><SMALL>IS NOT NULL</SMALL> <P>カラムを <SMALL>IS NULL</SMALL><SMALL>IS NOT NULL</SMALL>
とで試してみます。</P> とで試してみます。</P>
<P>
<H4><A NAME="4.14">4.14</A>) 様々な文字型のそれぞれの違いは何ですか? <H4><A NAME="4.14">4.14</A>) 様々な文字型のそれぞれの違いは何ですか?
</H4> </H4>
...@@ -1086,17 +1103,18 @@ BYTEA bytea ...@@ -1086,17 +1103,18 @@ BYTEA bytea
</PRE> </PRE>
<P> 内部名にお目にかかるのは、システム・カタログを調べるときや、エラーメッセージを受け取るときです。 <P> 内部名にお目にかかるのは、システム・カタログを調べるときや、エラーメッセージを受け取るときです。
</P>
<P> 上記の型のうち最初の4つの型は "varlena" 型です(すなわち、ディスクの最初の4バイトがデータ長で、それの後に実際のデータが続きます)。このように実際の空間は宣言された大きさよりも少し大きくなります。しかし、これらのデータ型は<SMALL>TOAST</SMALL>により圧縮されたり複数ロウに渡って保存されたりして、ディスク上の空間は思ったより小さくなります。 <P> 上記の型のうち最初の4つの型は "varlena" 型です(すなわち、ディスクの最初の4バイトがデータ長で、それの後に実際のデータが続きます)。このように実際の空間は宣言された大きさよりも少し大きくなります。しかし、これらのデータ型は<SMALL>TOAST</SMALL>により圧縮されたり複数ロウに渡って保存されたりして、ディスク上の空間は思ったより小さくなります。
</P>
<P><SMALL>VARCHAR(n)</SMALL> は可変長の文字列を保存するのに最適ですが、保存できる文字列の長さに制限があります。<SMALL>TEXT</SMALL> は長さに制限の無い文字列の保存のためのもので、最大で 1ギガバイトです。 <SMALL>CHAR(n)</SMALL>は、<SMALL>VARCHAR(n)</SMALL>が与えられた文字だけを保存するのに対し、ブランクを詰め込んでいつも同じ長さで文字列を保存するのに最適です。<SMALL>BYTEA</SMALL>は、部分的に<SMALL>NULL</SMALL> のバイトを含むバイナリデータを保存するためのものです。これらのタイプは同じくらいの性能特性をもちます。</P> <P><SMALL>VARCHAR(n)</SMALL> は可変長の文字列を保存するのに最適ですが、保存できる文字列の長さに制限があります。<SMALL>TEXT</SMALL> は長さに制限の無い文字列の保存のためのもので、最大で 1ギガバイトです。 <SMALL>CHAR(n)</SMALL>は、<SMALL>VARCHAR(n)</SMALL>が与えられた文字だけを保存するのに対し、ブランクを詰め込んでいつも同じ長さで文字列を保存するのに最適です。<SMALL>BYTEA</SMALL>は、部分的に<SMALL>NULL</SMALL> のバイトを含むバイナリデータを保存するためのものです。これらのタイプは同じくらいの性能特性をもちます。</P>
<P>
<H4><A NAME="4.15.1">4.15.1</A>) 通番(serial)/自動増分フィールドはどのようにつくりますか? <H4><A NAME="4.15.1">4.15.1</A>) 通番(serial)/自動増分フィールドはどのようにつくりますか?
</H4> </H4>
<P> PostgreSQL は <SMALL>SERIAL</SMALL> データ型をサポートします。カラム上にシーケンスを自動作成します。たとえば、 <P> PostgreSQL は <SMALL>SERIAL</SMALL> データ型をサポートします。カラム上にシーケンスを自動作成します。たとえば、
</P>
<PRE> <PRE>
CREATE TABLE person ( CREATE TABLE person (
...@@ -1104,7 +1122,9 @@ BYTEA bytea ...@@ -1104,7 +1122,9 @@ BYTEA bytea
name TEXT name TEXT
); );
</PRE> </PRE>
<P>
は自動的に次のように翻訳されます: は自動的に次のように翻訳されます:
</P>
<PRE> <PRE>
CREATE SEQUENCE person_id_seq; CREATE SEQUENCE person_id_seq;
CREATE TABLE person ( CREATE TABLE person (
...@@ -1117,38 +1137,43 @@ BYTEA bytea ...@@ -1117,38 +1137,43 @@ BYTEA bytea
は、 7.3 からは自動的には行なわれなくなりました。 は、 7.3 からは自動的には行なわれなくなりました。
] ]
</PRE> </PRE>
<P>
通番についてのもっと詳しい情報は、オンラインマニュアルで <I>create_sequence</I> をご覧下さい。 通番についてのもっと詳しい情報は、オンラインマニュアルで <I>create_sequence</I> をご覧下さい。
</P>
<P> また、各ロウの<I>OID</I>フィールドを一意値として使うこともできます。しかしながら、もしもデータベースをダンプしてリロードする必要がある場合は、<SMALL>OID</SMALL>を温存するために<I>pg_dump</I><I>-o</I>オプションを使うか、または、<SMALL>COPY WITH OIDS</small>オプションを使う必要があります。 <P> また、各ロウの<I>OID</I>フィールドを一意値として使うこともできます。しかしながら、もしもデータベースをダンプしてリロードする必要がある場合は、<SMALL>OID</SMALL>を温存するために<I>pg_dump</I><I>-o</I>オプションを使うか、または、<SMALL>COPY WITH OIDS</small>オプションを使う必要があります。
</P>
<H4><A NAME="4.15.2">4.15.2</A>) <SMALL>SERIAL</SMALL>データ型に挿入される値は、どうすれば得られますか? <H4><A NAME="4.15.2">4.15.2</A>) <SMALL>SERIAL</SMALL>データ型に挿入される値は、どうすれば得られますか?
</H4> </H4>
<P>ひとつの方法は、<I>nextval()</I> 関数を使ってその値を挿入する<I>前(before)に</I> SEQUENCE オブジェクトから次の <SMALL>SERIAL</SMALL> 値を取り出し、それから実際に挿入をすることです。<A HREF="#4.15.1">4.15.1</A> のテーブルの例を使うとすると、疑似言語ではこのようになります。 <P>ひとつの方法は、<I>nextval()</I> 関数を使ってその値を挿入する<I>前(before)に</I> SEQUENCE オブジェクトから次の <SMALL>SERIAL</SMALL> 値を取り出し、それから実際に挿入をすることです。<A HREF="#4.15.1">4.15.1</A> のテーブルの例を使うとすると、疑似言語ではこのようになります。
</P>
<PRE> <PRE>
new_id = execute("SELECT nextval('person_id_seq')"); new_id = execute("SELECT nextval('person_id_seq')");
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')"); execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
</PRE> </PRE>
<P>
そうして、<tt>new_id</tt> に保存した新しい値を他の問い合わせに(たとえば、<tt>person</tt> テーブルに対する外部キー(foreign key)のように)使うとよいでしょう。自動的に作られた<SMALL>SEQUENCE</SMALL>オブジェクトの名前は、&lt;<I>table</I>&gt;_&lt;<I>serialcolumn</I>&gt;_<I>seq</I> のようになり、このうち、<I>table</I><I>serialcolumn</I> はそれぞれテーブルの名前と<SMALL>SERIAL</SMALL>カラムの名前です。 そうして、<tt>new_id</tt> に保存した新しい値を他の問い合わせに(たとえば、<tt>person</tt> テーブルに対する外部キー(foreign key)のように)使うとよいでしょう。自動的に作られた<SMALL>SEQUENCE</SMALL>オブジェクトの名前は、&lt;<I>table</I>&gt;_&lt;<I>serialcolumn</I>&gt;_<I>seq</I> のようになり、このうち、<I>table</I><I>serialcolumn</I> はそれぞれテーブルの名前と<SMALL>SERIAL</SMALL>カラムの名前です。
</P>
<P> <P>
あるいは、与えられた<SMALL>SERIAL</SMALL>値を、それが既定値として挿入された<I>後で(after)</I><I>currval()</I> 関数を使って取り出すこともできます。たとえば、 あるいは、与えられた<SMALL>SERIAL</SMALL>値を、それが既定値として挿入された<I>後で(after)</I><I>currval()</I> 関数を使って取り出すこともできます。たとえば、
</P>
<PRE> <PRE>
execute("INSERT INTO person (name) VALUES ('Blaise Pascal')"); execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
new_id = execute("SELECT currval('person_id_seq')"); new_id = execute("SELECT currval('person_id_seq')");
</PRE> </PRE>
<P>
最後に、<SMALL>INSERT</SMALL>文から返る<A HREF="#4.17"><SMALL>OID</SMALL></A>を使って、既定値をみつけることもできますが、しかし、oidの値は40億に達するともとに戻ってしまい、最も移植性の低いやり方となるでしょう。Perl DBI の DBD::Pg モジュールを使えば、$sth-&gt;execute() の後に $sth-&gt{pg_oid_status} を経由してその OID 値を使えるようにすることはできます。 最後に、<SMALL>INSERT</SMALL>文から返る<A HREF="#4.17"><SMALL>OID</SMALL></A>を使って、既定値をみつけることもできますが、しかし、oidの値は40億に達するともとに戻ってしまい、最も移植性の低いやり方となるでしょう。Perl DBI の DBD::Pg モジュールを使えば、$sth-&gt;execute() の後に $sth-&gt{pg_oid_status} を経由してその OID 値を使えるようにすることはできます。
</P>
<P>
<H4><A NAME="4.15.3">4.15.3</A>) <I>currval()</I> は他のユーザとの競合状態に陥ることはないですか? <H4><A NAME="4.15.3">4.15.3</A>) <I>currval()</I> は他のユーザとの競合状態に陥ることはないですか?
</H4> </H4>
<P>それはありません。<I>currval()</I> は、すべてのユーザではありませんが、あなたのバックエンドに与えられた現在の値を返します。 <P>それはありません。<I>currval()</I> は、すべてのユーザではありませんが、あなたのバックエンドに与えられた現在の値を返します。
</P>
<H4><A name="4.15.4">4.15.4</A>) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか? <H4><A name="4.15.4">4.15.4</A>) トランザクションが中断したときにもういちどシーケンス番号が使われないのはなぜですか?シーケンス/SERIALカラムに空きがあるのはなぜですか?
</H4> </H4>
...@@ -1156,17 +1181,18 @@ BYTEA bytea ...@@ -1156,17 +1181,18 @@ BYTEA bytea
<P>同時性を改善するために、実行中のトランザクションに、必要でトランザクションが終了するまでロックされないシーケンス値を与えています。このためトランザクションが中断されると番号割り当てにギャップを生じます。 <P>同時性を改善するために、実行中のトランザクションに、必要でトランザクションが終了するまでロックされないシーケンス値を与えています。このためトランザクションが中断されると番号割り当てにギャップを生じます。
</P> </P>
<P>
<H4><A NAME="4.16">4.16</A>) <SMALL>OID</SMALL> とは何ですか? <SMALL>TID</SMALL> とは何ですか? <H4><A NAME="4.16">4.16</A>) <SMALL>OID</SMALL> とは何ですか? <SMALL>TID</SMALL> とは何ですか?
</H4> </H4>
<P> <SMALL>OID</SMALL> とは一意のロウID に対する PostgreSQL の答えです。PostgreSQL の中でつくられるすべてのロウは一意の <SMALL>OID</SMALL> を得ます。<I>initdb</I> で発生される <SMALL>OID</SMALL> はすべて 16384 (<I>include/access/transam.h</I> から)より小さな値です。<I>initdb</I> 後のすべての <SMALL>OID</SMALL> (ユーザ作成)はそれ以上の値になります。 <P> <SMALL>OID</SMALL> とは一意のロウID に対する PostgreSQL の答えです。PostgreSQL の中でつくられるすべてのロウは一意の <SMALL>OID</SMALL> を得ます。<I>initdb</I> で発生される <SMALL>OID</SMALL> はすべて 16384 (<I>include/access/transam.h</I> から)より小さな値です。<I>initdb</I> 後のすべての <SMALL>OID</SMALL> (ユーザ作成)はそれ以上の値になります。
既定では、これらすべての <SMALL>OID</SMALL>は一つのデーブルやデータベース内に留まらず、PostgreSQL インストレーション全体の中で一意です。 既定では、これらすべての <SMALL>OID</SMALL>は一つのデーブルやデータベース内に留まらず、PostgreSQL インストレーション全体の中で一意です。
</P>
<P> PostgreSQL はテーブル間のロウを結びつけるために、そのシステムテーブル内に <SMALL>OID</SMALL> を使います。この <SMALL>OID</SMALL> は特定のユーザのロウを識別するためや結合の中で使われることができます。<SMALL>OID</SMALL> の値を保存するためには <I>OID</I> 型をカラムに使うことを奨めます。より速くアクセスするために <I>OID</I> フィールドにインデックスを作ることができます。 <P> PostgreSQL はテーブル間のロウを結びつけるために、そのシステムテーブル内に <SMALL>OID</SMALL> を使います。この <SMALL>OID</SMALL> は特定のユーザのロウを識別するためや結合の中で使われることができます。<SMALL>OID</SMALL> の値を保存するためには <I>OID</I> 型をカラムに使うことを奨めます。より速くアクセスするために <I>OID</I> フィールドにインデックスを作ることができます。
O<SMALL>ID</SMALL> は、全てのデータベースで使われる中央領域から、全ての新しいロウに割り当てられます。<SMALL>OID</SMALL> を他の何かに変えたい、あるいは元の <SMALL>OID</SMALL> もテーブルと一緒にコピーしたいのなら、できなくはありません。 O<SMALL>ID</SMALL> は、全てのデータベースで使われる中央領域から、全ての新しいロウに割り当てられます。<SMALL>OID</SMALL> を他の何かに変えたい、あるいは元の <SMALL>OID</SMALL> もテーブルと一緒にコピーしたいのなら、できなくはありません。
</P>
<PRE> <PRE>
CREATE TABLE new_table(mycol int); CREATE TABLE new_table(mycol int);
...@@ -1177,36 +1203,38 @@ BYTEA bytea ...@@ -1177,36 +1203,38 @@ BYTEA bytea
</PRE> </PRE>
<P> O<SMALL>ID</SMALL> は、4バイトの整数として保存されているので、40億を越えると溢れてしまうでしょう。誰もこれが起きたと報告してくる人はいませんでしたが、そうなる前にこの制限を取り除くことを計画しています。 <P> O<SMALL>ID</SMALL> は、4バイトの整数として保存されているので、40億を越えると溢れてしまうでしょう。誰もこれが起きたと報告してくる人はいませんでしたが、そうなる前にこの制限を取り除くことを計画しています。
</P>
<P> T<SMALL>ID</SMALL> は特定の物理ロウをそのブロックとオフセット値で識別するために使われます。<SMALL>TID</SMALL> はロウが修正されたり再ロードされると変わります。それらの <SMALL>TID</SMALL> は、物理ロウを指すためにインデックス記載で使われます。 <P> T<SMALL>ID</SMALL> は特定の物理ロウをそのブロックとオフセット値で識別するために使われます。<SMALL>TID</SMALL> はロウが修正されたり再ロードされると変わります。それらの <SMALL>TID</SMALL> は、物理ロウを指すためにインデックス記載で使われます。
</P>
<P>
<H4><A NAME="4.17">4.17</A>) PostgreSQL で使われるいくつかの用語の意味は何ですか? <H4><A NAME="4.17">4.17</A>) PostgreSQL で使われるいくつかの用語の意味は何ですか?
</H4> </H4>
<P> いくつかのソースコードや古い文書の中には、それぞの専門分野の中でもっと一般的に使われる専門用語が使われています。 <P> いくつかのソースコードや古い文書の中には、それぞの専門分野の中でもっと一般的に使われる専門用語が使われています。
</P>
<UL> <UL>
<LI> テーブル(table)、関係(relation)、クラス(class) <LI> テーブル(table)、関係(relation)、クラス(class)</LI>
<LI> ロウ(row)、レコード(record)、タップル(tuple) <LI> ロウ(row)、レコード(record)、タップル(tuple)</LI>
<LI> カラム(column)、フィールド(field)、属性(attribute) <LI> カラム(column)、フィールド(field)、属性(attribute)</LI>
<LI> 取得(retrieve)、選択(select) <LI> 取得(retrieve)、選択(select)</LI>
<LI> 置換(replace)、更新(update) <LI> 置換(replace)、更新(update)</LI>
<LI> 追加(append)、挿入(insert) <LI> 追加(append)、挿入(insert)</LI>
<LI> <SMALL>OID</SMALL>, 連番(serial value) <LI> <SMALL>OID</SMALL>, 連番(serial value)</LI>
<LI> ポータル(portal), カーソル(cursor) <LI> ポータル(portal), カーソル(cursor)</LI>
<LI> 領域変数(range variable)、テーブル名(table name)、テーブル別名(table alias) <LI> 領域変数(range variable)、テーブル名(table name)、テーブル別名(table alias)</LI>
</UL> </UL>
<P>一般的なデータベース用語のリストは:<a <P>一般的なデータベース用語のリストは:<a
href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A> href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A>
で見つけられます。</P> で見つけられます。</P>
<P>
<H4><A NAME="4.18">4.18</A>) エラーメッセージ <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>が出るのはなぜですか? <H4><A NAME="4.18">4.18</A>) エラーメッセージ <I>"ERROR: Memory exhausted in AllocSetAlloc()"</I>が出るのはなぜですか?
</H4> </H4>
<P> <P>
おそらく、システムの仮想メモリーを全て使い果たしてしまっている可能性があるか、カーネルがあるリソースについてもつ制限値が低すぎる可能性があります。 おそらく、システムの仮想メモリーを全て使い果たしてしまっている可能性があるか、カーネルがあるリソースについてもつ制限値が低すぎる可能性があります。
<I>postmaster</I> を始動する前にこれを試してみて下さい: <I>postmaster</I> を始動する前にこれを試してみて下さい:
</P>
<PRE> <PRE>
ulimit -d 262144 ulimit -d 262144
...@@ -1215,34 +1243,34 @@ href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glo ...@@ -1215,34 +1243,34 @@ href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glo
<P> <P>
シェルによって、どちらかひとつが成功するでしょうが、これはプロセスのデータセグメント制限をより高く設定し、たぶん問い合わせが完結するようになるでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後に作られる全てのサブプロセスについて適用されます。バックエンドがとても多くのデータを返すために<SMALL>SQL</SMALL> クライアントで問題が続いているのであれば、クライアントを開始する前にこれを試してみてください。 シェルによって、どちらかひとつが成功するでしょうが、これはプロセスのデータセグメント制限をより高く設定し、たぶん問い合わせが完結するようになるでしょう。このコマンドは現行のプロセスと、このコマンドを走らせた後に作られる全てのサブプロセスについて適用されます。バックエンドがとても多くのデータを返すために<SMALL>SQL</SMALL> クライアントで問題が続いているのであれば、クライアントを開始する前にこれを試してみてください。
</P>
<P>
<H4><A NAME="4.19">4.19</A>) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか?<BR> <H4><A NAME="4.19">4.19</A>) どのバージョンの PostgreSQL を走らせているかを調べるにはどうしますか?<BR>
</H4> </H4>
<P> <P>
<I>psql</I> から <CODE>SELECT version();</CODE> をタイプします。 <I>psql</I> から <CODE>SELECT version();</CODE> をタイプします。
<P> </P>
<H4><A NAME="4.20">4.20</A>) ラージ・オブジェクトの操作で<I>invalid large obj descriptor</I> を受け取りました。なぜでしょうか? <H4><A NAME="4.20">4.20</A>) ラージ・オブジェクトの操作で<I>invalid large obj descriptor</I> を受け取りました。なぜでしょうか?
</H4> </H4>
<P>ラージ・オブジェクト操作をするときは、前後に<tt>BEGIN WORK</tt><tt>COMMIT</tt>を付ける必要があります。すなわち、<tt>lo_open</tt> ... <tt>lo_close</tt>をはさみ込みます。 <P>ラージ・オブジェクト操作をするときは、前後に<tt>BEGIN WORK</tt><tt>COMMIT</tt>を付ける必要があります。すなわち、<tt>lo_open</tt> ... <tt>lo_close</tt>をはさみ込みます。
</P>
<P>現在は、PostgreSQLのトランザクションのコミット時にラージ・オブジェクト・ハンドルを閉じることにより、<I>lo_open</I>コマンドが完了した直後に強制的にルールを実行します。このため、最初にハンドルに対して何かをしようとすると、<I>invalid large obj descriptor(ラージ・オブジェクトの記述子が不正)</I>となります。それで、もし、トランザクションを使うのを忘れると、(少なくともほとんどの時間)働いていたコードがエラーメッセージを出すのです。 <P>現在は、PostgreSQLのトランザクションのコミット時にラージ・オブジェクト・ハンドルを閉じることにより、<I>lo_open</I>コマンドが完了した直後に強制的にルールを実行します。このため、最初にハンドルに対して何かをしようとすると、<I>invalid large obj descriptor(ラージ・オブジェクトの記述子が不正)</I>となります。それで、もし、トランザクションを使うのを忘れると、(少なくともほとんどの時間)働いていたコードがエラーメッセージを出すのです。
</P>
<P>もし、<SMALL>ODBC</SMALL>のようなクライアントインターフェイスをお使いなら、<tt>auto-commit off</tt>を設定する必要があるかもしれません。 <P>もし、<SMALL>ODBC</SMALL>のようなクライアントインターフェイスをお使いなら、<tt>auto-commit off</tt>を設定する必要があるかもしれません。
<P> </P>
<H4><A NAME="4.21">4.21</A>) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?<BR></H4> <H4><A NAME="4.21">4.21</A>) 現在の時刻がデフォルトとなるようなカラムはどのようにつくりますか?<BR></H4>
<P><i>CURRENT_TIMESTAMP</i>を使います: <P><i>CURRENT_TIMESTAMP</i>を使います:
</P>
<PRE> <PRE>
CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
</PRE> </PRE>
<P>
<H4><A NAME="4.22">4.22</A>) なぜ、<SMALL>IN</SMALL>を使う副問い合わせがとても遅いのですか? <H4><A NAME="4.22">4.22</A>) なぜ、<SMALL>IN</SMALL>を使う副問い合わせがとても遅いのですか?
</H4> </H4>
...@@ -1256,14 +1284,18 @@ href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glo ...@@ -1256,14 +1284,18 @@ href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glo
FROM tab FROM tab
WHERE col IN (SELECT subcol FROM subtab) WHERE col IN (SELECT subcol FROM subtab)
</PRE> </PRE>
<P>
を、置き換えて: を、置き換えて:
</P>
<PRE> <PRE>
SELECT * SELECT *
FROM tab FROM tab
WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col) WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col)
</PRE> </PRE>
<P>
とします。 とします。
これが手っ取り早いですが、<CODE>subcol</CODE>は索引付きカラムであるべきです。 これが手っ取り早いですが、<CODE>subcol</CODE>は索引付きカラムであるべきです。
</P>
<P>バージョン7.4以降では、<CODE>IN</CODE>は、通常の問い合わせと同様の洗練されたジョインの技術を実際に使い、<CODE>EXISTS</CODE>を使うことを好みます。 <P>バージョン7.4以降では、<CODE>IN</CODE>は、通常の問い合わせと同様の洗練されたジョインの技術を実際に使い、<CODE>EXISTS</CODE>を使うことを好みます。
</P> </P>
...@@ -1272,22 +1304,26 @@ href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glo ...@@ -1272,22 +1304,26 @@ href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glo
<H4><A NAME="4.23">4.23</A>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<BR></H4> <H4><A NAME="4.23">4.23</A>) <i>外部</i>結合(<i>outer</i> join)はどのように実現しますか?<BR></H4>
<P> <P>
PostgreSQL は SQL 標準構文を使う外部結合(アウタージョイン)をサポートします。ここに 2つの例題があります。 PostgreSQL は SQL 標準構文を使う外部結合(アウタージョイン)をサポートします。ここに 2つの例題があります。
</P>
<PRE> <PRE>
SELECT * SELECT *
FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col); FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
</PRE> </PRE>
<P>
あるいは あるいは
</P>
<PRE> <PRE>
SELECT * SELECT *
FROM t1 LEFT OUTER JOIN t2 USING (col); FROM t1 LEFT OUTER JOIN t2 USING (col);
</PRE> </PRE>
<P>
これらの象徴的な問い合わせでは t1.col を t2.col と結合して、t1 の結合されなかったロウ(t2 と一致しなかったロウ)も返しています。<SMALL>RIGHT</SMALL> 結合は t2 の結合されなかったロウを加えるでしょう。<SMALL>FULL</SMALL> 結合は、一致したロウに t1 と t2 からは結合されなかったロウを返すでしょう。<SMALL>OUTER</SMALL> という言葉はオプションで <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL>, または <SMALL>FULL</SMALL> などの結合を仮定されています。通常、結合は<SMALL>INNER</SMALL>結合と呼ばれます。 これらの象徴的な問い合わせでは t1.col を t2.col と結合して、t1 の結合されなかったロウ(t2 と一致しなかったロウ)も返しています。<SMALL>RIGHT</SMALL> 結合は t2 の結合されなかったロウを加えるでしょう。<SMALL>FULL</SMALL> 結合は、一致したロウに t1 と t2 からは結合されなかったロウを返すでしょう。<SMALL>OUTER</SMALL> という言葉はオプションで <SMALL>LEFT</SMALL>, <SMALL>RIGHT</SMALL>, または <SMALL>FULL</SMALL> などの結合を仮定されています。通常、結合は<SMALL>INNER</SMALL>結合と呼ばれます。
</P>
<P>
以前のリリースでは外部結合(outer join)を<SMALL>UNION</SMALL><SMALL>NOT IN</SMALL> を使ってシミュレートできます。 以前のリリースでは外部結合(outer join)を<SMALL>UNION</SMALL><SMALL>NOT IN</SMALL> を使ってシミュレートできます。
たとえば、<i>tab1</i><i>tab2</i> を結合するときは、次の問い合わせで二つのテーブルを<i>外部</i>結合します。 たとえば、<i>tab1</i><i>tab2</i> を結合するときは、次の問い合わせで二つのテーブルを<i>外部</i>結合します。
</P>
<PRE> <PRE>
SELECT tab1.col1, tab2.col2 SELECT tab1.col1, tab2.col2
FROM tab1, tab2 FROM tab1, tab2
...@@ -1299,23 +1335,20 @@ PostgreSQL ...@@ -1299,23 +1335,20 @@ PostgreSQL
ORDER BY col1 ORDER BY col1
</PRE> </PRE>
<P>
<H4><A NAME="4.24">4.24</A>) 複数のデータベースを使う問い合わせはどのようにすればできますか?<BR></H4> <H4><A NAME="4.24">4.24</A>) 複数のデータベースを使う問い合わせはどのようにすればできますか?<BR></H4>
<P> <P>
現行のデータベース以外への問い合わせ方法はありません。というのもPostgreSQLがデータベース仕様のシステムカタログを読み込むためで、そこには、たとえそのふりをするだけにしろ、データベースを越えて問い合わせをするすべがありません。 現行のデータベース以外への問い合わせ方法はありません。というのもPostgreSQLがデータベース仕様のシステムカタログを読み込むためで、そこには、たとえそのふりをするだけにしろ、データベースを越えて問い合わせをするすべがありません。
<P> </P><P>
<I>contrib/dblink</I> はデータベース間(cross-database)の問い合わせを関数呼出しにより許します。もちろん、クライアントは同時に接続を別のデータベースへも張らなくてはならず、結果をクライアント側でマージしなくてはなりません。</P> <I>contrib/dblink</I> はデータベース間(cross-database)の問い合わせを関数呼出しにより許します。もちろん、クライアントは同時に接続を別のデータベースへも張らなくてはならず、結果をクライアント側でマージしなくてはなりません。</P>
<P>
<H4><A NAME="4.25">4.25</A>) 関数で複数のロウまたはカラムを返すにはどうしますか?<BR></H4> <H4><A NAME="4.25">4.25</A>) 関数で複数のロウまたはカラムを返すにはどうしますか?<BR></H4>
<P>7.3では関数から、複数のロウや複数カラムを簡単に返せます。 <P>7.3では関数から、複数のロウや複数カラムを簡単に返せます。
<a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</a> <a href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</a>
</P>
<P>
<H4><A name="4.26">4.26</A>)なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop することができないのでしょうか?</H4> <H4><A name="4.26">4.26</A>)なぜ、PL/PgSQL 関数の中から一時テーブルを確実に create/drop することができないのでしょうか?</H4>
<P> <P>
PL/PgSQL は関数の内容をキャッシュし、その不幸な副作用のため、もし PL/PgSQL 関数が一時テーブルにアクセスすると、そのテーブルはあとでドロップされ再作成されますが、関数が再び呼び出されると、キャッシュされているその関数の内容はまだ古い一時テーブルを依然として指しているからです。解決策は、 PL/PgSQL の中で <SMALL>EXECUTE</SMALL> を一時テーブルアクセスのために使うことです。これで、毎回問い合わせをパースし直すことになるでしょう。</P> PL/PgSQL は関数の内容をキャッシュし、その不幸な副作用のため、もし PL/PgSQL 関数が一時テーブルにアクセスすると、そのテーブルはあとでドロップされ再作成されますが、関数が再び呼び出されると、キャッシュされているその関数の内容はまだ古い一時テーブルを依然として指しているからです。解決策は、 PL/PgSQL の中で <SMALL>EXECUTE</SMALL> を一時テーブルアクセスのために使うことです。これで、毎回問い合わせをパースし直すことになるでしょう。</P>
...@@ -1336,7 +1369,6 @@ PL/PgSQL ...@@ -1336,7 +1369,6 @@ PL/PgSQL
</UL> </UL>
<P>
<pre> <pre>
[訳注 [訳注
レプリケーション関連の項目がなくなりましたが、訳注のみ残してあります。 レプリケーション関連の項目がなくなりましたが、訳注のみ残してあります。
...@@ -1355,41 +1387,37 @@ PL/PgSQL ...@@ -1355,41 +1387,37 @@ PL/PgSQL
http://www.postgresql.jp/wg/dt/index.html http://www.postgresql.jp/wg/dt/index.html
] ]
</pre> </pre>
<P>
<P>
<HR> <HR>
<H2 align="center">PostgreSQLの拡張についての質問</H2> <H2 align="center">PostgreSQLの拡張についての質問</H2>
<P>
<H4><A NAME="5.1">5.1</A>) 自分で書いたユーザ定義関数を psql の中で実行するとコア・ダンプしてしまうのはなぜですか? <H4><A NAME="5.1">5.1</A>) 自分で書いたユーザ定義関数を psql の中で実行するとコア・ダンプしてしまうのはなぜですか?
</H4> </H4>
<P> 問題は色々と考えられますが、まず最初に、作成したユーザ定義関数を単独のテストプログラムにして試してみて下さい。 <P> 問題は色々と考えられますが、まず最初に、作成したユーザ定義関数を単独のテストプログラムにして試してみて下さい。
</P>
<P>
<H4><A NAME="5.2">5.2</A>) PostgreSQL 用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献したいのですが? <H4><A NAME="5.2">5.2</A>) PostgreSQL 用に書いたちょっと素敵な新しい型や関数を提供してプロジェクトに貢献したいのですが?
</H4> </H4>
<P> 皆さんの行なった拡張を、<I>pgsql-hackers</I> メーリング・リストに送ってください。そして、ゆくゆくはそうした拡張が <I>contrib/</I> サブディレクトリの中に入ることになるでしょう。 <P> 皆さんの行なった拡張を、<I>pgsql-hackers</I> メーリング・リストに送ってください。そして、ゆくゆくはそうした拡張が <I>contrib/</I> サブディレクトリの中に入ることになるでしょう。
</P>
<P>
<H4><A NAME="5.3">5.3</A>) タプルを返す C言語の関数はどのように書きますか? <H4><A NAME="5.3">5.3</A>) タプルを返す C言語の関数はどのように書きますか?
</H4> </H4>
<P>バージョン7.3以降のPostgreSQLでは、テーブルを返す関数を C, PL/PgSQL、そして SQL にて完全にサポートします。詳しくはプログラマガイドの情報を見てください。Cで定義された表を返す関数の例題が<I>contrib/tablefunc</I>の中にあります。 <P>バージョン7.3以降のPostgreSQLでは、テーブルを返す関数を C, PL/PgSQL、そして SQL にて完全にサポートします。詳しくはプログラマガイドの情報を見てください。Cで定義された表を返す関数の例題が<I>contrib/tablefunc</I>の中にあります。
</P>
<H4><A NAME="5.4">5.4</A>) ソース・ファイルを変更しました。再コンパイルしても変化が見られないのはなぜですか?
<P><H4><A NAME="5.4">5.4</A>) ソース・ファイルを変更しました。再コンパイルしても変化が見られないのはなぜですか?
</H4> </H4>
<P> いくつかの <I>Makefile</I> がインクルード・ファイルに対して適切な依存関係を持っていません。<I>make clean</I> をしてからもう一度 <I>make</I> を行なわなくてはなりません。もし、<SMALL>GCC</SMALL> をお使いであれば <i>configure</i><i>--enable-depend</i> オプションを使って、コンパイラに依存関係を自動的に調べさせることもできます。 <P> いくつかの <I>Makefile</I> がインクルード・ファイルに対して適切な依存関係を持っていません。<I>make clean</I> をしてからもう一度 <I>make</I> を行なわなくてはなりません。もし、<SMALL>GCC</SMALL> をお使いであれば <i>configure</i><i>--enable-depend</i> オプションを使って、コンパイラに依存関係を自動的に調べさせることもできます。
</P>
<P>
<HR> <HR>
<SMALL><PRE> <PRE>
[訳注: [訳注:
日本語版の製作については以下の通りです。 日本語版の製作については以下の通りです。
...@@ -1426,7 +1454,6 @@ PL/PgSQL ...@@ -1426,7 +1454,6 @@ PL/PgSQL
なお、この和訳に関するご意見は(<A HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)までお寄せ下さい。 なお、この和訳に関するご意見は(<A HREF="mailto:juk at PostgreSQL.jp">juk at PostgreSQL.jp</A>)までお寄せ下さい。
] ]
</PRE></SMALL> </PRE>
</P>
</BODY> </BODY>
</HTML> </HTML>
...@@ -237,7 +237,7 @@ ...@@ -237,7 +237,7 @@
<P>Tekst powyej, jest klasyczn licencj BSD. <P>Tekst powyej, jest klasyczn licencj BSD.
Nie posiada ona adnych restrykcji co do uywania kodu rdowego. Nie posiada ona adnych restrykcji co do uywania kodu rdowego.
Podoba nam si i nie zamierzamy jej zmienia. Podoba nam si i nie zamierzamy jej zmienia.</P>
<H4><A name="1.3">1.3</A>) Na jakich systemach Unixowych dziaa <H4><A name="1.3">1.3</A>) Na jakich systemach Unixowych dziaa
PostreSQL?</H4> PostreSQL?</H4>
...@@ -266,7 +266,7 @@ ...@@ -266,7 +266,7 @@
<P>Serwer moe by uruchamiany na Windows NT i Win2k uywajc <P>Serwer moe by uruchamiany na Windows NT i Win2k uywajc
bibliotek Cygwin, Cygnus Unix/NT. W pliku <I>pgsql/doc/FAQ_MSWIN</I> bibliotek Cygwin, Cygnus Unix/NT. W pliku <I>pgsql/doc/FAQ_MSWIN</I>
znajdujcym si w rdach lub pod adresem: <A href= znajdujcym si w rdach lub pod adresem: <A href=
"http://www.postgresql.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A> na naszych stronach.<P> "http://www.postgresql.org/docs/faqs/text/FAQ_MSWIN">http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN</A> na naszych stronach.</P><P>
Obecnie prowadzone s prace nad stworzeniem wersji dla MS Win Obecnie prowadzone s prace nad stworzeniem wersji dla MS Win
NT/200/XP. Jeli chcesz si dowiedzie o obecnym statusie tych prac NT/200/XP. Jeli chcesz si dowiedzie o obecnym statusie tych prac
zobacz <A zobacz <A
...@@ -283,7 +283,7 @@ ...@@ -283,7 +283,7 @@
<P>Gwny serwer ftp z dostpem "anonymous" dla PostgreSQL znajduje <P>Gwny serwer ftp z dostpem "anonymous" dla PostgreSQL znajduje
si <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>. si <A href="ftp://ftp.PostgreSQL.org/pub">ftp://ftp.PostgreSQL.org/pub</A>.
jeli szukasz mirrorw sprawd nasz gwn stron www.<P> jeli szukasz mirrorw sprawd nasz gwn stron www.</P>
<H4><A name="1.6">1.6</A>) Gdzie mona szuka wsparcia technicznego?</H4> <H4><A name="1.6">1.6</A>) Gdzie mona szuka wsparcia technicznego?</H4>
...@@ -334,7 +334,7 @@ ...@@ -334,7 +334,7 @@
mona znale na stronach WWW PostgreSQL pod adresem:</P> mona znale na stronach WWW PostgreSQL pod adresem:</P>
<BLOCKQUOTE> <BLOCKQUOTE>
<A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A> <P><A href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</A></P>
</BLOCKQUOTE> </BLOCKQUOTE>
<P>W sieci EFNet istnieje kana IRC <I>#PostgreSQL</I>. Ja, do <P>W sieci EFNet istnieje kana IRC <I>#PostgreSQL</I>. Ja, do
...@@ -599,7 +599,7 @@ ...@@ -599,7 +599,7 @@
</P> </P>
<P> <P>
Wicej informacji na ten temat znajduje si pod adresem See Wicej informacji na ten temat znajduje si pod adresem See
<A href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A>. <A href="http://techdocs.postgresql.org/guides/GUITools">http://techdocs.postgresql.org/guides/GUITools</A>.</P>
<H4><A name="2.4">2.4</A>) Za pomoc jakich jzykw programowania <H4><A name="2.4">2.4</A>) Za pomoc jakich jzykw programowania
mona si komunikowa z PostgreSQL?</H4> mona si komunikowa z PostgreSQL?</H4>
...@@ -882,14 +882,13 @@ ...@@ -882,14 +882,13 @@
pierwszych rzdw, by moe bdzie konieczno wykonania zapytania do pierwszych rzdw, by moe bdzie konieczno wykonania zapytania do
momentu a zostan znalezione podane wyniki.</P> momentu a zostan znalezione podane wyniki.</P>
<P> <P>
Aby otrzyma losowy rzd, uyj: Aby otrzyma losowy rzd, uyj:</P>
<PRE> <PRE>
SELECT col SELECT col
FROM tab FROM tab
ORDER BY random() ORDER BY random()
LIMIT 1; LIMIT 1;
</PRE> </PRE>
</P>
<H4><A name="4.3">4.3</A>) Jak mog uzyska list wszystkich tabel <H4><A name="4.3">4.3</A>) Jak mog uzyska list wszystkich tabel
czy innych rzeczy pod <I>psql</I>?</H4> czy innych rzeczy pod <I>psql</I>?</H4>
...@@ -926,7 +925,6 @@ ...@@ -926,7 +925,6 @@
ALTER TABLE tab DROP COLUMN old_col; ALTER TABLE tab DROP COLUMN old_col;
COMMIT; COMMIT;
</PRE> </PRE>
</P>
<H4><A name="4.5">4.5</A>) Jaki jest maksymalny rozmiar dla rzdu, <H4><A name="4.5">4.5</A>) Jaki jest maksymalny rozmiar dla rzdu,
tabeli i bazy danych?</H4> tabeli i bazy danych?</H4>
...@@ -1034,7 +1032,7 @@ ...@@ -1034,7 +1032,7 @@
przy wykonywaniu zcze (join). Sekwencyjne przeszukiwanie po ktrym przy wykonywaniu zcze (join). Sekwencyjne przeszukiwanie po ktrym
nastpuje sortowanie jest zazwyczaj szybsze ni wyszukiwanie za nastpuje sortowanie jest zazwyczaj szybsze ni wyszukiwanie za
pomoc indeksu na duej tabeli.</P> pomoc indeksu na duej tabeli.</P>
Jakkolwiek <SMALL>LIMIT</SMALL> w poczeniu z <SMALL>ORDER BY</SMALL> <P>Jakkolwiek <SMALL>LIMIT</SMALL> w poczeniu z <SMALL>ORDER BY</SMALL>
czsto bdzie wykorzystywa indeksy poniewa jedynie maa cz z czsto bdzie wykorzystywa indeksy poniewa jedynie maa cz z
tabeli jest zwracana. W rzeczywistoci, chocia MAX() i MIN() nie tabeli jest zwracana. W rzeczywistoci, chocia MAX() i MIN() nie
uywaj indeksw, moliwe jest aby zwrci te wartoci uywajc uywaj indeksw, moliwe jest aby zwrci te wartoci uywajc
...@@ -1049,7 +1047,7 @@ ...@@ -1049,7 +1047,7 @@
<P> <P>
Jeli uwaasz, e optimizer myli si wybierajc sequential scan, uyj Jeli uwaasz, e optimizer myli si wybierajc sequential scan, uyj
SET enable_seqscan TO 'off' i uruchom testy aby sprawdzi czy wtym SET enable_seqscan TO 'off' i uruchom testy aby sprawdzi czy wtym
wypadku zapytanie bdzie szybciej wykonywane. wypadku zapytanie bdzie szybciej wykonywane.</P>
<P>Kiedy uywa si operatorw dopasujcych takich jak <P>Kiedy uywa si operatorw dopasujcych takich jak
<SMALL>LIKE</SMALL> lub <I>~</I>, indeksy bd uywane jedynie w <SMALL>LIKE</SMALL> lub <I>~</I>, indeksy bd uywane jedynie w
...@@ -1057,16 +1055,16 @@ ...@@ -1057,16 +1055,16 @@
<UL> <UL>
<LI>Pocztek wyszukiwania jest oparty na pocztku acucha tekstu. <LI>Pocztek wyszukiwania jest oparty na pocztku acucha tekstu.
<UL> <UL>
<LI>wzorce <SMALL>LIKE</SMALL> nie mog si zaczyna <I>%</I> <LI>wzorce <SMALL>LIKE</SMALL> nie mog si zaczyna <I>%</I></LI>
<LI>dopasowania operatorem <I>~</I> (dopasowania regularne) <LI>dopasowania operatorem <I>~</I> (dopasowania regularne)
musz si zaczyna znakiem specjalnym <I>^</I>.</P> musz si zaczyna znakiem specjalnym <I>^</I>.</LI>
</UL> </UL></LI>
<LI>Pocztek wyszukiwania nie moe si zaczyna od klas znakw, np. <LI>Pocztek wyszukiwania nie moe si zaczyna od klas znakw, np.
[a-e]. [a-e].</LI>
<LI>Case-insensitive searches such as ILIKE and ~* do not utilise <LI>Case-insensitive searches such as ILIKE and ~* do not utilise
indexes. Instead, use functional indexes, which are described in indexes. Instead, use functional indexes, which are described in
section 4.12. section 4.12.</LI>
<LI>Standardowe locale C musi by uzyte przy wykonywaniu initdb <LI>Standardowe locale C musi by uzyte przy wykonywaniu initdb</LI>
</UL> </UL>
<H4><A name="4.9">4.9</A>) Jak mog sprawdzi w jakis sposb "query <H4><A name="4.9">4.9</A>) Jak mog sprawdzi w jakis sposb "query
optimizer" wykonuje moje zapytanie?</H4> optimizer" wykonuje moje zapytanie?</H4>
...@@ -1165,7 +1163,7 @@ BYTEA bytea zmiennej d ...@@ -1165,7 +1163,7 @@ BYTEA bytea zmiennej d
przechowywane out-of-line jako <SMALL>TOAST</SMALL>, wic faktyczne przechowywane out-of-line jako <SMALL>TOAST</SMALL>, wic faktyczne
zuycie miejsca na dysku moe by mniejsze ni oczekiwane.</P> zuycie miejsca na dysku moe by mniejsze ni oczekiwane.</P>
<SMALL>VARCHAR(n)</SMALL> jest <P> <SMALL>VARCHAR(n)</SMALL> jest
najodpowiedniejszy do przechowywania acuchw o rnej dugoci najodpowiedniejszy do przechowywania acuchw o rnej dugoci
ale okrela on maksymaln jego dugo. ale okrela on maksymaln jego dugo.
...@@ -1344,7 +1342,7 @@ BYTEA bytea zmiennej d ...@@ -1344,7 +1342,7 @@ BYTEA bytea zmiennej d
<P>List terminw zwizanych z bazami danych moesz znale pod tym <P>List terminw zwizanych z bazami danych moesz znale pod tym
adresem:<A adresem:<A
href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A>. href="http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html">http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.html</A>.</P>
<H4><A name="4.18">4.18</A>) Skd bierze si ten bd <I>"ERROR: <H4><A name="4.18">4.18</A>) Skd bierze si ten bd <I>"ERROR:
Memory exhausted in AllocSetAlloc()"</I>?</H4> Memory exhausted in AllocSetAlloc()"</I>?</H4>
...@@ -1488,7 +1486,7 @@ BYTEA bytea zmiennej d ...@@ -1488,7 +1486,7 @@ BYTEA bytea zmiennej d
kolumn?</H4> kolumn?</H4>
<P>Moesz w atwy sposb zwraca wiele rzdw lub kolumn uywajc <P>Moesz w atwy sposb zwraca wiele rzdw lub kolumn uywajc
funkcji z: <A HREF="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>. funkcji z: <A href="http://techdocs.postgresql.org/guides/SetReturningFunctions">http://techdocs.postgresql.org/guides/SetReturningFunctions</A>.</P>
<H4><A name="4.26">4.26</A>) Dlaczego nie mog w sposb pewny <H4><A name="4.26">4.26</A>) Dlaczego nie mog w sposb pewny
tworzy/usuwa tabel tymczasowych w funkcjach PL/PgSQL?</H4> tworzy/usuwa tabel tymczasowych w funkcjach PL/PgSQL?</H4>
...@@ -1503,38 +1501,36 @@ BYTEA bytea zmiennej d ...@@ -1503,38 +1501,36 @@ BYTEA bytea zmiennej d
funkcji. funkcji.
</P> </P>
<H4><A name="4.27">4.27) Jakie s moliwoci replikacji w PostgreSQL?</H4> <H4><A name="4.27">4.27</A>) Jakie s moliwoci replikacji w PostgreSQL?</H4>
<P> <P>
Jest kilka opcji aby stosowa replikacj typu master/slave. Ten typ Jest kilka opcji aby stosowa replikacj typu master/slave. Ten typ
pozwala jedynie masterowi na dokonywanie zmian w bazie danych, a pozwala jedynie masterowi na dokonywanie zmian w bazie danych, a
slave moe jedynie te zmiany odczytywa. Na stronie slave moe jedynie te zmiany odczytywa. Na stronie
<A <A
HREF="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</A> href="http://gborg.PostgreSQL.org/genpage?replication_research">http://gborg.PostgreSQL.org/genpage?replication_research</A>
znajduje si ich lista. Replikacja typu multi-master jest w trakcie znajduje si ich lista. Replikacja typu multi-master jest w trakcie
prac, opis projektu znajduje si pod adresem: <A prac, opis projektu znajduje si pod adresem: <A
HREF="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php"> href="http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php">
http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>. http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php</A>.
</P> </P>
<H4><A name="4.28">4.28) Jakie moliwoci szyfrowania oferuje <H4><A name="4.28">4.28</A>) Jakie moliwoci szyfrowania oferuje
PostgreSQL?</H4> PostgreSQL?</H4>
<P>
<UL> <UL>
<LI>contrib/pgcrypto zawiera wiele funkcji za pomoc, ktrych moemy uywa <LI>contrib/pgcrypto zawiera wiele funkcji za pomoc, ktrych moemy uywa
kryptografii w zapytaniach SQL. kryptografii w zapytaniach SQL.</LI>
<LI>Aby szyfrowa transmisj od klienta do serwera, ten musi mie <LI>Aby szyfrowa transmisj od klienta do serwera, ten musi mie
ustawion opcj ssl na true w pliku postgresql.conf, odpowiedni ustawion opcj ssl na true w pliku postgresql.conf, odpowiedni
wpis host lub hostssl musi wystpowa w pliku pg_hba.conf, oraz wpis host lub hostssl musi wystpowa w pliku pg_hba.conf, oraz
sslmode nie moe by wyczone w kliencie. (Warto zwrci uwag, e sslmode nie moe by wyczone w kliencie. (Warto zwrci uwag, e
moliwe jest take uywanie transportw szyfrujcw przez strony moliwe jest take uywanie transportw szyfrujcw przez strony
trzecie, takie jak stunnel lub ssh, poza natywnym wsparciem dla SSL trzecie, takie jak stunnel lub ssh, poza natywnym wsparciem dla SSL
przez PostgreSQL). przez PostgreSQL).</LI>
<LI>Hasa uytkownikw bazy danych s automatycznie szyfrowane od <LI>Hasa uytkownikw bazy danych s automatycznie szyfrowane od
wersji 7.3. W poprzednich wersjach, naley t funkcjonalno poprzez wersji 7.3. W poprzednich wersjach, naley t funkcjonalno poprzez
wczenie opcji PASSWORD_ENCRYPTION w postgresql.conf. wczenie opcji PASSWORD_ENCRYPTION w postgresql.conf. </LI>
<LI>Serwer moe dziaa uywajc szyfrowanego systemu plikw. <LI>Serwer moe dziaa uywajc szyfrowanego systemu plikw.</LI>
</UL> </UL>
</P>
<H2 align="center">Rozwijanie PostgreSQL</H2> <H2 align="center">Rozwijanie PostgreSQL</H2>
......
...@@ -236,16 +236,16 @@ ...@@ -236,16 +236,16 @@
<A href="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P> <A href="http://techdocs.postgresql.org/companies.php">http://techdocs.postgresql.org/companies.php</A>.</P>
<H4><A name="1.6">1.6</A>) ?</H3> <H4><A name="1.6">1.6</A>) ?</H4>
<P> ޣ <P> ޣ
PostgreSQL : PostgreSQL :
<A HREF="http://www.postgresql.org/support/submitbug"> <A href="http://www.postgresql.org/support/submitbug">
http://www.postgresql.org/support/submitbug</A>.</P> http://www.postgresql.org/support/submitbug</A>.</P>
<P> PostgreSQL <P> PostgreSQL
FTP <A href="ftp://ftp.postgresql.org/pub"> FTP <A href="ftp://ftp.postgresql.org/pub">
ftp://ftp.PostgreSQL.org/pub</A>. ftp://ftp.PostgreSQL.org/pub</A>.</P>
<H4><A name="1.7">1.7</A>) ?</H4> <H4><A name="1.7">1.7</A>) ?</H4>
...@@ -604,19 +604,18 @@ ...@@ -604,19 +604,18 @@
? ?</H4> ? ?</H4>
<P> , <P> ,
<SMALL>SELECT</SMALL> <SMALL>LIMIT</SMALL>.</P> <SMALL>SELECT</SMALL> <SMALL>LIMIT</SMALL>.
- , <SMALL>ORDER BY</SMALL>, - , <SMALL>ORDER BY</SMALL>,
, . , .
<SMALL>SELECT</SMALL>, <SMALL>SELECT</SMALL>,
<SMALL>FETCH</SMALL>.</P> <SMALL>FETCH</SMALL>.</P>
<p>To <small>SELECT</small> a random row, use: <p>To <small>SELECT</small> a random row, use:</p>
</p><pre> SELECT col <pre> SELECT col
FROM tab FROM tab
ORDER BY random() ORDER BY random()
LIMIT 1; LIMIT 1;
</pre> </pre>
</p>
<H4><A name="4.2">4.2</A>) , , <H4><A name="4.2">4.2</A>) , ,
? , ? ,
...@@ -646,7 +645,7 @@ ...@@ -646,7 +645,7 @@
<H4><A name="4.3">4.3</A>) ?</H4> <H4><A name="4.3">4.3</A>) ?</H4>
<P> 8.0 , <P> 8.0 ,
<SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>. <SMALL>ALTER TABLE ALTER COLUMN TYPE</SMALL>.</P>
<P> :</P> <P> :</P>
<PRE> <PRE>
...@@ -662,7 +661,7 @@ ...@@ -662,7 +661,7 @@
<P> :</P> <P> :</P>
<BLOCKQUOTE> <BLOCKQUOTE>
<TABLE BORDER="1"> <TABLE>
<TBODY> <TBODY>
<TR> <TR>
<TD> ?</TD> <TD> ?</TD>
...@@ -775,7 +774,7 @@ ...@@ -775,7 +774,7 @@
, ,
. MAX() MIN() . MAX() MIN()
, ,
<SMALL>ORDER BY</SMALL> <SMALL>LIMIT</SMALL>: <SMALL>ORDER BY</SMALL> <SMALL>LIMIT</SMALL>:</P>
<pre> <pre>
SELECT col SELECT col
FROM tab FROM tab
...@@ -833,8 +832,8 @@ ...@@ -833,8 +832,8 @@
WHERE lower(col) = 'abc'; WHERE lower(col) = 'abc';
</PRE> </PRE>
. , <P> . ,
, : , :</P>
<PRE> <PRE>
CREATE INDEX tabindex ON tab (lower(col)); CREATE INDEX tabindex ON tab (lower(col));
</PRE> </PRE>
...@@ -848,7 +847,7 @@ ...@@ -848,7 +847,7 @@
<H4><A name="4.10">4.10</A>) <H4><A name="4.10">4.10</A>)
?</H4> ?</H4>
<BLOCKQUOTE> <BLOCKQUOTE>
<TABLE BORDER="1"> <TABLE>
<TBODY> <TBODY>
<TR> <TR>
<TH></TH> <TH></TH>
...@@ -919,7 +918,7 @@ ...@@ -919,7 +918,7 @@
); );
</PRE> </PRE>
: <P> : </P>
<PRE> <PRE>
CREATE SEQUENCE person_id_seq; CREATE SEQUENCE person_id_seq;
CREATE TABLE person ( CREATE TABLE person (
...@@ -994,12 +993,12 @@ ...@@ -994,12 +993,12 @@
O<SMALL>ID</SMALL>, <SMALL>SERIAL</SMALL> O<SMALL>ID</SMALL>, <SMALL>SERIAL</SMALL>
. 8- . 8-
<SMALL>SERIAL8</SMALL>. <SMALL>SERIAL8</SMALL>.</P>
<P>T<SMALL>ID</SMALL> <P>T<SMALL>ID</SMALL>
offset . T<SMALL>ID</SMALL> offset . T<SMALL>ID</SMALL>
. .
<P>T<SMALL>ID</SMALL> T<SMALL>ID</SMALL>
.</P> .</P>
......
...@@ -111,7 +111,7 @@ adreslerinde g ...@@ -111,7 +111,7 @@ adreslerinde g
<a href="#4.18">4.18</a>) Neden "<code>ERROR: Memory exhausted in AllocSetAlloc()</code>" <a href="#4.18">4.18</a>) Neden "<code>ERROR: Memory exhausted in AllocSetAlloc()</code>"
hatasn alyorum?<br> hatasn alyorum?<br>
<a href="#4.19">4.19</a>) Hangi PostgreSQL srmn alstrdm nasl grebilirim?<br> <a href="#4.19">4.19</a>) Hangi PostgreSQL srmn alstrdm nasl grebilirim?<br>
<a href="#4.20">4.20</a>) Neden <i>large-object</i> ilemlerim, "</code>invalid large <a href="#4.20">4.20</a>) Neden <i>large-object</i> ilemlerim, "<code>invalid large
obj descriptor</code>" hatasn veriyor?<br> obj descriptor</code>" hatasn veriyor?<br>
<a href="#4.21">4.21</a>) u andaki zaman ntanml deer olarak kabul <a href="#4.21">4.21</a>) u andaki zaman ntanml deer olarak kabul
eden kolonu nasl yaratrm?<br> eden kolonu nasl yaratrm?<br>
...@@ -190,7 +190,7 @@ adreslerinde g ...@@ -190,7 +190,7 @@ adreslerinde g
<P>PostgreSQL 8.0 srm ile , PostgreSQL artk Win2000, WinXP ve Win2003 gibi Microsoft <P>PostgreSQL 8.0 srm ile , PostgreSQL artk Win2000, WinXP ve Win2003 gibi Microsoft
Windows NT tabanl iletim sistemlerinde doal olarak almaya balamtr. Paketlenmi bir Windows NT tabanl iletim sistemlerinde doal olarak almaya balamtr. Paketlenmi bir
kurulum program, <a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>. adresinden kurulum program, <a href="http://pgfoundry.org/projects/pginstaller">http://pgfoundry.org/projects/pginstaller</a>. adresinden
indirilebilir. indirilebilir.</P>
<p>Ayrca, http://forge.novell.com adresinde Novell Netware 6 portu bulunmaktadr.</p> <p>Ayrca, http://forge.novell.com adresinde Novell Netware 6 portu bulunmaktadr.</p>
...@@ -218,7 +218,7 @@ adreslerinde g ...@@ -218,7 +218,7 @@ adreslerinde g
<pre>subscribe<br>end</pre> <pre>subscribe<br>end</pre>
<p>yazan bir e-posta atmanz yeterli olacaktr.</p> <p>yazan bir e-posta atmanz yeterli olacaktr.</p>
<p>Bunun dndaki e-posta listelerine ve PostgreSQL hakknda bilgiye, PostgreSQL WWW <p>Bunun dndaki e-posta listelerine ve PostgreSQL hakknda bilgiye, PostgreSQL WWW
ana sayfasndan ulasabilirsiniz: <i><a href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</a></i><p> ana sayfasndan ulasabilirsiniz: <i><a href="http://www.PostgreSQL.org">http://www.PostgreSQL.org</a></i></p>
<p>Ayn zamanda, EFNet zerinde, <code>#PostgreSQL</code> adl bir IRC kanal <p>Ayn zamanda, EFNet zerinde, <code>#PostgreSQL</code> adl bir IRC kanal
bulunmaktadr. Bunun iin, <code>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</code> bulunmaktadr. Bunun iin, <code>irc -c '#PostgreSQL' "$USER" irc.phoenix.net</code>
Unix komutunu kullanabilirsiniz.</p> Unix komutunu kullanabilirsiniz.</p>
...@@ -235,7 +235,7 @@ adreslerinde g ...@@ -235,7 +235,7 @@ adreslerinde g
<code>/doc</code> dizinine baknz. Ayrca, bu el kitapklarn online olarak <code>/doc</code> dizinine baknz. Ayrca, bu el kitapklarn online olarak
<i><a href="http://www.PostgreSQL.org/docs/">http://www.PostgreSQL.org/docs/</a></i> adresinden inceleyebilirsiniz.</p> <i><a href="http://www.PostgreSQL.org/docs/">http://www.PostgreSQL.org/docs/</a></i> adresinden inceleyebilirsiniz.</p>
<p><i><a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a></i> <p><i><a href="http://www.PostgreSQL.org/docs/awbook.html">http://www.PostgreSQL.org/docs/awbook.html</a></i>
ve <i><a href="http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook<a></i> ve <i><a href="http://www.commandprompt.com/ppbook">http://www.commandprompt.com/ppbook</a></i>
adreslerinde PostgreSQL kitaplar bulunmaktadr. PostgreSQL kitablarnn listesine, adreslerinde PostgreSQL kitaplar bulunmaktadr. PostgreSQL kitablarnn listesine,
<i><a href="http://www.ca.PostgreSQL.org/books/">http://www.ca.PostgreSQL.org/books/</a></i> adresinden ulaaiblirsiniz. <i><a href="http://www.ca.PostgreSQL.org/books/">http://www.ca.PostgreSQL.org/books/</a></i> adresinden ulaaiblirsiniz.
Ayrca, PostgreSQL konusundaki teknik makalelere de Ayrca, PostgreSQL konusundaki teknik makalelere de
...@@ -288,7 +288,7 @@ adreslerinde g ...@@ -288,7 +288,7 @@ adreslerinde g
<h4><a name="1.14">1.14</a>) PostgreSQL, diger DBMS'lerle nasl karlastrlabilir?</h4> <h4><a name="1.14">1.14</a>) PostgreSQL, diger DBMS'lerle nasl karlastrlabilir?</h4>
<p>Bir yazlmn gcn lmek iin eitli yollar vardr: Yazlmn zellikleri, <p>Bir yazlmn gcn lmek iin eitli yollar vardr: Yazlmn zellikleri,
baarm, gvenilirlii, destei ve creti.</p> baarm, gvenilirlii, destei ve creti.</p>
<p>zellikler:<p> <p>zellikler:</p>
<p>PostgreSQL mevcut byk ticari veritabanlarnn, <i>transaction</i>, <p>PostgreSQL mevcut byk ticari veritabanlarnn, <i>transaction</i>,
<i>subselect</i>, <i>trigger</i>, <i>view</i>, <i>foreign key referential integrity</i> <i>subselect</i>, <i>trigger</i>, <i>view</i>, <i>foreign key referential integrity</i>
ve <i>sophisticated locking</i> gibi (<i>user-defined types</i>), <i>rules</i>, ve <i>sophisticated locking</i> gibi (<i>user-defined types</i>), <i>rules</i>,
...@@ -355,7 +355,7 @@ adreslerinde g ...@@ -355,7 +355,7 @@ adreslerinde g
<p><i><a href="http://www.webreview.com/">http://www.webreview.com/</a></i> adresinde, <p><i><a href="http://www.webreview.com/">http://www.webreview.com/</a></i> adresinde,
arka planda veritaban alstran Web sayfalar iin giri seviyesinde bilgi bulunmaktadr.</p> arka planda veritaban alstran Web sayfalar iin giri seviyesinde bilgi bulunmaktadr.</p>
<p>Web ile btnleme iin, PHP (<i><a href="http://www.php.net/"></a></i>) <p>Web ile btnleme iin, PHP (<i><a href="http://www.php.net/"></a></i>)
mkemmel bir arabirim sunar.<p> mkemmel bir arabirim sunar.</p>
<p>Karmak sorunlar iin, ou kisi Perl arabirimini ve CGI.pm ya da mod_perl kullanr.</p> <p>Karmak sorunlar iin, ou kisi Perl arabirimini ve CGI.pm ya da mod_perl kullanr.</p>
<h4><a name="2.3">2.3</a>) PostgreSQL'in grafik kullanc arabirimi var mdr?</h4> <h4><a name="2.3">2.3</a>) PostgreSQL'in grafik kullanc arabirimi var mdr?</h4>
...@@ -466,7 +466,7 @@ adreslerinde g ...@@ -466,7 +466,7 @@ adreslerinde g
<p>Postmaster ve postgres eitli hata ayklama seeneklerine sahiptir. ncelikle, <p>Postmaster ve postgres eitli hata ayklama seeneklerine sahiptir. ncelikle,
postmaster' balattnzda, standart kty ve hatalar bir log dosyasna postmaster' balattnzda, standart kty ve hatalar bir log dosyasna
ynlendirdiinize emin olun:</p> ynlendirdiinize emin olun:</p>
<pre>cd /usr/local/pgsql<br>./bin/postmaster >server.log 2>&1 &</pre> <pre>cd /usr/local/pgsql<br>./bin/postmaster >server.log 2>&amp;1 &amp;</pre>
<p>Bu ilem PostgreSQL ana dizinine <code>server.log</code> dosyas yerletirecektir. <p>Bu ilem PostgreSQL ana dizinine <code>server.log</code> dosyas yerletirecektir.
Bu dosya sunucunun yaad sorunlar ya da hatalar hakknda yararl bilgiler ierir. Bu dosya sunucunun yaad sorunlar ya da hatalar hakknda yararl bilgiler ierir.
<code>-d</code> seenei, hata ayklama seviyesini belirten bir rakam ile kullanlr. <code>-d</code> seenei, hata ayklama seviyesini belirten bir rakam ile kullanlr.
...@@ -497,7 +497,7 @@ adreslerinde g ...@@ -497,7 +497,7 @@ adreslerinde g
deeri ile ya da <code>postgresql.conf</code> dosyasn dzenleyerek yeniden deeri ile ya da <code>postgresql.conf</code> dosyasn dzenleyerek yeniden
balatmakla arttrabilirsiniz.</p> balatmakla arttrabilirsiniz.</p>
<p>Eer <code>-N</code> deerini 32'den byk yapacaksanz, ayn zamanda <p>Eer <code>-N</code> deerini 32'den byk yapacaksanz, ayn zamanda
<code>-B</code> deerini de deitirmeniz gerektiini unutmayn. </code>-B</code>, <code>-B</code> deerini de deitirmeniz gerektiini unutmayn. <code>-B</code>,
<code>-N</code>'nin en az 2 kat kadar olmaldr; daha iyi baarm iin bu sayy daha <code>-N</code>'nin en az 2 kat kadar olmaldr; daha iyi baarm iin bu sayy daha
da arttrmalsnz. Yksek saydaki <i>backend</i> sreleri iin, eitli ekirdek da arttrmalsnz. Yksek saydaki <i>backend</i> sreleri iin, eitli ekirdek
yaplandrma parametrelerini arttrmanz gerekecektir. Yaplmas gerekenler, yaplandrma parametrelerini arttrmanz gerekecektir. Yaplmas gerekenler,
...@@ -554,7 +554,7 @@ adreslerinde g ...@@ -554,7 +554,7 @@ adreslerinde g
<code>LIMIT</code> ... kullannz.</p> <code>LIMIT</code> ... kullannz.</p>
<p>lk birka satr almak isteseniz bile, tm sorgu deerlendirilmek durumunda kalnabilir. ORDER <p>lk birka satr almak isteseniz bile, tm sorgu deerlendirilmek durumunda kalnabilir. ORDER
BY ieren bir sorgu dnn. Eer ORDER BY ie eleen bir index varsa, PostgreSQL istenen ilk birka BY ieren bir sorgu dnn. Eer ORDER BY ie eleen bir index varsa, PostgreSQL istenen ilk birka
satr ileyebilir, ya da tm sorgu istenen satrlar retilene kadar ilenebilir. </b></p> satr ileyebilir, ya da tm sorgu istenen satrlar retilene kadar ilenebilir. </p>
<h4><a name="4.3">4.3</a>) psql'in iinde grdgm tablolarn ya da dier <h4><a name="4.3">4.3</a>) psql'in iinde grdgm tablolarn ya da dier
eylerin listesini nasl alabilirim?</h4> eylerin listesini nasl alabilirim?</h4>
...@@ -786,7 +786,7 @@ CREATE UNIQUE INDEX person_id_key ON person ( id ); ...@@ -786,7 +786,7 @@ CREATE UNIQUE INDEX person_id_key ON person ( id );
execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");</pre> execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");</pre>
<P>Dier sorgular iin new_id'de yeni deerin saklanmas gerekir. Otomatik olarak yaratlan SEQUENE nesnesinin ad, <P>Dier sorgular iin new_id'de yeni deerin saklanmas gerekir. Otomatik olarak yaratlan SEQUENE nesnesinin ad,
<tablo ad>_<serial kolonu ad>_seq eklinde olacaktr (< > iaretleri olmadan).</p> &lt;tablo ad&gt;_&lt;serial kolonu ad&gt;_seq eklinde olacaktr (&lt; &gt; iaretleri olmadan).</p>
<p>Alternatif olarak, atanm SERIAL deerini, deer girildikten sonra currval() <p>Alternatif olarak, atanm SERIAL deerini, deer girildikten sonra currval()
fonksiyonu ile alabilirsiniz:</p> fonksiyonu ile alabilirsiniz:</p>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment