Académique Documents
Professionnel Documents
Culture Documents
SeqScanontenk1(cost=0.00..458.00rows=10000width=244)
16
Osnmerosapresentadosemparntesisso,daesquerdaparaadireita:
1. Custodearranque,estimado
2. Custototal,estimado
3. Nmerodetuplos,estimado
4. Tamanhodetuplos,embytes,estimado
5.2.2 EXPLAIN ANALYZE
O comando EXPLAIN com a opo ANALYZE mostra a preciso das estimativas do
planner. Neste caso o comando executa a query e mostra o nmero real de tuplos e o
tempo real de execuo de cada plan node e no final mostra o tempo total de execuo.
Exemplo:
EXPLAINANALYZESELECT*
FROMtenk1t1,tenk2t2
WHEREt1.unique1<10ANDt1.unique2=t2.unique2
QUERYPLAN
NestedLoop(cost=4.33..118.25rows=10width=488)(actualtime=0.370..1.126rows=10
loops=1)
>BitmapHeapScanontenk1t1(cost=4.33..39.44rows=10width=244)(actual
time=0.254..0.380rows=10loops=1)
RecheckCond:(unique1<10)
>BitmapIndexScanontenk1_unique1(cost=0.00..4.33rows=10
width=0)(actualtime=0.164..0.164rows=10loops=1)
IndexCond:(unique1<10)
>IndexScanusingtenk2_unique2ontenk2t2(cost=0.00..7.87rows=1width=244)
(actualtime=0.041..0.048rows=1loops=10)
IndexCond:(unique2=t1.unique2)
Totalruntime:2.414ms
OcomandoEXPLAINtemaindaumaopoBUFFERSquepodeserusada
juntamentecomANALYZEequemostramaisestatsticas:
EXPLAIN(ANALYZE,BUFFERS)SELECT*FROMtenk1WHEREunique1<100AND
unique2>9000
QUERYPLAN
BitmapHeapScanontenk1(cost=25.07..60.23rows=10width=244)(actual
17
time=3.069..3.213rows=10loops=1)
RecheckCond:((unique1<100)AND(unique2>9000))
Buffers:sharedhit=16
>BitmapAnd(cost=25.07..25.07rows=10width=0)(actualtime=2.967..2.967
rows=0loops=1)
Buffers:sharedhit=7
>BitmapIndexScanontenk1_unique1(cost=0.00..5.02
rows=102width=0)(actualtime=0.732..0.732rows=200loops=1)
IndexCond:(unique1<100)
Buffers:sharedhit=2
>BitmapIndexScanontenk1_unique2(cost=0.00..19.80
rows=1007width=0)(actualtime=2.015..2.015rows=1009loops=1)
IndexCond:(unique2>9000)
Buffers:sharedhit=5
Totalruntime:3.917ms
5.3 Parsing da query
Uma das fases do processamento de uma query passa pelo parsing desta. Para tal
o parser recebe a query em ASCII e valida a sintaxe da mesma. Caso a sintaxe esteja
correcta, o parser retorna uma rvore, caso contrrio lana erro. O parser e o lexer so
implementadoscomferramentasdeUnix:bisoneex.
O lexer responsvel por reconhecer comandos SQL e por cada comando
reconhecido entregao ao parser. O parser por sua vez dispara uma aco por cada
comandoeestaacoexecutadaemC.
5.4 Optimizar os planos de execuo
5.4.1 Operao SELECT
Quando o planner recebe uma consulta SELECT comea por fazer scan a cada
tabela usada na query. Um scan sequencial sempre creado, independentemente da
consulta. Caso a consulta contenha uma clusula WHERE relation.attribute OPR constant
em que a tabela contenha um indce em que a chave seja relation.attribute ento um scan
criado para este ndice. Este processo repetese at no haver mais ndices que
correspondam ao atributo e operao da consulta. No fim do processo, o plano com
melhorestemposescolhidoparaexecuo.
5.4.2 Operao ORDER BY
UmindexscancriadotambmnocasodaconsultaterumaclusulaORDERBY
emqueoatributodeordenaocorrespondaaoatributoqueordenaoindce.
5.4.3 Operao JOIN
18
Quandoaconsultanecessitadeexecutarajunoentreduasoumaistabelas,so
criadosscansapsacriaodescansparatabelasindividuais.Ajunoentretabelaspode
serfeitacomumdostrsalgoritmos.
Nested Loop Join
criadoumscanparaarelaodadireitaparacadatuploencontradonarelaoda
esquerda.Estealgoritmoapesardefcildeimplementarpodesercaroemtermosde
complexidadetemporal.Noentanto,searelaodadireitapudercriarumindexscanesta
situaopodertornarsevantajosa.
Merge Join
Cada relao ordenada pelos atributos da juno antes da operao de juno ser
executada. Assim so criados dois scans paralelos para as duas relaes e os tuplos em
comum so seleccionados para criar o resultado da juno. Este algoritmo tornase mais
agradvelqueoanteriortendoemcontaquecriadosumscanporcadarelao.
Hash Join
criado um scan para a relao da direita de modo a carregar esta para uma hash
table usando os atributos da juno como chave. De seguida criado um scan para a
relao da esquerda e os tuplos encontrados so usados como chaves para encontrar os
tuploscorrespondentesdarelaodadireita.
5.5 Genetic Query Optimizer
OcomportamentonormalqueoPostgreSQLtemperanteajunodetabelaspode
serextremamentecaroemtermosdetempoeespaoseonmerodetabelasenvolvidas
formuitoelevado.Assimsendo,esteSGBDcriouumaalternativaparaaoptimizaode
junes,sendoestaalternativeumalgoritmogenticoquetratadeumaquerycomjuno
demuitastabelaseficientemente.
5.5.1 Algoritmo Gentico
Este algoritmo consiste numa heurstica de optimizao que executa uma pesquisa
aleatria. O conjunto de planos de execues possveis para a optimizao do problema so
vistos como indivduos de uma populao. A aptido do indivduo especifica a sua
capacidade de adaptao ao ambiente. Os cromossomas representam as coordenadas do
indivduo no espao de procura. Um gene a subsequncia de cromossomas que
codificam o valor do parametro a optimizar. Com estes parametros feita a simulao da
evoluodestesindivduosdemodoaencontraromelhorindivduodapopulao.
19
5.6 Parametrizao
Tendo em conta que o PostgreSQL no garante que encontre sempre um plano de
execuo ptimo para uma consulta, este SGBD permite parametrizar esta optimizao
comasseguintesopes:
enable_bitmapscan(boolean)permiteounoacriaoplanosdotipobitmapscan
enable_hashagg(boolean)permiteounoousodeagregaoporhashing
enable_hashjoin(boolean)permiteounoousodeplanosdotipohashjoin
enable_indexscan(boolean)permiteounoousodeplanosdotpoindexscan
enable_indexonlyscan(boolean)permiteounoousodeplanosdotipo
indexonlyscan
enable_material(boolean)permiteounoousodematerializao
enable_mergejoin(boolean)permiteounoousodeplanosdotipomergejoin
enable_nestloop(boolean)permiteounoousodeplanosdotiponestedloopjoin
enable_seqscan(boolean)permiteounoousodeplanosdotiposeqscan
enable_sort(boolean)permiteounoousodeordenao
enable_tidscan(boolean)permiteounoousodeplanosdotipoTIDscan
5.7 Comparao com Oracle
AoptimizaodequeriesemOracleempoucodiferentedoprocedimentoem
PostgreSQL.Noentanto,aocontrriodePostgreSQLquepodernemsempreencontraro
planoptimo,Oracleescolhesempreoplanoqueconsomemenosrecursosepermite
tambmparametrizarocomportamentodooptimizador.Resumidamente,emOracle
quandorecebidaumaqueryooptimizadorsegueosseguintespassos:
1. DiversosplanossocriadosbaseadosnasoperaesSQLeconfiguraesdo
optimizador
2. feitaaestimativadostemposdecadaplano,baseadanosdadosdaestruturado
SGBDqueguardaasestatsticasdoacessoaosdados
3. Ovalordocustoestimadoatravsdostemposdecadaplanoedosrecursosdo
computadorqueconsomem
4. Planossequenciais,apesardemaisdemorados,sotidosemcontapara
processamentoparalelodasconsultas
5. Ooptimizadorcomparaoscustosobtidoseescolheoquetivermenorcusto.
20
6. Gesto de transaces e controlo de concorrncia
6.1 Transaces.
NoPostgreSQLpossvelespecificartransaesatravsdosseguintescomandos:
BEGIN usado para indicar expressamente o incio de uma transaco. Todas as
instrues de BEGIN devem ser feitas correctamente para serem gravadas de forma
permanente. No caso de haver um erro, a transao inteira falha e as mudanas no sero
aplicadas. O PostgreSQL usa um BEGIN implcito em cada instruo se no for includo
explicitamente.
COMMIT usado para gravar as alteraes feitas numa transao de forma
permanente. Depois de executar este comando, as alteraes feitas na transao so
escritas de forma permanente e tornamse visveis para outras transaes concorrentes na
base de dados. O PostgreSQL usa um COMMIT implcito em cada instruo, se no for
declaradoexplicitamente.
ROLLBACK usado para descartar todas as operaes numa transao. Quando
uma transao falha uma das suas operaes, feito um ROLLBACK. Quando este
comandoexecutado,todasasalteraesefectuadaspelatransacosorevertidas.
SAVEPOINT utilizado para definir os pontos de controlo de uma transao.
Algumas das operaes, devido sua complexidade, podem ter um elevado nmero de
instrues. O mecanismo de SAVEPOINT ajuda a dividir as instrues da transaco, o que
facilita o ROLLBACK at ao SAVEPOINT caso a transao d erro nas instrues
seguintes.
ROLLBACK TO usado para reverter as alteraes feitas aps um SAVEPOINT.
Depois de definir um SAVEPOINT podese voltar para esse ponto usando o comando
<nome_savepoint> ROLLBACKTO. Todas as alteraes feitas aps <nome_savepoint>
serodescartadasenoserovisiveisdepoisdeexecutarocomandodeCOMMIT.
O PostgreSQL no tem suporte para nested transactions e para transaes de longa
durao. Acrescentando a coluna xact_start para pg_stat_activity torna a identificao de
transacesdelongaduraomaisfcil.
6.2 Que protocolo usado para garantir isolamento
Para garantir isolamento, o PostgreSQL utiliza o protocolo multiversion concorrency
control, MVCC. A principal diferena entre o multiversion e o lock que em locks MVCC
derivados de uma consulta de dados (leitura) no entram em conflitos com locks derivados
da gravao de dados e leitura, portanto, nunca bloqueiam a escrita, e a escrita nunca
21
bloqueiaaleitura.
O PostgreSQL fornece vrios tipos de locks para controlar o acesso simultneo aos
dados nas tabelas. Estes locks podem ser utilizados para o bloqueio controlado em
situaes que o MVCC no der o comportamento desejado. Para navegar por listas de locks
emcirculao,podeserusadaaviewdosistemapg_locks.
6.3 Deadlocks
Para lidar com DEADLOCKS, o PostgreSQL detecta automaticamente as situaes
de impasse, resolvendoas ao interromper uma das transaes envolvidas, permitindo que a
outrasejaconcluda.
6.4 Nveis de granularidade dos locks
A lista em baixo mostra os tipos de locks disponiveis e em que contextos so usados
automticamente pelo PostgreSQL. Os locks tambm podem ser obtidos explicitamente
atravsdocomandoLOCK.
AccessShareLock
EmconflitocomomododebloqueioACCESSEXCLUSIVE.
O comando SELECT obtm um bloqueio neste modo nas tabelas referenciadas. Em
geral,issoqualquerdvidaslumamesaenomodificlaobtmestemododebloqueio.
RowShareLock
ConflitoscomosmodosdebloqueioEXCLUSIVEeACCESSEXCLUSIVE.
O SELECT FOR UPDATE e SELECT para comandos AO adquirir um bloqueio
neste modo na tabela de destino (s) (alm de bloqueio ACCESS SHARE nas outras tabelas
referenciadasmasnoselecionadasFORUPDATE/FORSHARE).
RowExclusiveLock
ConflitoscomaSHARE,SHAREROWEXCLUSIVEmodos,exclusivoeacesso
bloqueioexclusivo.
Os comandos UPDATE, DELETE e INSERT obtm este modo de bloqueio na tabela
dedestino(almdobloqueioACCESSSHAREnasoutrastabelas referenciadas).
Em geral, este modo de bloqueio ser adquirido por qualquer comando que modifica os
dadosemumatabela.
ShareLock
Conflitos com a quota de atualizao exclusiva, SHARE, SHARE ROW EXCLUSIVE,
EXCLUSIVE e ACCESS modos de bloqueio EXCLUSIVE. Este modo protege a tabela contra
alteraesnoesquemasimultneoseexecuodocomandoVACUUM.
22
Adquirida por vcuo (sem o FULL), analisar, CREATE INDEX ao mesmo tempo, e
algumasformasdeALTERTABLE.
ShareRowExclusiveLock
Conflitos com o ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE
ROW EXCLUSIVE, EXCLUSIVE e ACCESS modos de bloqueio EXCLUSIVE. Este modo
protege a tabela contra alteraes de dados simultneos, e autoexclusivo, para que
apenasumasessopodeprendlodeumavez.
Este modo de bloqueio no obtido automaticamente por nenhum comando do
PostgreSQL.
ExclusiveLock
ConflitoscomaSHAREROW,ROWEXCLUSIVE,SHAREUPDATE
EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE e ACCESS modos de
bloqueio EXCLUSIVE. Este modo permite apenas bloqueios simultneos compartilhar o
acesso, ou seja, somente leituras da tabela podem prosseguir em paralelo com uma
transaoqueobteveestemododebloqueio.
Este modo de bloqueio no obtido automaticamente em tabelas por nenhum
comandodoPostgreSQL.
AccessExclusiveLock
Conflitos com fechaduras de todos os modos (ACCESS SHARE, SHARE ROW,
ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,
EXCLUSIVE e ACCESS EXCLUSIVE). Este modo garante que o titular a nica operao
deacessotabeladequalquerforma.
Adquirido pela ALTER TABLE, DROP TABLE, TRUNCATE, REINDEX, CLUSTER, e
os comandos VACUUM FULL. Este tambm o modo de bloqueio padro para o comando
LOCKTABLEnoespecificarummodoexplicitamente.
Bloqueios ao nvel da fila
Os bloqueios no nvel de linha pode ser bloqueios compartilhados ou exclusivos. Um
bloqueio exclusivo no nvel de linha em uma linha especfica obtido automaticamente
quando a linha atualizada ou excluda. O bloqueio mantido at que a transao
confirmada ou revertida como bloqueios no nvel de tabela. Bloqueios no nvel de linha no
afetamaconsultadedados,masapenasoblocodosescritoresnamesmalinha.
Bloqueios ao nvel da page
Alm dos bloqueios de tabela e de linha, em nvel de pgina share / exclusivo
bloqueios so usados para controlar a ler / escrever acesso a pginas da tabela no buffer
pool compartilhado. Esses bloqueios so libertados imediatamente aps a linha ser lida ou
23
actualizada.
6.5 Nveis de isolamento.
No PostgreSQL voc pode encomendar qualquer um dos quatro nveis de isolamento
padro SQL e apoiado sintaticamente, mas apenas trs dos que atuam internamente no
PostgreSQL:ReadCommitted,LeituraRepetida,Serializable.
READ COMMITTED
A declarao s pode ver as linhas efetivadas antes de comear. Esta a
configuraopadro.
REPEATABLE READ
Todos os comandos da transao corrente enxerga apenas as linhas efetivadas
antes da primeira consulta ou instruo de modificao de dados so executadas nesta
transao.
SERIALIZABLE
Todos os comandos da transao corrente enxerga apenas as linhas efetivadas
antes da primeira consulta ou instruo de modificao de dados so executadas nesta
transao. Se um padro de leitura e escrita entre transaes serializveis concorrentes
criaria uma situao que no poderia ter acontecido para alguns (um de cada vez) execuo
serial destas operaes, podese desfazer um erro serialization_failure. Transaes
serializveis so apenas REPEATABLE READ operaes que adicionar monitoramento
nonblockingparaospadresperigososdeleitura/gravaodeconflitos.
O nvel adicional, READ UNCOMMITTED, definido no padro SQL tratado como
READCOMMITTED.
Podemosdefinirdaseguinteforma:
SETTRANSACTIONtransaction_mode[,...]
SETTRANSACTIONSNAPSHOTsnapshot_id
SETSESSIONCHARACTERISTICSASTRANSACTIONtransaction_mode[,...]
ondeatransaction_modeumdoscomandosseguintes:
ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED
|READUNCOMMITTEDREADWRITE|READONLY
24
[NOT]DEFERRABLE
6.6 Como lida com consistncia.
O problema lidando com consistncia quando estamos no nvel de isolamento
padro ciclos aparcin, quando um ciclo aparece, verificaes de integridade no iro
funcionar corretamente sem alguma ajuda, entao quando um padro detectado o que
poderia causar um ciclo na ordem aparente de execuo, uma das transaes envolvidas
revertidaparaquebrarociclo.
6.7 Como lida com atomicidade e durabilidade.
Atomicidade
No PostgreSQL, podemos obter um conjunto de instrues SQL executadas dentro
de uma transao, abrangendo entre BEGIN e COMMIT. Isto assegura que corre tudo ou
nada. Se chegar em algum ponto dentro da transao precisa desfazer completamente, use
ROLLBACK em vez de COMMIT, e todas as alteraes so desfeitas. Por outro lado,
qualquer frase PostgreSQL isolado como se ele estivesse sendo executado dentro de uma
pequena operao, mas no use BEGIN, cada instruo implicitamente incorpora BEGIN e,
seforbemsucedida,aCOMMIT.
Durabilidade
PostgreSQL usa uma tcnica padro chamada WAL (writeahead logging ou
writeahead registos) para controlar tanto a consistncia e durabilidade das transaes.
Resumidamente explicando, que as mudanas em arquivos de dados (tabelas e ndices)
s se materializam quando l anteriormente na pista difcil em que tais mudanas so
observadas. Seguindo este procedimento, necessrio enviar pginas com o disco de cada
vez que uma transaco completada. Esta tcnica no s melhora o desempenho do
servidor, mas a uma falha da mquina, possvel recuperar o banco de dados de registo
que, qualquer alterao no aplicada s pginas de dados no disco ser novamente feita a
partir do registo (rolo forward de recuperao, ou refazer), enquanto que as possveis
alteraes nas pginas de disco transaes incompletas pode ser desfeita a manuteno
daintegridadeeconsistnciadedados(recuperaorollparatrs,oudesfazer).
6.8 Oracle vs PostgreSQL
Sobre o assunto de transaces, ambos os programas so muito semelhantes, pois
ambos so muito completos e no h nenhuma diferena notvel, s que PostgreSQL tem
maisLocksModesqueOraclemasnoumadiferenamuitosignificativa.
25
7. Suporte para bases de dados distribudas
OPostgreSQLnoapresentasuporteparabasededadosdistribudas.
26
8. Outras caractersticas do sistema estudado
8.1. Suporte para a WEB
Para suporte WEB est disponivel a ferramenta phpPgAdmid. PhpPgAdmin uma
aplicao site que prev uma maneira conveniente aos clientes de criar bases de dados,
tabelas, as alterar e consultar seus dados usando a linguagem regular SQL. O PhpPgAdmin
baseado na ferramenta phpMyAdmin, mas hoje em dia j no compartilha cdigo com esta
aplicao. Esta ferramenta usa as mesmas funcionalidades da sua congnere e dispem
demaisfuncionalidadesadaptadasparaosistemadebasededadosPostgreSQL.
8.2. Suporte para XML
O PostgreSQL dispe de suporte nativo a XML, que pode ser utilizado para manter
tabelas. Tambm permite importar e exportar documentos em XML. O PostgreSQL s
compatvelactualmentecomXPath,queumsubconjuntodoXQuery.
8.3. Stored procedures
Uma stored procedure armazenada no PostgreSQL pode ser escrita em diversas
linguagens de programao. A instalao por defeito do PostgreSQL dispe das seguintes
linguagens: PL/pgSQL, PL/Perl, PL/Tcl e PL/Python. A nica linguagem que est disponvel
automaticamente PL/pgSQL. Para utilizar o PL/Perl, PL/Tcl ou PL/Python necessrio
configurarocompiladordoPostgreSQLcomosseguintesparmetros:
withperlwithtclwithpython
8.4.Triggers e Fornecimento de Servios
PostgreSQL dispe da utilizao de triggers, para o seu uso existem os seguintes
comandos:
CREATE[CONSTRAINT]TRIGGERname{BEFORE|AFTER|INSTEADOF}{event[OR...]}
ONtable[FROMreferenced_table_name]
{NOTDEFERRABLE|[DEFERRABLE]{INITIALLYIMMEDIATE|INITIALLYDEFERRED}}
[FOR[EACH]{ROW|STATEMENT}]
[WHEN(condition)]
EXECUTEPROCEDUREfunction_name(arguments)
OPostgreSQLtambmproporcionaosserviosdeJDBCeODBC.
27
8.5. Segurana
Interna
A extenso da sepgsql (dotada de PostgreSQL desde a verso 9.1) proporciona uma
capa adicional de segurana integrando com SELinux. Isto utiliza a caracterstica de
seguranaetiquetadePostgreSQL.
Externa
O PostgreSQL suporta de forma nativa um amplo nmero de mecanismos de
autenticao:
Trust
Password(MD5outexto)
GSSAPI
SSPI
Kerberos
ident (mapas S/O de nome de utente proporcionado por um servidor ident a nome de
utentedobasededados)
peer(nomedeutentelocaldemapasanomedeutentedebancodedados)
LDAP
RADIUS
Certificate
PAM
O GSSAPI, SSPI, Kerberos, peer, ident e certificate tambm podem utilizar um
arquivo especificado por map que mostra que os utentes de certificado igualada por que o
sistema de autenticao tem permisso para ligar como um utente de base de dados
especfico.
8.6. Tipo de dados suportados
Integer:BIGINT,INTEGER,SMALLINT.
FloatingPoint:DOUBLEPRECISION,REAL.
Decimal:DECIMAL,NUMERIC.
String:CHAR,CHARACTER,CHARACTERVARYING,TEXT,VARCHAR.
Boolean:BOOLEAN.
Binary:BYTEA.
Date/Time:DATE,INTERVAL,TIME,TIMESTAMP.
28
Outros: ARRAYS, BIT, CIDR, CIRCLE, ENUM, GIS data types, INET, MACCADDR,
MONETARY, PATH, POLYGON, SEQUENCE, TIMESTAMP, USER DEFINED DATA
TYPES,USERDEFINEDTYPES,UUID,XML,XMLTYPE.
8.7. Ferramentas
Psql O principal frontend para PostgreSQL um programa que corre sobre a
consola, pode ser utilizado para efectuar consultas SQL de forma directa, ou executar
operaesapartirdeumficheiro.
pgAdmin ferramenta gratuita e open source de administrao de interfaces
grficasparaPostgreSQL,compatvelcominmerossistemasoperativos.
phpPgAdmin aplicao web de administrao de bases de dados PostgreSQL,
escrita em PHP e baseada na interface do phpMyAdmin, uma aplicao web para a
administraodebasesdedadosMySQL.
pgFouine log analyzer que gera anlises e relatrios detalhados de arquivos de
registodoPostgreSQL.
MADlib uma biblioteca de anlise de cdigo aberto para PostgreSQL prever
mtodos matemticos, estatsticos e de aprendizagem mquina estruturados e dados no
estruturados.
Assistente de migrao de MySQL includo com o instalador de PostgreSQL de
EnterpriseDB.(cdigofontedisponveltambm)
Performance Wizard includo com o instalador de PostgreSQL de EnterpriseDB.
(cdigofontedisponveltambm)
PostGIS um complemento muito popular que oferece compatibilidade com objectos
geogrficos.
pgRouting PostGIS extendido que proporciona funcionalidades de routing
geoespacial.
Postgres Enterprise Manager uma ferramenta closedsource que consiste num
servio de mltiplos agentes e uma GUI que proporciona monitoring, remote management,
reports,planningetunning.
STLinksSpatialKitextensoparaligarcombasesdedadosespaciais.
29
9. Referncias
The PostgreSQL Global Development Group, PostgreSQL 9.2.4 Documentation,
http://www.postgresql.org/files/documentation/pdf/9.2/postgresql9.2A4.pdf
NikeshJauhari,HowtoInstall/ConfigurePostgreSQLUnderUbuntuLinux
http://linuxpoison.blogspot.tw/2012/01/howtoinstallconfigurepostgresql.html
GregorySmith,PostgreSQLBufferManagement
http://www.westnet.com/~gsmith/gregsmith/content/postgresql/PostgreSQLBufferManagem
ent.htm
Oracle,OracleDatabase2DayDBA11gRelease1(11.1)
http://docs.oracle.com/cd/B28359_01/server.111/b28301.pdf
ComparisonOraclevsPostgreSQL
http://databasemanagementsystems.findthebest.com/compare/3643/OraclevsPostgreSQL
WikiofPostgreSQL
http://wiki.postgresql.org/wiki/Main_Page
30