+++ /dev/null
-
- Perguntas Frequentes (FAQ) sobre PostgreSQL
-
- Última atualização: Sex Nov 16 10:53:50 EST 2007
-
- Mantenedor atual: Bruce Momjian (bruce@momjian.us)
-
- Traduzido por: Euler Taveira de Oliveira (euler@timbira.com)
-
- A versão mais recente desse documento pode ser vista em
- http://www.postgresql.org/files/documentation/faqs/FAQ.html (EN).
- http://www.postgresql.org/files/documentation/faqs/FAQ_brazilian.html
- (pt_BR).
-
- Perguntas sobre plataformas específicas são respondidas em
- http://www.postgresql.org/docs/faq/.
- _________________________________________________________________
-
- Perguntas Gerais
-
- 1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?
- 1.2) Quem controla o PostgreSQL?
- 1.3) Qual é a licença do PostgreSQL?
- 1.4) Quais plataformas o PostgreSQL pode ser executado?
- 1.5) Onde eu posso conseguir o PostgreSQL?
- 1.6) Qual é a última versão?
- 1.7) Onde eu posso conseguir suporte?
- 1.8) Como eu posso submeter um relato de um bug?
- 1.9) Como eu posso saber quais são os bugs conhecidos ou
- características ausentes?
- 1.10) Que documentação está disponível?
- 1.11) Como eu posso aprender SQL?
- 1.12) Como posso submeter uma correção (patch) ou me juntar a equipe
- de desenvolvimento?
- 1.13) Como é o PostgreSQL comparado a outros SGBDs?
- 1.14) O PostgreSQL gerenciará as mudanças de horário devido ao horário
- de verão em vários países?
-
- Perguntas sobre Clientes
-
- 2.1) Quais interfaces estão disponíveis para PostgreSQL?
- 2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL
- com páginas Web?
- 2.3) O PostgreSQL tem interfaces gráficas para interagir com usuário?
-
- Perguntas Administrativas
-
- 3.1) Como eu instalo o PostgreSQL em um local diferente de
- /usr/local/pgsql?
- 3.2) Como eu controlo conexões de outras máquinas?
- 3.3) Como eu ajusto o servidor de banco de dados para obter uma
- performance melhor?
- 3.4) Quais características de depuração estão disponíveis?
- 3.5) Por que eu recebo "Sorry, too many clients" quando eu tento
- conectar?
- 3.6) Qual é o processo de atualização do PostgreSQL?
- 3.7) Que tipo de hardware eu devo usar?
-
- Perguntas Operacionais
-
- 4.1) Como eu faço um SELECT somente dos primeiros registros de uma
- consulta? Um registro randômico?
- 4.2) Como eu descubro quais tabelas, índices, bancos de dados e
- usuários estão definidos? Como eu vejo as consultas utilizadas pelo
- psql para mostrá-los?
- 4.3) Como você muda o tipo de dado de uma coluna?
- 4.4) Qual é o tamanho máximo de um registro, uma tabela e um banco de
- dados?
- 4.5) Quanto espaço em disco é necessário para armazenar dados de um
- arquivo texto?
- 4.6) Por que minhas consultas estão lentas? Por que elas não estão
- utilizando meus índices?
- 4.7) Como eu vejo como o otimizador de consultas está avaliando minha
- consulta?
- 4.8) Como eu faço buscas com expressões regulares e buscas com
- expressões regulares sem diferenciar mauúsculas de minúsculas? Como eu
- utilizo um índice para buscas sem distinguir maiúsculas de minúsculas?
- 4.9) Em uma consulta, como eu detecto se um campo é NULL? Como eu
- posso concatenar possíveis NULLs? Como eu posso ordenar por um campo
- que é NULL ou não?
- 4.10) Qual é a diferença entre os vários tipos de dado de caracteres?
- 4.11.1) Como eu crio um campo serial/auto incremento?
- 4.11.2) Como eu consigo o valor de um campo SERIAL?
- 4.11.3) currval() não lida com condição de corrida com outros
- usuários?
- 4.11.4) Por que os números da minha sequência não são reutilizados
- quando uma transação é abortada? Por que há intervalos nos números da
- minha sequência/coluna SERIAL?
- 4.12) O que é um OID? O que é um CTID?
- 4.13) Por que eu recebo o erro "ERROR: Memory exhausted in
- AllocSetAlloc()"?
- 4.14) Como eu informo qual versão do PostgreSQL eu estou utilizando?
- 4.15) Como eu crio uma coluna que conterá por padrão a hora atual?
- 4.16) Como eu faço uma junção externa (outer join)?
- 4.17) Como eu faço consultas utilizando múltiplos bancos de dados?
- 4.18) Como eu retorno múltiplos registros ou colunas de uma função?
- 4.19) Por que eu obtenho erros "relation with OID ###### does not
- exist" ao acessar tabelas temporárias em funções PL/PgSQL?
- 4.20) Quais soluções de replicação estão disponíveis?
- 4.21) Por que os nomes de minhas tabelas e colunas não são
- reconhecidos em minha consulta? Por que as maiúsculas não são
- preservadas?
- _________________________________________________________________
-
- Perguntas Gerais
-
- 1.1) O que é PostgreSQL? Como ele é pronunciado? O que é Postgres?
-
- PostgreSQL é pronunciado Post-Gres-Q-L. (Para os curiosos que querem
- saber como se diz "PostgreSQL", um arquivo de áudio está disponível).
-
- O PostgreSQL é um sistema de banco de dados objeto-relacional que tem
- as características de sistemas de bancos de dados comerciais
- tradicionais com melhoramentos encontrados nos sistemas SGBDs de
- próxima geração. PostgreSQL é livre e o código-fonte completo está
- disponível.
-
- O desenvolvimento do PostgreSQL é feito por um grupo de
- desenvolvedores voluntários (na sua maioria) espalhados pelo mundo e
- que se comunicam via Internet. É um projeto da comunidade e não é
- controlado por nenhuma empresa. Para se envolver, veja a FAQ do
- desenvolvedor em http://www.postgresql.org/docs/faqs.FAQ_DEV.html
-
- Postgres é um apelido para o PostgreSQL amplamente utilizado. Era o
- nome original do projeto em Berkeley e dentre os outros apelidos é o
- preferido. Se você acha 'PostgreSQL' difícil de pronunciar, diga
- apenas 'Postgres'.
-
- 1.2) Quem controla o PostgreSQL?
-
- Se você está procurando por um mantenedor, comitê central ou empresa
- controladora do PostgreSQL, desista --- não há um(a). Nós temos um
- comitê core e committers CVS, mas estes grupos são mais para questões
- administrativas do que controle. O projeto é direcionado pela
- comunidade de desenvolvedores e usuários, que qualquer um pode se
- juntar. Tudo o que você precisa é se inscrever nas listas de discussão
- e participar das discussões. Veja a FAQ do desenvolvedor para obter
- informações como se envolver com o desenvolvimento do PostgreSQL.
-
- 1.3) Qual é a licença do PostgreSQL?
-
- O PostgreSQL é distribuído sob a licença BSD clássica. Basicamente,
- ela permite que usuários façam qualquer coisa com o código, incluindo
- revender os binários sem o código-fonte. A única restrição é que você
- não nos responsabilize legalmente por problemas com o programa de
- computador. Há também a exigência de que esta licença apareça em todas
- as cópias do programa de computador. Aqui está a licença BSD que
- usamos atualmente:
-
- PostgreSQL está sujeito a seguinte licença:
-
- PostgreSQL Data Base Management System
-
- Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
- Portions Copyright (c) 1994-1996 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.
-
- 1.4) Quais plataformas o PostgreSQL pode ser executado?
-
- Em geral, qualquer plataforma moderna compatível com Unix deve ser
- capaz de executar o PostgreSQL. As plataformas que foram testadas
- antes do lançamento de uma versão são listadas nas instruções de
- instalação.
-
- O PostgreSQL também executa nativamente nos sistemas operacionais
- Microsoft Windows baseados no NT tais como Win200 SP4, WinXP e
- Win2003. Um instalador pré-empacotado está disponível em
- http://pgfoundry.org/projects/pginstaller. Versões do Windows baseadas
- no MS-DOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando
- o Cygwin.
-
- Há também uma versão para o Novell Netware 6 em
- http://forge.novell.com e uma versão para OS/2 (eComStation) em
- http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
- SQL&stype=all&sort=type&dir=%2F.
-
- 1.5) Onde eu posso conseguir o PostgreSQL?
-
- Via navegador web, utilize http://www.postgresql.org/ftp/ e via ftp,
- utilize ftp://ftp.postgresql.org/pub/.
-
- 1.6) Qual é a última versão?
-
- A última versão do PostgreSQL é a versão 8.2.5.
-
- Nós planejamos lançar versões novas a cada ano com versões corretivas
- em alguns meses.
-
- 1.7) Onde eu posso conseguir suporte?
-
- A comunidade do PostgreSQL fornece assistência a muitos de seus
- usuários via e-mail. O principal sítio web para inscrição nas listas
- de e-mail é http://www.postgresql.org/community/lists/. As listas
- general e bugs são um bom lugar para início.
-
- O principal canal de IRC é o #postgresql na Freenode
- (irc.freenode.net). Para se conectar você pode utilizar o comando Unix
- irc -c '#postgresql' "$USER" irc.freenode.net ou utilizar qualquer
- outro cliente de IRC. Um canal hispânico (#postgresql-es) e um francês
- (#postgresqlfr) também existem na mesma rede. Há também um canal
- PostgreSQL na EFNet.
-
- Uma lista de empresas que prestam suporte comercial está disponível em
- http://www.postgresql.org/support/professional_support.
-
- 1.8) Como eu informo a existência de um bug?
-
- Visite o formulário que reporta bugs do PostgreSQL em
- http://www.postgresql.org/support/submitbug.
-
- Verifique também o nosso ftp ftp://ftp.postgresql.org/pub para ver se
- há uma versão mais recente do PostgreSQL.
-
- Bugs submetidos utilizando o formulário ou informado a qualquer lista
- de discussão do PostgreSQL tipicamente gera uma das seguintes
- respostas:
- * Não é um bug e o porquê
- * É um bug conhecido e já está na lista de AFAZERES
- * O bug foi corrigido na versão atual
- * O bug foi corrigido mas não foi empacotado em um versão oficial
- * Um pedido foi feito para obter informações detalhadas:
- + Sistema Operacional
- + Versão do PostgreSQL
- + Exemplo de teste que reproduz o bug
- + Informações sobre depuração
- + Saída reconstituidora de vestígios (backtrace) do depurador
- * O bug é novo. O seguinte pode ocorrer:
- + Uma correção é criada e será incluída na próxima versão
- + O bug não pode ser corrigido imediatamente e é adicionado a
- lista de AFAZERES
-
- 1.9) Como eu posso saber quais são os bugs conhecidos ou funcionalidades
- ausentes?
-
- O PostgreSQL suporta um subconjunto extendido do SQL:2003. Veja nossa
- lista de AFAZERES que contém bugs conhecidos, funcionalidades ausentes
- e planos futuros.
-
- Uma solicitação de funcionalidade geralmente resulta em uma das
- seguintes respostas:
- * A funcionalidade já está na lista de AFAZERES
- * A funcionalidade não é desejável porque:
- + Ela duplica uma funcionalidade existente que já segue o
- padrão SQL
- + A funcionalidade aumentará a complexidade do código mas
- adicionará pouco benefício
- + A funcionalidade será insegura ou não-confiável
- * A nova funcionalidade é adicionada a lista de AFAZERES
-
- O PostgreSQL não utiliza sistema de acompanhamento de bugs porque nós
- achamos mais eficiente responder diretamente o e-mail e manter a lista
- de AFAZERES atualizada. Na prática, bugs não duram muito no programa;
- e bugs que afetam uma grande quantidade de usuários são corrigidos
- rapidamente. O único lugar para encontrar todas as mudanças, melhorias
- e correções em uma versão do PostgreSQL é ler as mensagens de log do
- CVS. Até mesmo as notas de lançamento não listam todas as mudanças
- feitas no programa.
-
- 1.10) Que documentação está disponível?
-
- O PostgreSQL inclui vasta documentação, incluindo um manual extenso,
- páginas de manuais (man pages) e alguns exemplos teste. Veja o
- diretório /doc. Você também pode pesquisar os manuais online em
- http://www.postgresql.org/docs.
-
- Há dois livros sobre PostgreSQL disponíveis online em
- http://www.postgresql.org/docs/books/awbook.html e
- http://www.commandprompt.com/ppbook/. Há uma lista de livros sobre
- PostgreSQL disponíveis para compra. Um dos mais populares é o do Korry
- Douglas. Uma lista de análise sobre os livros pode ser encontrada em
- http://www.postgresql.org/docs/books/. Há também uma coleção de
- artigos técnicos sbore PostgreSQL em
- http://www.postgresql.org/docs/techdocs/.
-
- O programa cliente de linha de comando psql tem alguns comandos \d
- para mostrar informações sobre tipos, operadores, funções, agregações,
- etc. - utilize \? para mostrar os comandos disponíveis.
-
- Nosso sítio web contém ainda mais documentação.
-
- 1.11) Como eu posso aprender SQL?
-
- Primeiro, considere os livros específicos sobre PostgreSQL mencionados
- acima. Muitos de nossos usuários gostam do The Practical SQL Handbook,
- Bowman, Judith S., et al., Addison-Wesley. Outros do The Complete
- Reference SQL, Groff et al., McGraw-Hill.
-
- Há também bons tutoriais disponíveis online:
- * http://www.intermedia.net/support/sql/sqltut.shtm
- * http://sqlcourse.com
- * http://www.w3schools.com/sql/default.asp
- * http://mysite.verizon.net/Graeme_Birchall/id1.html
-
- 1.12) Como posso submeter uma correção (patch) ou me juntar a equipe de
- desenvolvimento?
-
- Veja a FAQ do Desenvolvedor.
-
- 1.13) Como é o PostgreSQL comparado a outros SGBDs?
-
- Há várias maneiras de se medir um software: funcionalidades,
- performance, confiabilidade, suporte e preço.
-
- Funcionalidades
- PostgreSQL tem muitas características presentes em muitos SGBDs
- comerciais como transações, subconsultas, gatilhos, visões,
- integridade referencial de chave estrangeira e bloqueio (lock)
- sofisticado. Nós temos algumas funcionalidades que eles não
- tem, como tipos definidos pelo usuário, herança, regras e
- controle de concorrência de múltiplas versões para reduzir
- bloqueios (locks).
-
- Performance
- A performance do PostgreSQL é comparável a outros bancos de
- dados comerciais e de código livre. Ele é mais rápido em
- algumas coisas, mais lento em outras. Nossa performance é
- geralmente +/- 10% comparada a de outros bancos de dados.
-
- Confiabilidade
- Nós sabemos que um SGBD deve ser confiável ou ele é inútil. Nós
- empenhamos em lançar versões bem testadas, de código estável e
- que tenha o mínimo de bugs. Cada versão tem no mínimo um mês de
- teste em versão beta, e nosso histórico de versões mostra que
- nós podemos fornecer versões estáveis e sólidas que estão
- prontas para uso em produção. Nós acreditamos que somos
- comparados a nosso favor com outros sistemas de bancos de dados
- nessa área.
-
- Suporte
- Nossas listas de discussão fornecem contato com um grupo de
- desenvolvedores e usuários para ajudar a resolver muitos
- problemas encontrados. Enquanto nós não podemos garantir o
- conserto, SGBDs comerciais nem sempre fornecem também. Com
- acesso direto aos desenvolvedores, a comunidade de usuários,
- manuais e o código fonte faz com que o suporte do PostgreSQL
- seja superior ao de outros SGBDs. Há suporte comercial por
- incidente disponíveis para aqueles que precisam de um. (Veja
- seção 1.7 da FAQ).
-
- Preço
- Nós somos livres para uso dele tanto comercial quanto não
- comercial. Você pode adicionar nosso código ao seu produto sem
- limitações, exceto aquelas descritas na nossa licença BSD
- mencionada acima.
-
- 1.14) O PostgreSQL gerenciará mudanças no horário devido ao horário de verão
- em vários países?
-
- Mudanças no horário de verão dos USA foram incluídas nas versões 8.0
- .[4+] do PostgreSQL e em todas as versões grandes, i.e. 8.1. Mudanças
- no Canadá e Austrália Oeste foram incluídas na 8.0.[10+], 8.1.[6+] e
- em todas as versões grandes subsequentes. Versões do PostgreSQL
- anteriores a 8.0 utilizam o banco de dados de zona horária do sistema
- operacional para informações sobre horário de verão.
- _________________________________________________________________
-
- Perguntas sobre Clientes
-
- 2.1) Quais interfaces estão disponíveis para PostgreSQL?
-
- A instalação do PostgreSQL inclui somente as interfaces C e C
- embutida. Todas as outras interfaces são projetos independentes que
- podem ser obtidos separadamente; sendo separados permitem que eles
- tenham suas próprias datas de lançamento e time de desenvolvedores.
-
- Algumas linguagens de programação como PHP incluem uma interface para
- PostgreSQL. Interfaces para linguagens como Perl, TCL, Python e muitas
- outras estão disponíveis em http://www.pgfoundry.org.
-
- 2.2) Quais ferramentas estão disponíveis para utilizar o PostgreSQL com
- páginas Web?
-
- Uma boa introdução para páginas web que utilizam bancos de dados pode
- ser vista em: http://www.webreview.com
-
- Para integração na Web, PHP (http://www.php.net) é uma excelente
- interface.
-
- Para casos complexos, muitos usam a Interface Perl e DBD::Pg com
- CGI.pm ou mod_perl.
-
- 2.3) O PostgreSQL tem interfaces gráficas para iteragir com o usuário?
-
- Há um vasto número de Ferramentas Gráficas (GUI), que estão
- disponíveis para o PostgreSQL, comerciais e de desenvolvedores de
- código aberto. Uma lista detalhada pode ser encontrada em Documentação
- da Comunidade PostgreSQL
- _________________________________________________________________
-
- Perguntas Administrativas
-
- 3.1) Como eu instalo o PostgreSQL em um local diferente de /usr/local/pgsql?
-
- Especifique a opção --prefix quando executar o configure.
-
- 3.2) Como eu controlo conexões de outras máquinas?
-
- Por padrão, o PostgreSQL só permite conexões da máquina local
- utilizando soquetes de domínio Unix ou conexões TCP/IP. Outras
- máquinas não poderão conectar-se a menos que você modifique
- listen_addresses no postgresql.conf, habilite a autenticação por
- máquina modificando o arquivo $PGDATA/pg_hba.conf e reinicie o
- servidor PostgreSQL.
-
- 3.3) Como eu ajusto o servidor de banco de dados para obter uma performance
- melhor?
-
- Há três grandes áreas para melhorar a performance em potencial:
-
- Mudança de Consultas
- Isto involve modificar consultas para obter melhor performance:
-
- + Criação de índices, incluir expressões e índices parciais
- + Utilização o COPY ao invés de múltiplos comandos INSERTs
- + Agrupamento de múltiplos comandos em uma única transação para
- diminuir a despesa com efetivações (commit)
- + Utilização do CLUSTER quando recuperar vários registros de um
- índice
- + Utilização do LIMIT para retornar um subconjunto da saída da
- consulta
- + Utilização de Consultas preparadas
- + Utilização de ANALYZE para manter as estatísticas do
- otimizador corretas
- + Utilização regular do VACUUM ou pg_autovacuum
- + Remoção de índices durante grande mudança de dados
-
- Configuração do Servidor
- Um grande número de configurações que afetam a performance.
- Para obter detalhes adicionais, veja Administration
- Guide/Server Run-time Environment/Run-time Configuration para
- listagem completa, e para comentários veja
- http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_co
- nf_e.html e
- http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
-
- Seleção do Hardware
- O efeito do hardware na performance é detalhado em
- http://www.powerpostgresql.com/PerfList/ e
- http://momjian.us/main/writings/pgsql/hw_performance/index.html
- .
-
- 3.4) Quais características de depuração estão disponíveis?
-
- Há muitas variáveis de configuração do servidor log_* que habilitam a
- exibição de consultas e estatísticas que podem ser muito úteis para
- depuração e medidas de performance.
-
- 3.5) Por que eu recebo "Sorry, too many clients" quando eu tento conectar?
-
- Você atingiu o limite padrão de 100 sessões. Você precisa aumentar o
- limite do servidor PostgreSQL, que diz quantos processos servidor
- concorrentes ele pode iniciar, alterando o valor max_connections no
- postgresql.conf e reiniciando o postmaster.
-
- 3.6) Qual é o processo de atualização do PostgreSQL?
-
- Veja http://www.postgresql.org/support/versioning para discussão geral
- sobre atualizações e
- http://www.postgresql.org/docs/current/static/install-upgrading.html
- para instruções específicas.
-
- 3.7) Que tipo de hardware eu devo usar?
-
- 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
- qualidade. Não é verdade. ECC RAM, SCSI e placas mãe de qualidade são
- mais confiáveis e têm uma melhor performance do que hardwares mais
- baratos. O PostgreSQL executará em quase todo hardware, mas se a
- confiabilidade e a performance forem importantes é prudente pesquisar
- sobre as opções de hardware. Nossas listas de discussão podem ser
- usadas para discutir opções de hardware e dilemas.
- _________________________________________________________________
-
- Perguntas Operacionais
-
- 4.1) Como eu faço um SELECT somente dos primeiros registros de uma consulta?
- Um registro randômico?
-
- Para obter somente alguns registros, se você sabe o número de
- registros necessários ao executar o SELECT utilize o LIMIT. Se um
- índice corresponde no ORDER BY é possível que a consulta toda não
- tenha que ser executada. Se você não sabe o número de registros ao
- executar o SELECT, utilize um cursor e o FETCH.
-
- Para obter um registro randômico, utilize:
- SELECT col
- FROM tab
- ORDER BY random()
- LIMIT 1;
-
- 4.2) Como eu descubro quais tabelas, índices, bancos de dados e usuários
- estão definidos? Como eu vejo as consultas utilizadas pelo psql para
- mostrá-los?
-
- Utilize o comando \dt para ver tabelas no psql. Para obter uma lista
- completa dos comandos no psql você pode utilizar \?. Alternativamente,
- você pode ler o código-fonte do psql no arquivo
- pgsql/src/bin/psql/describe.c, ele contém os comandos SQL que geram a
- saída para os comandos de contrabarra do psql. Você também pode
- iniciar o psql com a opção -E para que as consultas utilizadas para
- executar os comandos que você informou seja exibida. O PostgreSQL
- também fornece uma inteface compatível com SQL do INFORMATION SCHEMA
- que você pode consultar para obter informação sobre o banco de dados.
-
- Há também tabelas do sistema que começam com pg_ que os descrevem
- também.
-
- Utilizando o psql -l listará todos os bancos de dados.
-
- Veja também o arquivo pgsql/src/tutorial/syscat.source. Ele ilustra
- muitos dos comandos SELECTs necessários para obter informação das
- tabelas de sistema do banco de dados.
-
- 4.3) Como você muda o tipo de dado de uma coluna?
-
- Mudar o tipo de dado de uma coluna pode ser feito facilmente na versão
- 8.0 ou superior com ALTER TABLE ALTER COLUMN TYPE.
-
- Em versões anteriores, faça isso:
- BEGIN;
- ALTER TABLE tab ADD COLUMN col_nova novo_tipo_dado;
- UPDATE tab SET col_nova = CAST(col_antiga AS novo_tipo_dado);
- ALTER TABLE tab DROP COLUMN col_antiga;
- COMMIT;
-
- Você pode então querer fazer um VACUUM FULL tab para recuperar o
- espaço em disco utilizado pelos registros expirados.
-
- 4.4) Qual é o tamanho máximo de um registro, uma tabela e um banco de dados?
-
- Estes são os limites:
-
- Tamanho máximo de um banco de dados? ilimitado (existem bancos de
- dados de 32 TB)
- Tamanho máximo de uma tabela? 32 TB
- Tamanho máximo de um registro? 400 GB
- Tamanho máximo de um campo? 1 GB
- Número máximo de registros em uma tabela? ilimitado
- Número máximo de colunas em uma tabela? 250-1600 dependendo dos tipos
- das colunas
- 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
- disponível e espaço em memória/swap. A Performance será penalizada
- quando estes valores se tornarem grandes.
-
- O tamanho máximo de uma tabela com 32 TB não requer suporte a arquivos
- grandes do sistema operacional. Tabelas grandes são armazenadas como
- múltiplos arquivos de 1 GB então o limite do sistema de arquivos não é
- importante.
-
- O tamanho máximo de uma tabela, o tamanho de um registro e o número
- máximo de colunas podem ser quadruplicados aumentando-se o tamanho
- padrão do bloco para 32k. O tamanho máximo de uma tabela pode também
- ser aumentado utilizando particionamento de tabela.
-
- Uma limitação é que índices não podem ser criados em colunas maiores
- do que 2.000 caracteres. Felizmente, tais índices são raramente
- necessários. Unicidade é melhor garantida por um índice de uma função
- de um hash MD5 de uma coluna longa, e indexação de texto longo permite
- a busca de palavras dentro da coluna.
-
- 4.5) Quanto espaço em disco é necessário para armazenar dados de um arquivo
- texto?
-
- Um banco de dados PostgreSQL irá requerer até cinco vezes a quantidade
- de espaço requerida para armazenar dados em um arquivo texto.
-
- Como um exemplo, considere um arquivo com 100.000 linhas contendo um
- inteiro e uma descrição em cada linha. Suponha que o tamanho médio da
- descrição é de vinte bytes. O arquivo terá 2,8 MB. O tamanho do
- arquivo do banco de dados PostgreSQL que contém esses dados pode ser
- estimado em 5,2 MB:
- 24 bytes: cada cabeçalho de registro (aproximadamente)
- 24 bytes: um campo int e um campo texto
- + 4 bytes: ponteiro na página para a tupla
- -------------------------------------------
- 52 bytes por registro
-
- O tamanho de uma página de dados no PostgreSQL é 8192 bytes (8 KB), então:
-
- 8192 bytes por página
- ------------------------ = 158 registros por página do banco de dados (arredondado para baixo)
- 52 bytes por registro
-
- 100000 registros de dados
- ---------------------------- = 633 páginas do banco de dados (arredondadopara cima)
- 158 registros por página
-
-633 páginas do banco de dados * 8192 bytes por página = 5.185.536 bytes (5,2MB)
-
- Índices não requerem muito espaço, mas contém dados que foram
- indexados, então eles podem ocupar algum espaço.
-
- NULLs são armazenados como bitmaps, então eles utilizam muito pouco
- espaço.
-
- 4.6) Por que minhas consultas estão lentas? Por que elas não estão utilizando
- meus índices?
-
- Índices não são utilizados por toda consulta. Índices são utilizados
- somente se a tabela é maior do que um tamanho mínimo, e a consulta
- seleciona somente uma pequena porcentagem dos registros da tabela.
- Isto porque o acesso randômico ao disco causado pela busca indexada
- pode ser mais lento do que uma leitura ao longo da tabela ou busca
- sequencial.
-
- Para determinar se um índice deveria ser utilizado, o PostgreSQL deve
- ter estatísticas sobre a tabela. Estas estatísticas são coletadas
- utilizando o VACUUM ANALYZE ou simplesmente o ANALYZE. Utilizando
- estatísticas, o otimizador sbae quantos registros estão na tabela, e
- pode melhor determinar se índices deveriam ser utilizados.
- Estatísticas também são úteis para determinar a ordem de junção ótima
- e métodos de junção. Coleção de estatísticas deveriam ser feitas
- periodicamente a medida que o conteúdo da tabela muda.
-
- Índices não são normalmente utilizados para ORDER BY ou para fazer
- junções. Uma busca sequencial seguido por uma ordenação explícita é
- geralmente mais rápida do que uma busca indexada em uma tabela grande.
- Contudo, LIMIT combinado com ORDER BY frequentemente utilizará índice
- porque somente uma pequena porção da tabela será retornada.
-
- Se você acredita que o otimizador está incorreto ao escolher uma busca
- sequencial, utilize SET enable_seqscan TO 'off' e execute a consulta
- novamente para ver se uma busca indexada é realmente mais rápida.
-
- Ao utilizar operadores curinga tais como LIKE ou ~, índices podem ser
- utilizados somente em algumas condições:
- * O início da cadeia de caracteres da busca deve ser iniciar com uma
- cadeia de caracteres, i.e.
- + modelos LIKE não devem iniciar com %.
- + modelos ~ (expressões regulares) devem iniciar com ^.
- * A cadeia de caracteres utilizada na busca não pode iniciar com a
- classe de caracteres e.g. [a-e].
- * Busca que não diferenciam maiúsculas de minúsculas tais como ILIKE
- e ~* não utilizam índices. Em vez disso, utilize índice de
- expressão, que é descrito na seção 4.8.
- * O idioma padrão C deve ser usando durante o initdb porque não é
- possível saber o próximo caracter em idiomas que não sejam o C.
- Você pode criar um índice especial text_pattern_ops para tais
- casos que funcionam somente para indexação com LIKE. Também é
- possível utilizar indexação de busca textual para buscas por
- palavras.
-
- Em versões anteriores a 8.0, índices frequentemente não podem ser
- utilizados a menos que os tipos de dados correspondam aos tipos de
- coluna do índice. Isto era particularmente verdadeiro para índices de
- coluna int2, int8 e numeric.
-
- 4.7) Como eu vejo como o otimizador de consulta está avaliando a minha
- consulta?
-
- Veja o comando EXPLAIN no manual.
-
- 4.8) Como eu faço buscas com expressões regulares e buscas com expressões
- regulares sem diferenciar maiúsculas de minúsculas? Como eu utilizo um índice
- para buscas que não diferenciam maiúsculas de minúsculas?
-
- O operador ~ faz avaliação de expressões regulares, e ~* faz avaliação
- não sensível a maiúsculas de expressões regulares. A variante não
- sensível a maiúsculas do LIKE é chamada de ILIKE.
-
- Comparações de igualdade não sensíveis a maiúsculas são normalmente
- expressadas como:
- SELECT *
- FROM tab
- WHERE lower(col) = 'abc';
-
- Isso não irá utilizar o índice padrão. Contudo, se você criar um
- índice de expressão, ele será utilizado:
- CREATE INDEX tabindex ON tab (lower(col));
-
- Se o índice acima é criado como UNIQUE, embora a coluna possa
- armazenar caracteres maiúsculos e minúsculos, ele não pode ter valores
- idênticos que diferem apenas em letras maiúsculas e minúsculas. Para
- forçar uma letra maiúscula ou minúscula a ser armazenada na coluna,
- utilize uma restrição CHECK ou um gatilho.
-
- 4.9) Em uma consulta, como eu detecto se um campo é NULL? Como eu posso
- concatenar possíveis NULLs? Como eu posso ordenar por um campo que é NULL ou
- não?
-
- Você testa a coluna com IS NULL e IS NOT NULL, como a seguir:
- SELECT *
- FROM tab
- WHERE col IS NULL;
-
- Para concatenar com possíveis NULLs, utilize COALESCE(), assim:
- SELECT COALESCE(col1, '') || COALESCE(col2, '')
- FROM tab
-
- Para ordenar pelo status NULL, utilize os modificadores IS NULL e IS
- NOT NULL na sua cláusula ORDER BY. Coisas que são verdadeiro serão
- ordenadas acima das coisas que são falso, então a consulta a seguir
- irá colocar entradas NULL no início da lista de resultados:
- SELECT *
- FROM tab
- ORDER BY (col IS NOT NULL)
-
- 4.10) Qual é a diferença entre os vários tipos de dado de caracteres?
-
- Tipo Nome Interno Observação
- VARCHAR(n) varchar tamanho especifica o tamanho máximo, sem
- preenchimento
- CHAR(n) bpchar preenchimento em branco para comprimento fixo
- específico
- TEXT text nenhum limite superior específico no comprimento
- BYTEA bytea vetor de bytes de comprimento variável (seguro a byte
- nulo)
- "char" char um caracter
-
- Você verá o nome interno quando examinar o catálogo do sistema e em
- algumas mensagens de erro.
-
- Os primeiros quatro tipos acima são do tipo "varlena" (i.e., os
- primeiros quatro bytes no disco são o comprimento seguido pelos
- dados). Consequentemente o espaço atual utilizado é ligeiramente maior
- do que o tamanho declarado. Contudo, valores longos são também
- sujeitos a compressão, então o espaço em disco pode também ser bem
- menor do que o esperado.
- VARCHAR(n) é melhor quando está armazenando cadeias de caracteres de
- comprimento variável e há um limite de tamanho desta cadeia. TEXT é
- para cadeias de caracteres de comprimento ilimitado, com o máximo de
- um gigabyte.
-
- CHAR(n) é para armazenar cadeias de caracteres que são todas do mesmo
- tamanho. CHAR(n) preenche com espaços em branco até o tamanho
- especificado, enquanto o VARCHAR(n) armazena somente os caracteres
- fornecidos. BYTEA é para armazenar dados binários, particularmente
- valores que incluem bytes NULL. Todos os tipos descritos aqui tem
- características de performance similares.
-
- 4.11.1) Como eu crio um campo serial/auto incremento?
-
- PostgreSQL suporta o tipo de dados SERIAL. Ele cria automaticamente
- uma sequência. Por exemplo:
- CREATE TABLE pessoa (
- id SERIAL,
- nome TEXT
- );
-
- é automaticamente traduzido em:
- CREATE SEQUENCE pessoa_id_seq;
- CREATE TABLE pessoa (
- id INT4 NOT NULL DEFAULT nextval('pessoa_id_seq'),
- nome TEXT
- );
-
- Sequências automaticamente criadas são nomeadas como
- <tabela>_<colunaserial>_seq, onde tabela e colunaserial são os nomes
- da tabela e da coluna serial, respectivamente. Veja a página sobre
- create_sequence no manual para obter informações adicionais sobre
- sequências.
-
- 4.11.2) Como eu consigo o valor de um campo SERIAL?
-
- A maneira mais simples de obter o próximo valor SERIAL de uma
- sequência é com RETURNING. Utilizando o exemplo da tabela em 4.11.1,
- ele ficaria assim:
- INSERT INTO pessoa (nome) VALUES ('Blaise Pascal') RETURNING id;
-
- Você também pode chamar nextval() e utilizar o valor no INSERT ou
- chamar currval() após o INSERT.
-
- 4.11.3) currval() não lida com condição de corrida com outros usuários?
-
- Não. currval() retorna o valor atual atribuido pela sua sessão, e não
- por todas as sessões.
-
- 4.11.4) Por que os números da minha sequência não são reutilizados quando uma
- transação é abortada? Por que há intervalos nos números da minha
- sequência/coluna SERIAL?
-
- Para melhorar a concorrência, valores da sequência são atribuídos a
- transações correntes e não são travados até que a transação seja
- finalizada. Isso causa intervalos na numeração por causa de transações
- abortadas.
-
- 4.12) O que é um OID? O que é um CTID?
-
- Se uma tabela é criada com WITH OIDS, cada registro recebe um OID
- único. OIDs são automaticamente atribuídos como inteiros de 4 bytes
- que são únicos ao longo de toda instalação. Contudo, eles são
- limitados em 4 bilhões e, então, os OIDs começam a ser duplicados. O
- PostgreSQL utiliza OIDs para ligar as tabelas do sistema.
-
- Para numerar registros nas tabelas do usuários, é melhor utilizar
- SERIAL ao invés de OIDs porque sequências SERIAL são únicas somente em
- uma tabela; e são menos propícias a atingir o limite. SERIAL8 está
- disponível para armazenar valores de sequências com oito bytes.
-
- CTIDs são utilizados para identificar registros físicos específicos
- com valores de block e deslocamento. CTIDs mudam após registros serem
- modificados ou recarregados. Eles são utilizados por índices para
- apontar registros físicos.
-
- 4.13) Por que eu recebo o erro "ERROR: Memory exhausted in AllocSetAlloc()"?
-
- Você provavelmente está sem memória virtual no seu sistema, ou o seu
- núcleo (kernel) tem um limite baixo para certos recursos. Tente isto
- antes de iniciar o servidor PostgreSQL:
- ulimit -d 262144
- limit datasize 256m
-
- Dependendo da sua shell, somente um desses comando terá sucesso, mas
- ele definirá o segmento de dados do seu processo com um limite maior e
- talvez permita que a consulta seja feita. Este comando é aplicado ao
- processo atual e todos os subprocessos criados depois do comando ser
- executado. Se você tiver problemas com o cliente SQL porque o processo
- servidor retornou muitos dados, tente-o antes de iniciar o cliente.
-
- 4.14) Como eu informo qual versão do PostgreSQL eu estou utilizando?
-
- No psql, digite SELECT version();
-
- 4.15) Como eu crio uma coluna que conterá por padrão a hora atual?
-
- Utilize CURRENT_TIMESTAMP:
- CREATE TABLE teste (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP);
-
- 4.16) Como eu faço uma junção externa (outer join)?
-
- PostgreSQL suporta junções externas utilizando a sintaxe padrão do
- SQL. Aqui temos dois exemplos:
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-
- or
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 USING (col);
-
- Essas duas consultas indênticas juntam t1.col com t2.col, e também
- retornam qualquer registro que não foi juntado em t1 (aqueles que não
- combinaram com t2). Uma junção a direita RIGHT adicionaria registros
- que não foram juntados da tabela t2. Uma junção completa (FULL)
- retornaria os registros combinados mais todos os registros não
- combinados de t1 e t2. A palavra OUTER é opcional e é assumida nas
- junções LEFT, RIGHT e FULL. Junções ordinárias são chamadas junções
- internas (INNER).
-
- 4.17) Como eu faço consultas utilizando múltiplos bancos de dados?
-
- Não há outra maneira de consultar um banco de dados caso ele não seja
- o atual. Porque o PostgreSQL carrega catálogos do sistema específicos
- do banco de dados, é incerto como uma consulta em banco de dados
- distintos pode se comportar.
-
- contrib/dblink permite consultas em bancos de dados distintos
- utilizando chamadas de funções. É claro, que um cliente pode fazer
- conexões simultâneas em bancos de dados diferentes e juntar os
- resultados no cliente.
-
- 4.18) Como eu retorno múltiplos registros ou colunas de uma função?
-
- É fácil utilizando funções que retornam conjunto,
- http://www.postgresql.org/docs/techdocs.17.
-
- 4.19) Por que eu obtenho erros "relation with OID ###### does not exist" ao
- acessar tabelas temporárias em funções PL/PgSQL?
-
- Em versões do PostgreSQL < 8.3, PL/PgSQL armazena o conteúdo da
- função, e o efeito indesejado é que se uma função PL/PgSQL acessa uma
- tabela temporária, e aquela tabela é removida e criada novamente, e a
- função é chamada novamente, a função irá falhar porque o conteúdo
- armazenado da função ainda apontará para a tabela temporária antiga. A
- solução é utilizar o EXECUTE para acesso a tabelas temporárias no
- PL/PgSQL. Isto irá fazer com que a consulta seja avaliada toda vez.
-
- Este problema não ocorre no PostgreSQL 8.3 ou superior.
-
- 4.20) Quais soluções de replicação estão disponíveis?
-
- Embora "replicação" seja um termo simples, há várias tecnologias para
- fazer replicação, com vantagens e desvantagens para cada um.
-
- Replicação mestre/escravo permite que um mestre receba consultas de
- leitura e escrita, enquanto os escravos só podem aceitar
- leitura/consultas SELECT. A solução mais popular de replicação
- mestre-escravo para PostgreSQL disponível livremente é Slony-I.
-
- Replicação com múltiplos mestres permite que consultas leitura/escrita
- sejam enviadas para múltiplos computadores replicadores. Esta
- capacidade também tem um sério impacto na performance por causa da
- necessidade de sincronizar as mudanças entre os servidores. PGCluster
- é a solução mais popular disponível livremente para PostgreSQL.
-
- Há também soluções de replicação comerciais e baseadas em hardware
- disponíveis que suportam uma variedade de modelos de replicação.
-
- 4.21) Por que os nomes de minhas tabelas e colunas não são reconhecidos em
- minha consulta? Por que as maiúsculas não são preservadas?
-
- A causa mais comum de nomes desconhecidos é o uso de aspas ao redor
- dos nomes da tabela ou coluna durante a criação da tabela. Ao utilizar
- aspas, nomes de tabela e coluna (chamados de identificadores) são
- armazenados como especificado, significando que você deve utilizar
- aspas quando se referir aos nomes na consulta. Algumas interfaces,
- como pgAdmin, automaticamente colocam aspas nos identificadores
- durante a criação da tabela. Então, para identificadores serem
- reconhecidos, você deve:
- * Evitar colocar aspas no identificador ao criar tabelas
- * Utilizar somente caracteres minúsculos em identificadores
- * Colocar aspas em identificadores ao referenciá-los nas consultas
+++ /dev/null
-
- PostgreSQL 常è§é®é¢ï¼FAQï¼
-
- æè¿æ´æ°ï¼2007 å¹´ 1 æ 30 æ¥ ææäº 17:37:01 EST
- 䏿çæè¿æ´æ°ï¼2007 å¹´ 2 æ 1 æ¥ ææå 12:55:04 CST
-
- ç®åç»´æ¤äººåï¼Bruce Momjian (pgman@candle.pha.pa.us)
- 䏿çç»´æ¤äººåï¼Daojing.Zhouï¼doudou586@gmail.comï¼
-
- æ¬ææ¡£çææ°çæ¬å¯ä»¥å¨
- http://www.postgresql.org/files/documentation/faqs/FAQ.htmlæ¥çã
-
- 䏿ä½ç³»ç»å¹³å°ç¸å³çé®é¢å¯å¨http://www.postgresql.org/docs/faq/éæ¾å°ç
- æ¡ã
- _________________________________________________________________
-
-常è§é®é¢
-
- 1.1)PostgreSQL æ¯ä»ä¹ï¼è¯¥æä¹åé³ï¼
- 1.2)è°æ§å¶å管çPostgreSQL ï¼
- 1.3)PostgreSQLççææ¯ä»ä¹ï¼
- 1.4)PostgreSQLå¯ä»¥è¿è¡å¨åªäºæä½ç³»ç»å¹³å°ä¸ï¼
- 1.5)æä»åªéè½å¾å°PostgreSQLï¼
- 1.6)ææ°ççPostgreSQL æ¯ä»ä¹ï¼
- 1.7)æä»åªéè½å¾å°å¯¹PostgreSQL çæ¯æï¼
- 1.8)æå¦ä½æäº¤ä¸ä¸ªBUGæ¥åï¼
- 1.9)æå¦ä½äºè§£å·²ç¥ç BUG ææç¼ºçåè½ï¼
- 1.10)è½å¤è·åçææ°ææ¡£æåªäºï¼
- 1.11)æåºè¯¥ææ ·å¦ä¹ SQL ï¼
- 1.12)å¦ä½æäº¤è¡¥ä¸ææ¯å å¥å¼åéä¼ï¼
- 1.13)PostgreSQL åå¶ä»æ°æ®åºç³»ç»æ¯èµ·æ¥å¦ä½ï¼
- 1.14)PostgreSQL å¯ä»¥å¤çæè¿å个å½å®¶å¤æ¶å¶çåååï¼
-
-ç¨æ·å®¢æ·ç«¯é®é¢
-
- 2.1)æä»¬å¯ä»¥ç¨ä»ä¹è¯è¨åPostgreSQL æäº¤éï¼
- 2.2)æä»ä¹å·¥å·å¯ä»¥æPostgreSQL ç¨äº Web 页é¢ï¼
- 2.3)PostgreSQL æ¥æå¾å½¢ç¨æ·çé¢åï¼
-
-ç³»ç»ç®¡çé®é¢
-
- 3.1)æææ ·æè½æPostgreSQL è£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼
- 3.2)æå¦ä½æ§å¶æ¥èªå¶ä»çµèçè¿æ¥ï¼
- 3.3)æææ ·è°æ´æ°æ®åºæå¡å¨ä»¥è·å¾æ´å¥½çæ§è½ï¼
- 3.4)PostgreSQL éå¯ä»¥è·å¾ä»ä¹æ ·çè°è¯ç¹æ§ï¼
- 3.5)为ä»ä¹å¨è¯å¾è¿æ¥ç»å½æ¶æ¶å°âSorry, too many clientsâ æ¶æ¯ï¼
- 3.6)PostgreSQLçå级è¿ç¨æåªäºå容ï¼
- 3.7)(使ç¨PostgreSQL)æéè¦ä½¿ç¨ä»ä¹è®¡ç®æºç¡¬ä»¶ ï¼
-
-æä½é®é¢
-
- 4.1) å¦ä½åªéæ©ä¸ä¸ªæ¥è¯¢ç»æç头å è¡ï¼ææ¯éæºçä¸è¡ï¼
- 4.2)
- å¦ä½æ¥ç表ãç´¢å¼ãæ°æ®åºä»¥åç¨æ·çå®ä¹ï¼å¦ä½æ¥çpsqléç¨å°çæ¥è¯¢æä»¤å¹¶æ¾ç
- ¤ºå®ä»¬ï¼
- 4.3) å¦ä½æ´æ¹ä¸ä¸ªåæ®µçæ°æ®ç±»åï¼
- 4.4) åæ¡è®°å½ï¼å个表ï¼ä¸ä¸ªæ°æ®åºçæå¤§éå¶æ¯å¤å°ï¼
- 4.5) åå¨ä¸ä¸ªå¸åçææ¬æä»¶éçæ°æ®éè¦å¤å°ç£ç空é´ï¼
- 4.6) 为ä»ä¹æçæ¥è¯¢å¾æ¢ï¼ä¸ºä»ä¹è¿äºæ¥è¯¢æ²¡æå©ç¨ç´¢å¼ï¼
- 4.7) æå¦ä½æè½çå°æ¥è¯¢ä¼å卿¯ææ ·è¯ä¼°å¤çæçæ¥è¯¢çï¼
- 4.8) æææ ·åæ£åè¡¨è¾¾å¼æç´¢å大å°åæ å³çæ
- £åè¡¨è¾¾å¼æ¥æ¾ï¼ææ ·å©ç¨ç´¢å¼è¿è¡å¤§å°åæ 峿¥æ¾ï¼
- 4.9) å¨ä¸ä¸ªæ¥è¯¢éï¼æææ ·æ£æµä¸ä¸ªå段æ¯å¦ä¸º
- NULLï¼æå¦ä½æè½åç¡®æåºèä¸è®ºæå段æ¯å¦å«NULLå¼ï¼
- 4.10) åç§å符类åä¹é´æä»ä¹ä¸åï¼
- 4.11.1) æææ ·å建ä¸ä¸ªåºåå·åææ¯èªå¨éå¢çåæ®µï¼
- 4.11.2) æå¦ä½è·å¾ä¸ä¸ªæå¥çåºåå·çå¼ï¼
- 4.11.3) åæ¶ä½¿ç¨ currval() ä¼å¯¼è´åå¶ä»ç¨æ·çå²çªæåµåï¼
- 4.11.4) 为ä»ä¹ä¸å¨äºå¡å¼å¸¸ä¸æ¢åéç¨åºåå·å¢ï¼ä¸ºä»ä¹å¨åºåå·å段çåå¼ä¸
- åå¨é´æå¢ï¼
- 4.12) ä»ä¹æ¯ OIDï¼ä»ä¹æ¯ CTID ï¼
- 4.13) 为ä»ä¹ææ¶å°é误信æ¯âERROR: Memory exhausted in
- AllocSetAlloc()âï¼
- 4.14) æå¦ä½æè½ç¥éæè¿è¡ç PostgreSQL ççæ¬ï¼
- 4.15) æå¦ä½å建ä¸ä¸ªç¼ºç弿¯å½åæ¶é´çåæ®µï¼
- 4.16) å¦ä½æ§è¡å¤è¿æ¥ï¼outer joinï¼æ¥è¯¢ï¼
- 4.17) å¦ä½æ§è¡æ¶åå¤ä¸ªæ°æ®åºçæ¥è¯¢ï¼
- 4.18) å¦ä½è®©å½æ°è¿åå¤è¡æå¤åæ°æ®ï¼
- 4.19) 为ä»ä¹æå¨ä½¿ç¨PL/PgSQL彿°åå临æ¶è¡¨æ¶ä¼æ¶å°é误信æ¯ârelation
- with OID ##### does not existâï¼
- 4.20) ç®åæåªäºæ°æ®å¤å¶æ¹æ¡å¯ç¨ï¼
- 4.21) ä¸ºä½æ¥è¯¢ç»ææ¾ç¤ºç表åæååä¸æçæ¥è¯¢è¯å¥ä¸
- çä¸åï¼ä¸ºä½å¤§åç¶æä¸è½ä¿çï¼
- _________________________________________________________________
-
-常è§é®é¢
-
- 1.1)PostgreSQL æ¯ä»ä¹ï¼è¯¥æä¹åé³ï¼
-
- PostgreSQL è¯»ä½ Post-Gres-Q-Lï¼ææ¶åä¹ç®ç§°ä¸ºPostgres
- ãæ³å¬ä¸ä¸å¶åé³ç人åå¯ä»è¿éä¸è½½å£°é³æä»¶ï¼ MP3 æ ¼å¼ ã
-
- PostgreSQL
- æ¯é¢åç®æ çå³ç³»æ°æ®åºç³»ç»ï¼å®å·æä¼ ç»å䏿°æ®åºç³»ç»çææåè½ï¼åæ¶å嫿å°å
- ¨ä¸ä¸ä»£ DBMS ç³»ç»ç使ç¨çå¢å¼ºç¹æ§ãPostgreSQL
- æ¯èªç±åè´¹çï¼å¹¶ä¸æææºä»£ç é½å¯ä»¥è·å¾ã
-
- PostgreSQL
- çå¼åéä¼ä¸»è¦ä¸ºå¿æ¿èï¼ä»ä»¬éå¸ä¸çåå°å¹¶éè¿äºèç½è¿è¡èç³»ï¼è¿æ¯ä¸ä¸ªç¤¾å
- ºå¼å项ç®ï¼å®ä¸è¢«ä»»ä½å¬å¸æ§å¶ã
- 妿³å å¥å¼åéä¼ï¼è¯·åè§å¼å人å常è§é®é¢ï¼FAQï¼
- http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html
-
- 1.2) è°æ§å¶PostgreSQL ï¼
-
- å¦æä½ å¨å¯»æ¾PostgreSQLçæé¨äººï¼ææ¯ä»ä¹ä¸
- 央å§åä¼ï¼ææ¯ä»ä¹æå±å¬å¸ï¼ä½ åªè½æ¾å¼äº---å 为ä¸ä¸ªä¹ä¸å
- å¨ï¼ä½æä»¬çç¡®æä¸ä¸ª
- æ ¸å¿å§åä¼åCVS管çç»ï¼ä½è¿äºå·¥ä½ç»ç设ç«ä¸»è¦æ¯ä¸ºäºè¿è¡ç®¡çå·¥ä½è䏿
- ¯å¯¹PostgreSQLè¿è¡ç¬å 弿§å¶ï¼PostgreSQLé¡¹ç®æ¯ç±ä»»ä½äººå
- å¯åå çå¼å人å社åºåææç¨æ·æ§å¶çï¼ä½ æéè¦åçå°±æ¯è®¢éé®ä»¶å表ï¼åä¸è®¨è®º
- å³å¯ï¼è¦åä¸PostgreSQLçå¼åè¯¦è§ å¼å人å常é®é¢ (Developer's FAQ)
- è·åä¿¡æ¯ï¼ã
-
- 1.3)PostgreSQLççææ¯ä»ä¹?
-
- PostgreSQLçåå¸éµä»ç»å¸çBSDçæãå®åè®¸ç¨æ·ä¸éç®çå°ä½¿ç¨PostgreSQLï¼çè³ä½
- å¯ä»¥éå®PostgreSQLèä¸å«æºä»£ç ä¹å¯ä»¥ï¼å¯ä¸çéå¶å°±æ¯ä½ ä¸è½å 软件èªè
- º«é®é¢èåæä»¬è¿½è¯æ³å¾è´£ä»»ï¼å¦å¤å°±æ¯è¦æ±ææç软件æ·è´ä¸
- 须忬以ä¸çæå£°æãä¸é¢å°±æ¯æä»¬æä½¿ç¨çBSDçæå£°æå容ï¼
-
- PostgreSQLæ°æ®åºç®¡çç³»ç»
-
- é¨åçæï¼cï¼1996-2005ï¼PostgreSQL å¨çå¼åå°ç»ï¼é¨åçæï¼cï¼1994-1996
- å å·å¤§å¦è£äº
-
- ï¼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.ï¼
-
- 1.4)PostgreSQL å¯ä»¥è¿è¡å¨åªäºæä½ç³»ç»å¹³å°ä¸ï¼
-
- ä¸è¬è¯´æ¥ï¼ä»»ä½ç°å¨å¯¹ UNIX å¼å®¹çæä½ç³»ç»ä¹ä¸é½è½è¿è¡PostgreSQL
- ãå¨å®è£æåéååºäºå叿¶ç»è¿æç¡®æµè¯çå¹³å°ã
-
- PostgreSQlä¹å¯ä»¥ç´æ¥è¿è¡å¨åºäºå¾®è½¯Windows-NTçæä½ç³»ç»ï¼å¦Win2000
- SP4ï¼WinXP å Win2003ï¼å·²å¶ä½å®æçå®è£åå¯ä»
- http://pgfoundry.org/projects/pginstallerä¸è½½ï¼åºäºMSDOSçWindowsæä½ç³
- »ç» ï¼Win95ï¼Win98ï¼WinMeï¼éè¦éè¿Cygwin模æç¯å¢è¿è¡PostgreSQLã
-
- 忶乿ä¸ä¸ªä¸ºNovell Netware 6å¼åççæ¬å¯ä»
- http://forge.novell.comè·åï¼ä¸ºOS/2(eComStation)å¼åççæ¬å¯ä»
- http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
- SQL&stype=all&sort=type&dir=%2F ä¸è½½ã
-
- 1.5) æä»åªéè½å¾å°PostgreSQLï¼
-
- éè¿æµè§å¨å¯ä»http://www.postgresql.org/ftp/ä¸è½½ï¼ä¹å¯éè¿FTPï¼ä»
- ftp://ftp.PostgreSQL.org/pub/ç«ç¹ä¸è½½ã
-
- 1.6) ææ°ççPostgreSQLæ¯ä»ä¹ï¼
-
- PostgreSQL ææ°ççæ¬æ¯çæ¬ 8.2.1 ã
-
- æä»¬è®¡åæ¯å¹´åå¸ä¸ä¸ªä¸»è¦åçº§çæ¬ï¼æ¯å 个æåå¸ä¸ä¸ªå°çæ¬ã
-
- 1.7) æä»åªéè½å¾å°å¯¹PostgreSQLçæ¯æï¼
-
- PostgreSQL社åºéè¿é®ä»¶å表为å¶å¤§å¤æ°ç¨æ·æä¾å¸®å©ï¼è®¢éé®ä»¶å表ç主
- ç«ç¹æ¯
- http://www.postgresql.org/community/lists/ï¼ä¸è¬æåµä¸ï¼åå å¥General æ
- Bugé®ä»¶å表æ¯ä¸ä¸ªè¾å¥½çå¼å§ã
-
- 主è¦çIRCé¢éæ¯å¨FreeNode(irc.freenode.net)ç#postgresqlï¼ä¸ºäºè¿ä¸æ
- ¤é¢éï¼å¯ä»¥ä½¿ç¨UNIXç¨åºircï¼å¶æä»¤æ ¼å¼ï¼ irc -c '#postgresql'
- "$USER" irc.freenode.net ï¼æè使ç¨å¶ä»IRC客æ·ç«¯ç¨åºã卿¤ç½ç»ä¸è¿å
- å¨ä¸ä¸ªPostgreSQLç西ççé¢é(#postgersql-es)åæ³è¯é¢é
- (#postgresql-fr)ãåæ ·å°ï¼å¨EFNETä¸ä¹æä¸ä¸ªPostgreSQLç交æµé¢éã
-
- 坿ä¾å䏿¯æçå¬å¸å表å¯å¨http://techdocs.postgresql.org/companies.phpæµ
- è§ã
-
- 1.8) æå¦ä½æäº¤ä¸ä¸ªBUGæ¥åï¼
-
- å¯è®¿é®
- http://www.postgresql.org/support/submitbugï¼å¡«åBug䏿¥è¡¨æ ¼å³å¯ï¼åæ
- ·ä¹å¯è®¿é®ftpç«ç¹ftp://ftp.PostgreSQL.org/pub/
- æ£æ¥ææ æ´æ°çPostgreSQLçæ¬æè¡¥ä¸ã
-
- éè¿ä½¿ç¨Bugæäº¤è¡¨æ ¼ææ¯åå¾PostgreSQLé®ä»¶å表çBugé叏伿以ä¸ä¹ä¸åå¤ï
- ¼
- * ææäº¤å容䏿¯ä¸ä¸ªBugåå¶ä¸æ¯Bugçåå ã
- * ææäº¤å容æ¯ä¸ä¸ªå·²ç¥çBugå¹¶ä¸å·²ç»å å¥TODOå¾å¤çä»»å¡å表ã
- * ææäº¤çBugå·²å¨å½åçæ¬ä¸è¢«ä¿®æ£ã
- * ææäº¤çBug已修æ£ä½å°æªå°è¡¥ä¸å å¥ç°å¨çåå¸è½¯ä»¶åã
- * è¯·æ±æäº¤èæä¾æ´è¯¦ç»çä¿¡æ¯ï¼
- + æä½ç³»ç»
- + PostgreSQLçæ¬
- + å¯éç°Bugçæµè¯æ¡ä¾
- + è°è¯ä¿¡æ¯
- + è°è¯è·è¸ªè¾åº
- * ææäº¤å容æ¯ä¸ä¸ªæ°Bugï¼å°æ§è¡ä»¥ä¸å·¥ä½ï¼
- + å建ä¸ä¸ªæ°è¡¥ä¸å¹¶å°å¶å å¥ä¸ä¸ä¸ªä¸»è¦çæ¬ææ¯å°çæ¹è¿çæ¬ä¸ã
- + æ¤Bugææ¶ä¸è½ä¿®æ£ï¼å°è¢«å è³TODOå¾å¤çä»»å¡å表ã
-
- 1.9) æå¦ä½äºè§£å·²ç¥ç BUG ææç¼ºçåè½ï¼
-
- PostgreSQL æ¯æä¸ä¸ªæ©å±ç SQL:2003 çåéãåéæä»¬çTODO
- å表ï¼äºè§£å·²ç¥Bugå表ãæç¼ºçåè½åå°æ¥çå¼å计åã
-
- è¦æ±å¢å æ°åè½çç³è¯·é叏伿¶å°ä»¥ä¸ä¹ä¸çåå¤ï¼
- * 该åè½å·²å å¥TODOå¾å¤çä»»å¡å表ã
- * 该åè½ä¸æ¯å¿é¡»çï¼å 为ï¼
- + 宿¯ç°æçä¸ç¬¦åSQLæ åçæåè½çéå¤ã
- + 该åè½æ§ä¼å¤§å¤§å¢å 代ç ç夿ç¨åºï¼è带æ¥ç好夿¯å¾®ä¸è¶³éçã
- + 该åè½æ¯ä¸å®å¨ææ¯ä¸å¯é çã
- * 该åè½å°è¢«å å¥TODOå¾å¤çä»»å¡å表ã
-
- PostgreSQLä¸ä½¿ç¨Bugè·è¸ªç³»ç»ï¼å 为æä»¬åç°å¨é®ä»¶å表ä¸
- ç´æ¥åå¤ä»¥åä¿è¯TODOä»»å¡åè¡¨æ»æ¯å¤äºææ°ç¶æçæ¹å¼å·¥ä½æç伿´é«ä¸äºãäºå®ä
- ¸ï¼Bugä¸ä¼å¨æä»¬ç软件ä¸åå¨å¾é¿æ¶é´ï¼
- 对影åå¾å¤ç¨æ·çBug乿»æ¯å¾å¿«ä¼è¢«ä¿®æ£ãå¯ä¸è½æ¾å°æææ¹è¿ãæé«åä¿®æ
- £çå°æ¹æ¯CVSçæ¥å¿ä¿¡æ¯ï¼å³ä½¿æ¯å¨è½¯ä»¶æ°çæ¬çåå¸ä¿¡æ¯ä¸
- ä¹ä¸ä¼ååºæ¯ä¸å¤çè½¯ä»¶æ´æ°ã
-
- 1.10) è½å¤è·åçææ°ææ¡£æåªäºï¼
-
- PostgreSQLåå«å¤§éçææ¡£ï¼ä¸»è¦æè¯¦ç»çåèæåï¼æå页åä¸äºçæµè¯ä¾åãåè§ /doc
- ç®å½ï¼è¯æ³¨ï¼åºä¸º $PGHOME/docï¼ã
- ä½ è¿å¯ä»¥å¨çº¿æµè§PostgreSQLçæåï¼å¶ç½åæ¯ï¼http://www.PostgreSQL.org/d
- ocsã
-
- æä¸¤æ¬å³äºPostgreSQLç书å¨çº¿æä¾ï¼å¨
- http://www.PostgreSQL.org/docs/awbook.html å
- http://www.commandprompt.com/ppbook/ ã 乿大éçPostgreSQL书ç±å¯ä¾è´
- ä¹°ï¼å¶ä¸æä¸ºæµè¡ç䏿¬æ¯ç±Korry Douglasç¼åçãå¨
- http://techdocs.PostgreSQL.org/techdocs/bookreviews.phpä¸
- 䏿大éæå³PostgreSQL书ç±çç®ä»ã å¨
- http://techdocs.PostgreSQL.org/䏿¶éäºæå³PostgreSQLç大鿿¯æç« ã
-
- 客æ·ç«¯çå½ä»¤è¡ç¨åºpsqlæä¸äºä»¥ \d
- å¼å¤´çå½ä»¤ï¼å¯æ¾ç¤ºå³äºç±»åï¼æä½ç¬¦ï¼å½æ°ï¼èåçä¿¡æ¯ï¼ä½¿ç¨ \?
- å¯ä»¥æ¾ç¤ºææå¯ç¨çå½ä»¤ã
-
- æä»¬ç web ç«ç¹å嫿´å¤çææ¡£ã
-
- 1.11) æåºè¯¥ææ ·å¦ä¹ SQL ï¼
-
- é¦åèèä¸è¿°æå°çä¸PostgreSQLç¸å³ç书ç±ï¼å¦å¤ä¸æ¬æ¯Teach Yourself SQL in
- 21 Days, Second Editionï¼å¶è¯¦ç»ä»ç»çç½åæ¯
- http://members.tripod.com/er4ebus/sql/index.htmï¼
- æä»¬ç许å¤ç¨æ·å欢The Practical SQL Handbookï¼ Bowman, Judith S.
- ç¼åï¼Addison-Wesleyå¬å¸åºçï¼å¶ä»çå忬¢ The Complete Reference SQL,
- Groff ç¼åï¼McGraw-Hillå¬å¸åºçã
-
- å¨ä¸åç½åä¸ä¹æå¾å¥½çæç¨ï¼ä»ä»¬æ¯
- * http://www.intermedia.net/support/sql/sqltut.shtm
- * http://sqlcourse.com.
- * http://www.w3schools.com/sql/default.asp
- * http://mysite.verizon.net/Graeme_Birchall/id1.html
-
- 1.12)å¦ä½æäº¤è¡¥ä¸ææ¯å å¥å¼åéä¼ï¼
-
- è¯¦è§ å¼å人å常è§é®é¢ (Developer's FAQ) ã
-
- 1.13)PostgreSQLåå¶ä»æ°æ®åºç³»ç»æ¯èµ·æ¥å¦ä½ï¼
-
- è¯ä»·è½¯ä»¶æå¥½å ç§æ¹æ³ï¼åè½ï¼æ§è½ï¼å¯é æ§ï¼æ¯æåä»·æ ¼ã
-
- åè½
- PostgreSQL æ¥æå¤§ååç¨æ°æ®åºæå¤çåè½ï¼ä¾å¦ï¼äºå¡ï¼å
- æ¥è¯¢ï¼è§¦åå¨ï¼è§å¾ï¼å¤é®åè宿´æ§å夿çéå®çã
- æä»¬è¿æä¸äºå®ä»¬æ²¡æçç¹æ§ï¼å¦ç¨æ·å®ä¹ç±»åï¼ç»§æ¿ï¼è§ååå¤çæ¬å¹¶è
- ¡æ§å¶ä»¥åå°éçäºç¨çã
-
- æ§è½
- PostgreSQLåå¶ä»åç¨å弿ºçæ°æ®åºå·æç±»ä¼¼çæ§è½ã对æäºå¤ç宿¯è¾å¿«
- ï¼å¯¹å¶ä»ä¸äºå¤ç宿¯è¾æ¢ã ä¸å¶ä»æ°æ®åºç¸æ¯ï¼æä»¬çæ§è½ä¼å£é常å¨
- +/- 10%ä¹é´ã
-
- å¯é æ§
- æä»¬é½ç¥éæ°æ®åºå¿é¡»æ¯å¯é çï¼å¦åå®å°±ä¸ç¹ç¨é½æ²¡æãæä»¬åªååå°åå¸
- ç»è¿è®¤çæµè¯çï¼ç¼ºé·æå°ç稳å®ä»£ç ãæ¯ä¸ªçæ¬è³å°æä¸ä¸ªæç beta
- æµè¯æ¶é´ï¼å¹¶ä¸æä»¬çåå¸å岿¾ç¤ºæä»¬å¯ä»¥æä¾ç¨³å®çï¼ç¢åºçï¼å¯ç¨ä
- ºç产使ç¨ççæ¬ãæä»¬ç¸ä¿¡å¨è¿æ¹é¢æä»¬ä¸å¶ä»çæ°æ®åºè½¯ä»¶æ¯ç¸å½çã
-
- æ¯æ
- æä»¬çé®ä»¶å表æä¾ä¸ä¸ªé常大çå¼å人ååç¨æ·çç»ä»¥å¸®å©è§£å³æç¢°å
- °çä»»ä½é®é¢ãæä»¬ä¸è½ä¿è¯æ»æ¯è½è§£å³é®é¢ï¼ç¸æ¯ä¹ä¸ï¼åç¨æ°æ®åºè½¯
- ä»¶ä¹å¹¶ä¸æ¯æ»è½å¤æä¾è§£å³æ¹æ³ã
- ç´æ¥ä¸å¼å人åï¼ç¨æ·ç¾¤ï¼æååæºç¨åºæ¥è§¦ä½¿PostgreSQLçæ¯ææ¯å¶ä»æ°
- æ®åºè¿è¦å¥½ãè¿æä¸äºå䏿§çå¨é¢ææ¯æ¯æï¼å¯ä»¥ç»æä¾ç»é£äºéè¦ç人ãï¼
- åé1.7 å°èï¼
-
- ä»·æ ¼
- æä»¬å¯¹ä»»ä½ç¨éé½åè´¹ï¼åæ¬åç¨åéåç¨ç®çã
- ä½ å¯ä»¥ä¸å éå¶å°åä½ ç产åéå 奿们ç代ç ï¼é¤äºé£äºæä»¬å¨ä¸é¢çç
- æå£°æé声æç BSDçæä¹å¤çå容ã
-
- 1.14) PostgreSQLå¯ä»¥å¤çæè¿å个å½å®¶å¤æ¶å¶çååå?
-
- PostgreSQL 8.0ä¹åççæ¬æ¯ä½¿ç¨æä½ç³»ç»ä¸
- çæ¶åºæ°æ®åºæ¥å¤ç夿¶å¶çä¿¡æ¯ï¼èª8.0çå以åççæ¬PostgreSQLä¼èªèº«å«æææ°çæ
- ¶åºä¿¡æ¯ã
- _________________________________________________________________
-
-ç¨æ·å®¢æ·ç«¯é®é¢
-
- 2.1) æä»¬å¯ä»¥ç¨ä»ä¹è¯è¨åPostgreSQLæäº¤éï¼
-
- PostgreSQL(缺çæåµ)åªå®è£æCåååµå¼Cçæ¥å£ï¼å¶ä»çæ¥å£é½æ¯ç¬ç«ç项ç®ï¼è½å¤
- åå«ä¸è½½ï¼è¿äºæ¥å£é¡¹ç®ç¬ç«ç好å¤
- æ¯ä»ä»¬å¯ä»¥æåèªçåå¸è®¡åååèªç¬ç«çå¼åç»ã
-
- ä¸äºç¼ç¨è¯
- è¨å¦PHPé½æè®¿é®PostgreSQLçæ¥å£ï¼PerlãTCLãPython以åå¾å¤å¶ä»è¯è¨çæ¥å£å¨
- http://gborg.postgresql.orgç½ç«ä¸çDrivers/Interfaceså°è坿¾å°ï¼
- å¹¶ä¸éè¿Internetå¾å®¹ææç´¢å°ã
-
- 2.2) æä»ä¹å·¥å·å¯ä»¥æPostgreSQLç¨äº Web 页é¢ï¼
-
- ä¸ä¸ªä»ç»ä»¥æ°æ®åºä¸ºåå°çæºä¸éçç«ç¹æ¯ï¼http://www.webreview.comã
-
- å¯¹äº Web éæï¼PHP æ¯ä¸ä¸ªæå¥½çæ¥å£ãå®å¨http://www.php.net/ã
-
- 对äºå¤æçä»»å¡ï¼å¾å¤äººéç¨ Perl æ¥å£å 使ç¨CGI.pmçDBD::Pg æ mod_perl ã
-
- 2.3)PostgreSQLæ¥æå¾å½¢ç¨æ·çé¢åï¼
-
- åä¸ç¨æ·ææ¯å¼æºå¼å人åè½æ¾å°å¾å¤çæå³PostgreSQLçGUIå¾å½¢å·¥å·è½¯ä»¶ï¼å¨
- PostgreSQLç¤¾åºææ¡£æä¸ä¸ªè¯¦ç»çå表ã
- _________________________________________________________________
-
-ç³»ç»ç®¡çé®é¢
-
- 3.1)æææ ·è½æPostgreSQLè£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼
-
- å¨è¿è¡ configure æ¶å ä¸ --prefix é项ã
-
- 3.2) æå¦ä½æ§å¶æ¥èªå¶ä»çµèçè¿æ¥ï¼
-
- 缺çæåµä¸ï¼PostgreSQLåªå许æ¥èªæ¬æºä¸éè¿ unix å奿¥åæTCP/IPæ¹å¼çè¿æ¥ã
- ä½ åªæå¨ä¿®æ¹äºéç½®æä»¶postgresql.confä¸
- çlisten_addressesï¼ä¸ä¹å¨éç½®æä»¶$PGDATA/pg_hba.conf䏿å¼äº
- åºäºè¿ç¨çµèï¼ host-based
- ï¼ç身份认è¯ï¼å¹¶éæ°å¯å¨PostgreSQLï¼å¦åå¶ä»çµèæ¯ä¸è½ä¸ä½ çPostgreSQL
- æå¡å¨è¿è¡è¿æ¥çã
-
- 3.3) æææ ·è°æ´æ°æ®åºå¼æä»¥è·å¾æ´å¥½çæ§è½ï¼
-
- æä¸ä¸ªä¸»è¦æ¹é¢å¯ä»¥æåPostgreSQLçæ½è½ã
-
- æ¥è¯¢æ¹å¼çåå
- è¿ä¸»è¦æ¶åä¿®æ¹æ¥è¯¢æ¹å¼ä»¥è·åæ´å¥½çæ§è½:
-
- + å建索å¼ï¼åæ¬è¡¨è¾¾å¼åé¨åç´¢å¼ï¼
- + 使ç¨COPYè¯å¥ä»£æ¿å¤ä¸ªInsertè¯å¥ï¼
- + å°å¤ä¸ªSQLè¯å¥ç»æä¸ä¸ªäºå¡ä»¥åå°æäº¤äºå¡çå¼éï¼
- + ä»ä¸ä¸ªç´¢å¼ä¸æå夿¡è®°å½æ¶ä½¿ç¨CLUSTERï¼
- + ä»ä¸ä¸ªæ¥è¯¢ç»æä¸ååºé¨åè®°å½æ¶ä½¿ç¨LIMITï¼
- + 使ç¨é¢ç¼è¯å¼æ¥è¯¢ï¼Prepared Query)ï¼
- + 使ç¨ANALYZEä»¥ä¿æç²¾ç¡®çä¼åç»è®¡ï¼
- + å®æä½¿ç¨ VACUUM æ pg_autovacuum
- + è¿è¡å¤§éæ°æ®æ´æ¹æ¶åå é¤ç´¢å¼ï¼ç¶åé建索å¼ï¼
-
- æå¡å¨çéç½®
- éç½®æä»¶postgres.confä¸
- çå¾å¤è®¾ç½®é½ä¼å½±åæ§è½ï¼ææåæ°çå表å¯è§ï¼
- 管çåæå/æ°æ®åºæå¡å¨è¿è¡ç¯å¢/æ°æ®åºæå¡å¨è¿è¡éç½®ï¼
- æå³åæ°çè§£éå¯è§ï¼http://www.varlena.com/varlena/GeneralBits/Tid
- bits/annotated_conf_e.html å
- http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.htmlã
-
- 硬件çéæ©
- è®¡ç®æºç¡¬ä»¶å¯¹æ§è½çå½±å坿µè§
- http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde
- x.html å http://www.powerpostgresql.com/PerfList/ã
-
- 3.4)PostgreSQLéå¯ä»¥è·å¾ä»ä¹æ ·çè°è¯ç¹æ§ï¼
-
- PostgreSQL æå¾å¤ç±»ä¼¼ log_*
- çæå¡å¨éç½®åéå¯ç¨äºæ¥è¯¢çæå°åè¿ç¨ç»è®¡ï¼èè¿äºå·¥ä½å¯¹è°è¯åæ§è½æµè¯å¾æå¸
- ®å©ã
-
- 3.5) 为ä»ä¹å¨è¯å¾è¿æ¥æ¶æ¶å°âSorry, too many
- clientsï¼å·²æå¤ªå¤ç¨æ·è¿æ¥ï¼âæ¶æ¯ï¼
-
- è¿è¡¨ç¤ºä½ 已达å°ç¼ºç100个并ååå°è¿ç¨æ°çéå¶ï¼ä½ éè¦éè¿ä¿®æ¹postgres
- ql.confæä»¶ä¸çmax_connections弿¥
- å¢å postmasterçåå°å¹¶åå¤çæ°ï¼ä¿®æ¹åééæ°å¯å¨postmasterã
-
- 3.6)PostgreSQLçå级è¿ç¨æåªäºå容 ï¼
-
- PostgreSQL å¼åç»å¯¹æ¯æ¬¡å°çæ¬çå级主è¦åªåäºä¸äºBugä¿®æ£å·¥ä½ï¼å æ¤ä»
- 7.4.8 åçº§å° 7.4.9 ä¸éè¦ dump å restoreï¼ä»éè¦åæ
- ¢æ°æ®åºæå¡å¨ï¼å®è£æ´æ°åç软件åï¼ç¶åé坿å¡å¨å³å¯ã
-
- ææPostgreSQLçç¨æ·åºè¯¥å¨ææ¥è¿ï¼ä½ æä½¿ç¨çä¸»çæ¬ï¼çå°æ¹è¿çæ¬åå¸å°½å¿«åç
- º§ãå°½ç®¡æ¯æ¬¡å级å¯è½é½æä¸ç¹é£é©ï¼PostgreSQLçå°æ¹è¿çä»ä»æ¯è®¾è®¡ç¨æ¥ä
- ¿®æ
- £ä¸äºBugçï¼ä»£ç æ¹å¨è¾å°ï¼æä»¥é£é©è¿æ¯å¾å°çãPostgreSQL社åºè®¤ä¸ºä¸è¬æ
- åµä¸ä¸å级çé£é©è¿æ¯å¤äºå级çã
-
- ä¸»çæ¬çå级ï¼ä¾å¦ä» 7.3 å° 7.4ï¼é常ä¼ä¿®æ¹ç³»ç»è¡¨åæ°æ®è¡¨çå鍿 ¼å¼ã
- è¿äºæ¹åä¸è¬æ¯è¾å¤æï¼å æ¤æä»¬ä¸ç»´ææ°æ®æä»¶çååå¼å®¹æ§ãå æ¤ä»èçæ¬ä¸
- è¿è¡æ°æ®å¯¼åºï¼dumpï¼/ç¶å卿°çæ¬ä¸
- è¿è¡æ°æ®å¯¼å¥ï¼reloadï¼å¯¹ä¸»çæ¬çå级æ¯å¿é¡»çã
-
- 3.7)(使ç¨PostgreSQL)æéè¦ä½¿ç¨ä»ä¹è®¡ç®æºç¡¬ä»¶ ï¼
-
- ç±äºè®¡ç®æºç¡¬ä»¶å¤§å¤æ°æ¯å¼å®¹çï¼äººä»¬æ»æ¯å¾åäºç¸ä¿¡ææè®¡ç®æºç¡¬ä»¶è
- ´¨é乿¯ç¸åçãäºå®ä¸ä¸æ¯ï¼ ECC RAMï¼å¸¦å¥å¶æ ¡éªçååï¼ï¼SCSI
- ï¼ç¡¬çï¼åä¼è´¨çä¸»æ¿æ¯ä¸äºä¾¿å®è´§è¦æ´å å¯é ä¸å·ææ´å¥½çæ§è½ãPostgreSQL
- å ä¹å¯ä»¥è¿è¡å¨ä»»ä½ç¡¬ä»¶ä¸ï¼
- ä½å¦æå¯é æ§åæ§è½å¯¹ä½ çç³»ç»å¾éè¦ï¼ä½ å°±éè¦å¨é¢çç ç©¶ä¸ä¸ä½ ç硬件éç
- ½®äºã卿们çé®ä»¶å表ä¸ä¹æå³äº 硬件éç½®åæ§ä»·æ¯ç讨论ã
- _________________________________________________________________
-
-æä½é®é¢
-
- 4.1) å¦ä½åªéæ©ä¸ä¸ªæ¥è¯¢ç»æç头å è¡ï¼ææ¯éæºçä¸è¡ï¼
-
- å¦æä½ åªæ¯è¦æåå è¡æ°æ®ï¼å¹¶ä¸ä½ 卿§è¡æ¥è¯¢ä¸
- ç¥éç¡®åçè¡æ°ï¼ä½ å¯ä»¥ä½¿ç¨LIMITåè½ã 妿æä¸ä¸ªç´¢å¼ä¸ ORDER BYä¸
- çæ¡ä»¶å¹éï¼PostgreSQL å¯è½å°±åªå¤çè¦æ±çå¤´å æ¡è®°å½ï¼
- ï¼å¦åå°å¯¹æ´ä¸ªæ¥è¯¢è¿è¡å¤çç´å°çæéè¦çè¡ï¼ã妿卿§è¡æ¥è¯¢åè½æ¶ä¸ç¥éç¡®å
- çè®°å½æ°ï¼ å¯ä½¿ç¨æ¸¸æ (cursor)åFETCHåè½ã
-
- å¯ä½¿ç¨ä»¥ä¸æ¹æ³æåä¸è¡éæºè®°å½çï¼
- SELECT cols
- FROM tab
- ORDER BY random()
- LIMIT 1 ;
-
- 4.2)
- å¦ä½æ¥ç表ãç´¢å¼ãæ°æ®åºä»¥åç¨æ·çå®ä¹ï¼å¦ä½æ¥çpsqléç¨å°çæ¥è¯¢æä»¤å¹¶æ¾ç¤ºå®ä»¬
- ï¼
-
- å¨psqlä¸ä½¿ç¨ \dt å½ä»¤æ¥æ¾ç¤ºæ°æ®è¡¨çå®ä¹ï¼è¦äºè§£psqlä¸
- ç宿´å½ä»¤å表å¯ä½¿ç¨\? ï¼å¦å¤ï¼ä½ ä¹å¯ä»¥é读 psql çæºä»£ç
- æä»¶pgsql/src/bin/psql/describe.cï¼å®åæ¬ä¸ºçæpsqlåææ å½ä»¤çè¾åºçææ SQL
- å½ä»¤ãä½ è¿å¯ä»¥å¸¦ -E é项å¯å¨ psqlï¼ è¿æ ·å®å°æå°åºä½ å¨psqlä¸
- æç»åºçå½ä»¤æ§è¡æ¶çåé¨å®é使ç¨çSQLæ¥è¯¢è¯
- å¥ãPostgreSQL乿ä¾äºä¸ä¸ªå¼å®¹SQLçINFORMATION SCHEMAæ¥å£ï¼
- ä½ å¯ä»¥ä»è¿éè·åå³äºæ°æ®åºçä¿¡æ¯ã
-
- å¨ç³»ç»ä¸ä¹æä¸äºä»¥pg_ æå¤´çç³»ç»è¡¨ä¹æè¿°äºè¡¨çå®ä¹ã
-
- ä½¿ç¨ psql -l æä»¤å¯ä»¥ååºææçæ°æ®åºã
-
- ä¹å¯ä»¥æµè§ä¸ä¸
- pgsql/src/tutorial/syscat.sourceæä»¶ï¼å®å举äºå¾å¤å¯ä»æ°æ®åºç³»ç»è¡¨ä¸
- è·åä¿¡æ¯çSELECTè¯æ³ã
-
- 4.3) å¦ä½æ´æ¹ä¸ä¸ªåæ®µçæ°æ®ç±»åï¼
-
- å¨8.0çæ¬éæ´æ¹ä¸ä¸ªåæ®µçæ°æ®ç±»åå¾å®¹æï¼å¯ä½¿ç¨ ALTER TABLE ALTER
- COLUMN TYPE ã
-
- å¨ä»¥åççæ¬ä¸ï¼å¯ä»¥è¿æ ·åï¼
- 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;
-
- ä½ ç¶åå¯ä»¥ä½¿ç¨VACUUM FULL tab æä»¤æ¥ä½¿ç³»ç»æ¶åæ ææ°æ®æå ç¨ç空é´ã
-
- 4.4) åæ¡è®°å½ï¼å个表ï¼åä¸ªæ°æ®åºçæå¤§éå¶æ¯å¤å°ï¼
-
- ä¸é¢æ¯ä¸äºéå¶ï¼
-
- åä¸ªæ°æ®åºæå¤§å°ºå¯¸ï¼ æ éå¶ï¼å·²å卿 32TB çæ°æ®åºï¼
- å个表çæå¤§å°ºå¯¸ï¼ 32 TB
- ä¸è¡è®°å½çæå¤§å°ºå¯¸ï¼ 1.6 TB
- ä¸ä¸ªå段çæå¤§å°ºå¯¸? 1 GB
- ä¸ä¸ªè¡¨éæå¤§è¡æ°ï¼ æ éå¶
- ä¸ä¸ªè¡¨éæå¤§åæ°ï¼ 250-1600 ï¼ä¸åç±»åæå³ï¼
- ä¸ä¸ªè¡¨éçæå¤§ç´¢å¼æ°éï¼ æ éå¶
-
- å½ç¶ï¼å®é䏿²¡æçæ£çæ éå¶ï¼è¿æ¯è¦åå¯ç¨ç£ç空é´ãå¯ç¨åå/交æ¢åºçå¶çº¦ã
- äºå®ä¸ï¼å½ä¸è¿°è¿äºæ°å¼åå¾å¼å¸¸å°å¤§æ¶ï¼ç³»ç»æ§è½ä¹ä¼åå¾å¤§å½±åã
-
- å表çæå¤§å¤§å° 32 TB
- ä¸éè¦æä½ç³»ç»å¯¹å个æä»¶ä¹éè¿ä¹å¤§çæ¯æã大表ç¨å¤ä¸ª 1 GB çæä»¶å
- å¨ï¼å æ¤æä»¶ç³»ç»å¤§å°çéå¶æ¯ä¸éè¦çã
-
- å¦æç¼ºççå大å°å¢é¿å° 32K ï¼æå¤§çå表大å°åæå¤§åæ°è¿å¯ä»¥å¢å å°ååã
-
- æä¸ä¸ªéå¶å°±æ¯ä¸è½å¯¹å¤§å°å¤äº2000å
- èçåå建索å¼ã幸è¿å°æ¯è¿æ ·çç´¢å¼å¾å°ç¨å°ãéè¿å¯¹å¤å
- èåçå容è¿è¡MD5åç¨è¿ç®ç»æè¿è¡å½æ°ç´¢å¼å¯å¯¹åçå¯ä¸æ§å¾å°ä¿è¯ï¼
- å¹¶ä¸å¨ææ£ç´¢å许对åä¸çåè¯è¿è¡æç´¢ã
-
- 4.5) åå¨ä¸ä¸ªå¸åçææ¬æä»¶éçæ°æ®éè¦å¤å°ç£ç空é´ï¼
-
- ä¸ä¸ª Postgres æ°æ®åºï¼å
- å¨ä¸ä¸ªææ¬æä»¶ï¼æå ç¨çç©ºé´æå¤å¯è½éè¦ç¸å½äºè¿ä¸ªææ¬æä»¶èªèº«å¤§å°5åçç£
- ç空é´ã
-
- ä¾å¦ï¼å设æä¸ä¸ª 100,000 è¡çæä»¶ï¼æ¯è¡æä¸ä¸ªæ´æ°åä¸ä¸ªææ¬æè¿°ã
- åè®¾ææ¬ä¸²çå¹³åé¿åº¦ä¸º20åèãææ¬æä»¶å ç¨ 2.8 MBãå
- æ¾è¿äºæ°æ®çPostgreSQLæ°æ®åºæä»¶å¤§çº¦æ¯ 6.4 MB:
- 28 åè: æ¯è¡ç头ï¼å¤§çº¦å¼ï¼
- 24 åè: ä¸ä¸ªæ´æ°ååæ®µåä¸ä¸ªææ¬ååæ®µ
- + 4 åè: 页é¢åæååç»çæé
- ----------------------------------------
- 56 åèæ¯è¡
-
- PostgreSQL æ°æ®é¡µç大尿¯ 8192 åè (8 KB)ï¼åï¼
-
- 8192 åèæ¯é¡µ
- ------------------- = 146 è¡/æ°æ®é¡µï¼åä¸åæ´ï¼
- 56 åèæ¯è¡
-
- 100000 æ°æ®è¡
- -------------------- = 685 æ°æ®é¡µï¼åä¸åæ´ï¼
- 146 è¡/æ°æ®é¡µ
-
- 685 æ°æ®é¡µ * 8192 åè/页 = 5,611,520 åèï¼5.6 MBï¼
-
- ç´¢å¼ä¸éè¦è¿ä¹å¤çé¢å¤æ¶èï¼ä½ä¹ç¡®å®åæ¬è¢«ç´¢å¼çæ°æ®ï¼å æ
- ¤å®ä»¬ä¹å¯è½å¾å¤§ã
-
- 空å¼NULLåæ¾å¨ä½å¾ä¸ï¼å æ¤å ç¨å¾å°ç空é´ã
-
- 4.6) 为ä»ä¹æçæ¥è¯¢å¾æ¢ï¼ä¸ºä»ä¹è¿äºæ¥è¯¢æ²¡æå©ç¨ç´¢å¼ï¼
-
- å¹¶éæ¯ä¸ªæ¥è¯¢é½ä¼èªå¨ä½¿ç¨ç´¢å¼ãåªæå¨è¡¨ç大å°è¶è¿ä¸ä¸ªæå°å¼ï¼å¹¶ä¸æ¥
- 询åªä¼éä¸è¡¨ä¸è¾å°æ¯ä¾çè®°å½æ¶æä¼éç¨ç´¢å¼ã
- è¿æ¯å ä¸ºç´¢å¼æ«æå¼èµ·çéå³ç£çååå¯è½æ¯ç´æ¥å°è¯»å表ï¼é¡ºåºæ«æï¼æ´æ¢ã
-
- 为äºå¤æ
- æ¯å¦ä½¿ç¨ç´¢å¼ï¼PostgreSQLå¿é¡»è·å¾æå³è¡¨çç»è®¡å¼ãè¿äºç»è®¡å¼å¯ä»¥ä½¿ç
- ¨ VACUUM ANALYZEï¼æ ANALYZE è·å¾ã 使ç¨ç»è®¡å¼ï¼ä¼åå¨ç¥é表ä¸
- æå¤å°è¡ï¼å°±è½å¤æ´å¥½å°å¤ææ¯å¦å©ç¨ç´¢å¼ã
- ç»è®¡å¼å¯¹ç¡®å®ä¼åçè¿æ¥é¡ºåºåè¿æ¥æ¹æ³ä¹å¾æç¨ãå¨è¡¨çå容åçååæ¶ï¼åºå®æè¿
- è¡ç»è®¡å¼çæ´æ°æ¶éã
-
- ç´¢å¼é常ä¸ç¨äº ORDER BY
- ææ§è¡è¿æ¥ã对ä¸ä¸ªå¤§è¡¨ç䏿¬¡é¡ºåºæ«æåå䏿¬¡æåºé常æ¯ç´¢å¼æ«æè¦å¿«ãç¶
- èï¼å¦æå° LIMIT å ORDER BY
- ç»åå¨ä¸èµ·ä½¿ç¨çè¯ï¼é常å°ä¼ä½¿ç¨ç´¢å¼ï¼å ä¸ºè¿æ¶ä»è¿å表ä¸
- çä¸å°é¨åè®°å½ã
-
- å¦æä½ ç¡®ä¿¡PostgreSQLçä¼åå¨ä½¿ç¨é¡ºåºæ«ææ¯ä¸æ£ç¡®çï¼ä½ å¯ä»¥ä½¿ç¨SET
- enable_seqscan TO 'off'æä»¤æ¥å³éé¡ºåºæ«æï¼
- ç¶å忬¡è¿è¡æ¥è¯¢ï¼ä½ å°±å¯ä»¥çåºä½¿ç¨ä¸ä¸ªç´¢å¼æ«ææ¯å¦ç¡®å®è¦å¿«ä¸äºã
-
- å½ä½¿ç¨éé符æä½ï¼ä¾å¦ LIKE æ ~ æ¶ï¼ç´¢å¼åªè½å¨ç¹å®çæåµä¸ä½¿ç¨ï¼
- * å符串çå¼å§é¨åå¿é¡»æ¯æ®éå符串ï¼ä¹å°±æ¯è¯´ï¼
- + LIKE 模å¼ä¸è½ä»¥ % æå¤´ã
- + ~ ï¼æ£å表达å¼ï¼æ¨¡å¼å¿é¡»ä»¥ ^ æå¤´ã
- * å符串ä¸è½ä»¥å¹éå¤ä¸ªåç¬¦çæ¨¡å¼ç±»æå¤´ï¼ä¾å¦ [a-e]ã
- * 大å°åæ å³çæ¥æ¾ï¼å¦ ILIKE å ~* çä¸ä½¿ç¨ç´¢å¼ï¼ä½å¯ä»¥ç¨ 4.8
- èæè¿°ç表达å¼ç´¢å¼ã
- * å¨å initdb æ¶å¿é¡»éç¨ç¼ºççæ¬å°è®¾ç½® C
- localeï¼å 为系ç»ä¸å¯è½ç¥éå¨éC localeæåµæ¶ä¸ä¸ä¸ªæå¤§å符æ¯ä»ä¹ã
- å¨è¿ç§æåµä¸ï¼ä½ å¯ä»¥å建ä¸ä¸ªç¹æ®çtext_pattern_opsç´¢å¼æ¥ç¨äºLIKE
- çç´¢å¼ã
-
- å¨8.0ä¹åççæ¬ä¸
- ï¼é¤éè¦æ¥è¯¢çæ°æ®ç±»ååç´¢å¼çæ°æ®ç±»åç¸å¹éï¼å¦åç´¢å¼ç»å¸¸æ¯æªè¢«ç¨å°ï¼ç
- ¹å«æ¯å¯¹int2,int8åæ°å¼åçç´¢å¼ã
-
- 4.7) æå¦ä½æè½çå°æ¥è¯¢ä¼å卿¯ææ ·è¯ä¼°å¤çæçæ¥è¯¢ï¼
-
- åè EXPLAIN æå页ã
-
- 4.8) æææ ·åæ£åè¡¨è¾¾å¼æç´¢å大å°åæ å³çæ
- £åè¡¨è¾¾å¼æ¥æ¾ï¼ææ ·å©ç¨ç´¢å¼è¿è¡å¤§å°åæ 峿¥æ¾ï¼
-
- æä½ç¬¦ ~ å¤çæ£å表达å¼å¹éï¼è ~* å¤ç大å°åæ å³çæ
- £å表达å¼å¹éã大å°åæ å³ç LIKE åç§æä¸º ILIKEã
-
- 大å°åæ å³çç弿¯è¾é常ååï¼
- SELECT *
- FROM tab
- WHERE lower(col) = 'abc';
-
- è¿æ ·å°ä¸ä¼ä½¿ç¨æ åçç´¢å¼ã使¯å¯ä»¥å建ä¸ä¸ªå¨è¿ç§æåµä¸ä½¿ç¨ç表达å¼ç
- ´¢å¼:
- CREATE INDEX tabindex ON tab (lower(col));
-
- 妿ä¸è¿°ç´¢å¼å¨å建æ¶å å¥UNIQUE约æï¼è½ç¶ç´¢å¼å段èªèº«å容å¯ä»¥å
- å¨å¤§å°åä¸éçå容ï¼ä½å¦ææUNIQUE约æåï¼è¿äºå容ä¸è½ä»ä»æ¯å¤§å°åä¸åï¼å¦åä
- ¼é æå²çªï¼ã为äºä¿è¯ä¸åçè¿ç§æåµï¼å¯ä»¥ä½¿ç¨CHECKçº¦ææ¡ä»¶ææ¯è§¦åå¨å¨å½
- 奿¶è¿è¡éå¶ã
-
- 4.9) å¨ä¸ä¸ªæ¥è¯¢éï¼æææ ·æ£æµä¸ä¸ªå段æ¯å¦ä¸º NULL ï¼æå¦ä½æè½åç¡®æåºèä¸è®ºæå
- 段æ¯å¦å« NULL å¼ï¼
-
- ç¨ IS NULL å IS NOT NULL æµè¯è¿ä¸ªå段ï¼å·ä½æ¹æ³å¦ä¸ï¼
- SELECT *
- FROM tab
- WHERE col IS NULL;
-
- 为äºè½å¯¹å« NULLåæ®µæåºï¼å¯å¨ ORDER BY æ¡ä»¶ä¸ä½¿ç¨ IS NULLå IS NOT
- NULL ä¿®é¥°ç¬¦ï¼æ¡ä»¶ä¸ºç true å°æ¯æ¡ä»¶ä¸ºåfalse æå¨åé¢ï¼ä¸é¢çä¾å
- å°±ä¼å°å« NULL çè®°å½æå¨ç»æçä¸é¢é¨åï¼
- SELECT *
- FROM tab
- ORDER BY (col IS NOT NULL)
-
- 4.10) åç§å符类åä¹é´æä»ä¹ä¸åï¼
-
- ç±»å åé¨åç§° 说æ
- VARCHAR(n) varchar æå®äºæå¤§é¿åº¦ï¼åé¿å
- 符串ï¼ä¸è¶³å®ä¹é¿åº¦çé¨åä¸è¡¥é½
- CHAR(n) bpchar å®é¿å符串ï¼å®éæ°æ®ä¸è¶³å®ä¹é¿åº¦æ¶ï¼ä»¥ç©ºæ ¼è¡¥é½
- TEXT text 没æç¹å«çä¸ééå¶ï¼ä»åè¡çæå¤§é¿åº¦éå¶ï¼
- BYTEA bytea åé¿åèåºåï¼ä½¿ç¨NULLåç¬¦ä¹æ¯å许çï¼
- "char" char å个å符
-
- å¨ç³»ç»è¡¨åå¨ä¸äºé误信æ¯éä½ å°çå°åé¨åç§°ã
-
- ä¸é¢æåçååç§ç±»åæ¯"varlena"ï¼åé¿ï¼ç±»åï¼ä¹å°±æ¯è¯´ï¼å¼å¤´çå个å
- èæ¯é¿åº¦ï¼åé¢ææ¯æ°æ®ï¼ã äºæ¯å®éå ç¨çç©ºé´æ¯å£°æç大å°è¦å¤ä¸äºã
- ç¶èè¿äºç±»åå¦å®ä¹å¾é¿æ¶é½å¯ä»¥è¢«å缩åå¨ï¼å æ
- ¤ç£ç空é´ä¹å¯è½æ¯é¢æ³çè¦å°ã
-
- VARCHAR(n) å¨åå¨éå¶äºæå¤§é¿åº¦çåé¿åç¬¦ä¸²æ¯æå¥½çã TEXT éç¨äºå
- 卿大å¯è¾¾ 1Gå·¦å³ä½æªå®ä¹éå¶é¿åº¦çå符串ã
-
- CHAR(n) æéåäºåå¨é¿åº¦ç¸åçå符串ã CHAR(n)伿 ¹æ®æç»å®çå
- 段é¿åº¦ä»¥ç©ºæ ¼è¡¥è¶³ï¼ä¸è¶³çåæ®µå容ï¼ï¼ è VARCHAR(n) åªå
- 卿ç»å®çæ°æ®å容ã BYTEA ç¨äºåå¨äºè¿å¶æ°æ®ï¼å°¤å¶æ¯åå« NULL å
- èçå¼ãè¿äºç±»åå·æå·®ä¸å¤çæ§è½ã
-
- 4.11.1) æææ ·å建ä¸ä¸ªåºåå·ææ¯èªå¨éå¢çåæ®µï¼
-
- PostgreSQL æ¯æ SERIAL æ°æ®ç±»åãï¼å
- 段å®ä¹ä¸ºSERIALåï¼å°èªå¨å建ä¸ä¸ªåºåçæå¨ï¼ä¾å¦ï¼
- CREATE TABLE person (
- id SERIAL,
- name TEXT
- );
-
- ä¼èªå¨è½¬æ¢ä¸ºä»¥ä¸SQLè¯å¥ï¼
- CREATE SEQUENCE person_id_seq;
- CREATE TABLE person (
- id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
- name TEXT
- );
-
- åè create_sequence æå页è·åå³äºåºåçæå¨çæ´å¤ä¿¡æ¯ã
-
- 4.11.2) æå¦ä½è·å¾ä¸ä¸ªæå¥çåºåå·çå¼ï¼
-
- ä¸ç§æ¹æ³æ¯å¨æå¥ä¹ååç¨å½æ° nextval() ä»åºåå¯¹è±¡éæ£ç´¢åºä¸ä¸ä¸ª SERIAL
- å¼ï¼ç¶ååç¨æ¤å¼ç²¾ç¡®å°æå¥ãä½¿ç¨ 4.11.1 éçä¾è¡¨ï¼å¯ç¨ä¼ªç è¿æ ·æè¿°ï¼
- new_id = execute("SELECT nextval('person_id_seq')");
- execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-
- è¿æ ·è¿è½å¨å¶ä»æ¥è¯¢ä¸ä½¿ç¨åæ¾å¨ new_id éçæ°å¼ï¼ä¾å¦ï¼ä½ä¸ºåç§ person
- 表çå¤é®ï¼ã 注æèªå¨å建ç SEQUENCE 对象çåç§°å°ä¼æ¯
- <table>_<serialcolumn>_seqï¼ è¿é table å serialcolumn
- å嫿¯ä½ ç表çåç§°åä½ ç SERIAL åæ®µçåç§°ã
-
- 类似çï¼å¨ SERIAL 对象缺çæå¥åä½ å¯ä»¥ç¨å½æ° currval() æ£ç´¢åèµå¼ç
- SERIAL å¼ï¼ä¾å¦ï¼
- execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
- new_id = execute("SELECT currval('person_id_seq')");
-
- 4.11.3) åæ¶ä½¿ç¨ currval() ä¼å¯¼è´åå¶ä»ç¨æ·çå²çªæåµåï¼
-
- ä¸ä¼ãcurrval() è¿åçæ¯ä½ æ¬æ¬¡ä¼è¯è¿ç¨æèµçå¼è䏿¯ææç¨æ·çå½åå¼ã
-
- 4.11.4) 为ä»ä¹ä¸å¨äºå¡å¼å¸¸ä¸æ¢åéç¨åºåå·å¢ï¼ä¸ºä»ä¹å¨åºåå·å段çåå¼ä¸åå¨é´æ
- å¢ï¼
-
- ä¸ºäºæé«å¹¶åæ§ï¼åºåå·å¨éè¦çæ¶åèµäºæ
- £å¨è¿è¡çäºå¡ï¼å¹¶ä¸å¨äºå¡ç»æä¹åä¸è¿è¡éå®ï¼ è¿å°±ä¼å¯¼è´å¼å¸¸ä¸
- æ¢çäºå¡åï¼åºåå·ä¼åºç°é´éã
-
- 4.12) ä»ä¹æ¯ OID ï¼ä»ä¹æ¯ CTID ï¼
-
- PostgreSQL
- éåå»ºçæ¯ä¸è¡è®°å½é½ä¼è·å¾ä¸ä¸ªå¯ä¸çOIDï¼é¤éå¨å建表æ¶ä½¿ç¨WITHOUT
- OIDSé项ã OIDå建æ¶ä¼èªå¨çæä¸ä¸ª4åèçæ´æ°ï¼ææ OID
- å¨ç¸åºPostgreSQLæå¡å¨ä¸åæ¯å¯ä¸çã ç¶èï¼å®å¨è¶è¿40亿æ¶å°æº¢åºï¼ OIDæ
- ¤åä¼åºç°éå¤ãPostgreSQL å¨å®çåé¨ç³»ç»è¡¨éä½¿ç¨ OID å¨è¡¨ä¹é´å»ºç«èç³»ã
-
- å¨ç¨æ·çæ°æ®è¡¨ä¸ï¼æå¥½æ¯ä½¿ç¨SERIAlæ¥ä»£æ¿OID
- å 为SERIALåªè¦ä¿è¯å¨å个表ä¸
- çæ°å¼æ¯å¯ä¸çå°±å¯ä»¥äºï¼è¿æ ·å®æº¢åºçå¯è½æ§å°±é常å°äºï¼
- SERIAL8å¯ç¨æ¥ä¿å8åèçåºåæ°å¼ã
-
- CTID ç¨äºæ è¯å¸¦çæ°æ®åï¼å°åï¼åï¼ååï¼åç§»çç¹å®çç©çè¡ã CTID
- å¨è®°å½è¢«æ´æ¹æéè½½ååçæ¹åãç´¢å¼æ°æ®ä½¿ç¨å®ä»¬æåç©çè¡ã
-
- 4.13) 为ä»ä¹ææ¶å°é误信æ¯âERROR: Memory exhausted in AllocSetAlloc()âï¼
-
- è¿å¾å¯è½æ¯ç³»ç»çèæååç¨åäºï¼æèåæ ¸å¯¹æäºèµæºæè¾ä½çéå¶å¼ãå¨å¯å¨
- postmaster ä¹åè¯è¯ä¸é¢çå½ä»¤ï¼
- ulimit -d 262144
- limit datasize 256m
-
- åå³äºä½ ç¨ç
- shellï¼ä¸é¢å½ä»¤åªæä¸æ¡è½æåï¼ä½æ¯å®å°æä½ çè¿ç¨æ°æ®æ®µéå¶è®¾å¾æ¯è¾é«ï¼
- å èä¹è®¸è½è®©æ¥è¯¢å®æãè¿æ¡å½ä»¤åºç¨äºå½åè¿ç¨ï¼ä»¥åææå¨è¿æ¡å½ä»¤è¿è¡ååå
- »ºçåè¿ç¨ã
- å¦æä½ æ¯å¨è¿è¡SQL客æ·ç«¯æ¶å 为åå°è¿åäºå¤ªå¤çæ°æ®èåºç°é®é¢ï¼è¯·å¨è¿è¡
- 客æ·ç«¯ä¹åæ§è¡ä¸è¿°å½ä»¤ã
-
- 4.14) æå¦ä½æè½ç¥éæè¿è¡çPostgreSQLççæ¬ï¼
-
- ä» psql éï¼è¾å¥ SELECT version();æä»¤ã
-
- 4.15) æå¦ä½å建ä¸ä¸ªç¼ºç弿¯å½åæ¶é´çåæ®µï¼
-
- ä½¿ç¨ CURRENT_TIMESTAMPï¼
- CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-
- 4.16) æææ ·è¿è¡ outer join ï¼å¤è¿æ¥ï¼ï¼
-
- PostgreSQL éç¨æ åç SQL è¯æ³æ¯æå¤è¿æ¥ãè¿éæ¯ä¸¤ä¸ªä¾åï¼
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-
- ææ¯
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 USING (col);
-
- è¿ä¸¤ä¸ªçä»·çæ¥è¯¢å¨ t1.col å t2.col ä¸åè¿æ¥ï¼å¹¶ä¸è¿å t1 ä¸
- æææªè¿æ¥çè¡ï¼é£äºå¨ t2 䏿²¡æå¹éçè¡ï¼ã å³[å¤]è¿æ¥ï¼RIGHT OUTER
- JOINï¼å°è¿å t2 䏿ªè¿æ¥çè¡ã å®å¨å¤è¿æ¥ï¼FULL OUTER JOINï¼å°è¿å t1 å t2
- 䏿ªè¿æ¥çè¡ã å³é®å OUTER å¨å·¦[å¤]è¿æ¥ãå³[å¤]è¿æ¥åå®å¨[å¤]è¿æ¥ä¸
- æ¯å¯éçï¼æ®éè¿æ¥è¢«ç§°ä¸ºåè¿æ¥ï¼INNER JOINï¼ã
-
- 4.17) å¦ä½ä½¿ç¨æ¶åå¤ä¸ªæ°æ®åºçæ¥è¯¢ï¼
-
- 没æåæ³æ¥è¯¢å½åæ°æ®åºä¹å¤çæ°æ®åºã
- å 为PostgreSQLè¦å è½½ä¸æ°æ®åºç¸å³çç³»ç»ç®å½ï¼ç³»ç»è¡¨ï¼ï¼å æ
- ¤è·¨æ°æ®åºçæ¥è¯¢å¦ä½æ§è¡æ¯ä¸å®çã
-
- éå å¢å¼æ¨¡åcontrib/dblinkå许éç¨å½æ°è°ç¨å®ç°è·¨åºæ¥è¯¢ãå½ç¶ç¨æ·ä¹å¯ä»¥
- åæ¶è¿æ¥å°ä¸åçæ°æ®åºæ§è¡æ¥è¯¢ç¶åå¨å®¢æ·ç«¯åå¹¶ç»æã
-
- 4.18) å¦ä½è®©å½æ°è¿åå¤è¡æå¤åæ°æ®ï¼
-
- å¨å½æ°ä¸è¿åæ°æ®è®°å½éçåè½æ¯å¾å®¹æä½¿ç¨çï¼è¯¦æåè§ï¼
- http://techdocs.postgresql.org/guides/SetReturningFunctions
-
- 4.19) 为ä»ä¹æå¨ä½¿ç¨PL/PgSQL彿°åå临æ¶è¡¨æ¶ä¼æ¶å°é误信æ¯ârelation with
- OID ##### does not existâï¼
-
- PL/PgSQLä¼ç¼å彿°çèæ¬å容ï¼ç±æ¤å¸¦æ¥çä¸ä¸ªä¸å¥½çå¯ä½ç¨æ¯è¥ä¸ä¸ª
- PL/PgSQL
- 彿°è®¿é®äºä¸ä¸ªä¸´æ¶è¡¨ï¼ç¶å该表被å é¤å¹¶é建äºï¼å忬¡è°ç¨è¯¥å½æ°å
- °å¤±è´¥ï¼ å 为ç¼åç彿°å容ä»ç¶æåæ§ç临æ¶è¡¨ãè§£å³çæ¹æ³æ¯å¨ PL/PgSQL
- ä¸ç¨EXECUTE
- 对临æ¶è¡¨è¿è¡è®¿é®ãè¿æ ·ä¼ä¿è¯æ¥è¯¢å¨æ§è¡åæ»ä¼è¢«éæ°è§£æã
-
- 4.20) ç®åæåªäºæ°æ®å¤å¶æ¹æ¡å¯ç¨ï¼
-
- âå¤å¶âåªæ¯ä¸ä¸ªæ¯è¯ï¼æå¥½å ç§å¤å¶ææ¯å¯ç¨ï¼æ¯ç§é½æä¼ç¹å缺ç¹ï¼
-
- 主/ä»å¤å¶æ¹å¼æ¯å许ä¸ä¸ªä¸»æå¡å¨æ¥å读/åçç³è¯·ï¼èå¤ä¸ªä»æå¡å¨åªè½æ¥åè
- ¯»/SELECTæ¥è¯¢çç³è¯·ï¼ ç®åææµè¡ä¸åè´¹ç主/ä»PostgreSQLå¤å¶æ¹æ¡æ¯
- Slony-I ã
-
- å¤ä¸ªä¸»æå¡å¨çå¤å¶æ¹å¼å许å°è¯»/åçç³è¯·åéç»å¤å°çè®¡ç®æºï¼è¿ç§æ¹å¼ç±äºé
- è¦å¨å¤å°æå¡å¨ä¹é´åæ¥æ°æ®åå¨
- å¯è½ä¼å¸¦æ¥è¾ä¸¥éçæ§è½æå¤±ï¼Pgclusteræ¯ç®åè¿ç§æ¹æ¡ ä¸
- æå¥½çï¼èä¸è¿å¯ä»¥åè´¹ä¸è½½ã
-
- 乿ä¸äºåä¸éä»è´¹ååºäºç¡¬ä»¶çæ°æ®å¤å¶æ¹æ¡ï¼æ¯æä¸è¿°åç§å¤å¶æ¨¡åã
-
- 4.21) ä¸ºä½æ¥è¯¢ç»ææ¾ç¤ºç表åæååä¸æçæ¥è¯¢è¯å¥ä¸çä¸åï¼ä¸ºä½å¤§åç¶æä¸è½ä¿çï¼
-
- æå¸¸è§çåå æ¯å¨å建表æ¶å¯¹è¡¨åææ¯åå使ç¨äºåå¼å·ââï¼å½ä½¿ç¨äºåå¼å·åï¼è¡
- ¨åæååï¼ç§°ä¸ºæ è¯ç¬¦ï¼å卿¶æ¯åºå 大å°åçï¼
- è¿æè°çä½ å¨æ¥è¯¢æ¶è¡¨åæååä¹åºä½¿ç¨åå¼å·ï¼ä¸äºå·¥å·è½¯ä»¶ï¼åpgAdminä¼å¨
- ååºå建表çæä»¤æ¶èªå¨å°å¨æ¯ä¸ªæ è¯ç¬¦ä¸å åå¼å·ã å æ
- ¤ï¼ä¸ºäºæ è¯ç¬¦çç»ä¸ï¼ä½ åºè¯¥ï¼
- * å¨å建表æ¶é¿åå°æ è¯ç¬¦ä½¿ç¨åå¼å·å¼èµ·æ¥ã
- * 卿 è¯ç¬¦ä¸åªä½¿ç¨å°å忝ã
- * ï¼ä¸ºäºä¸å·²åå¨çæ è¯ç¬¦ç¸åï¼å¨æ¥è¯¢ä¸ä½¿ç¨åå¼å·å°æ è¯ç¬¦å¼èµ·æ¥ã
+++ /dev/null
-
- PostgreSQL 常è¦åé¡ï¼FAQï¼
-
- æè¿æ´æ°ï¼2007 å¹´ 2 æ 8 æ¥ ææäº 22:43:13 EST
- 䏿çæè¿æ´æ°ï¼2007 å¹´ 2 æ 12 æ¥ ææä¸ 12:00:04 CST
-
- ç¶åç¶è·äººå¡ï¼Bruce Momjian (pgman@candle.pha.pa.us)
- æ£é«ä¸æçç¶è·äººå¡ï¼éæç(ChaoYi, Kuo)ï¼kuo.chaoyi@gmail.comï¼
-
- æ¬ææªçææ°çæ¬å¯ä»¥å¨
- http://www.postgresql.org/files/documentation/faqs/FAQ.html æ¥çã
-
- è使¥ç³»çµ±å¹³å°ç¸éçåé¡å¯å¨ http://www.postgresql.org/docs/faq/
- 裡æ¾å°çæ¡ã
- _________________________________________________________________
-
-常è¦åé¡
-
- 1.1)PostgreSQL æ¯ä»éº¼ï¼è©²æéº¼ç¼é³ï¼
- 1.2)誰æ§å¶å管çPostgreSQL ï¼
- 1.3)PostgreSQLççæ¬æ¯ä»éº¼ï¼
- 1.4)PostgreSQLå¯ä»¥éè¡å¨åªäºä½æ¥ç³»çµ±å¹³å°ä¸ï¼
- 1.5)æå¾åªè£¡è½å¾å°PostgreSQLï¼
- 1.6)ææ°çç PostgreSQL æ¯ä»éº¼ï¼
- 1.7)æå¾åªè£¡è½å¾å°å° PostgreSQL çæ¯æï¼
- 1.8)æå¦ä½æäº¤ä¸å BUG å ±åï¼
- 1.9)æå¦ä½ç解已ç¥ç BUG ææ«ç¼ºçåè½ï¼
- 1.10)è½å¤ ç²åçææ°ææªæåªäºï¼
- 1.11)ææè©²ææ¨£å¸ç¿ SQL ï¼
- 1.12)å¦ä½æäº¤è£ä¸ææ¯å å¥éç¼éä¼ï¼
- 1.13)PostgreSQL åå¶ä»è³æåº«ç³»çµ±æ¯èµ·ä¾å¦ä½ï¼
- 1.14)PostgreSQL å¯ä»¥èçæè¿ååå家夿å¶çè®ååï¼
-
-ç¨æ¶å®¢æ¶ç«¯åé¡
-
- 2.1)æåå¯ä»¥ç¨ä»éº¼èªè¨å PostgreSQL é²è¡æºéï¼
- 2.2)æä»éº¼å·¥å·å¯ä»¥æ PostgreSQL ç¨æ¼ Web é é¢ï¼
- 2.3)PostgreSQL ææåå½¢ç¨æ¶çé¢(GUI)åï¼
-
-系統管çåé¡
-
- 3.1)æææ¨£æè½æ PostgreSQL è£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼
- 3.2)æå¦ä½æ§å¶ä¾èªå¶ä»é»è¦ç飿¥ï¼
- 3.3)æææ¨£èª¿æ´è³æåº«ä¼ºæå¨ä»¥ç²å¾æ´å¥½çæ§è½ï¼
- 3.4)PostgreSQL 裡å¯ä»¥ç²å¾ä»éº¼æ¨£çèª¿è©¦ç¹æ§ï¼
- 3.5)çºä»éº¼å¨è©¦å飿¥ç»éææ¶å°ãSorry, too many clientsã è¨æ¯ï¼
- 3.6)PostgreSQL çåç´éç¨æåªäºå§å®¹ï¼
- 3.7)(ä½¿ç¨ PostgreSQL )æéè¦ä½¿ç¨ä»éº¼é»è¦ç¡¬é«ï¼
-
-æä½åé¡
-
- 4.1) å¦ä½åªé¸æä¸åæ¥è©¢çµæçé å¹¾è¡ï¼ææ¯é¨æ©çä¸è¡ï¼
- 4.2) å¦ä½æ¥ç表ãç´¢å¼ãè³æåº«ä»¥åç¨æ¶çå®ç¾©ï¼å¦ä½æ¥ç psql
- 裡ç¨å°çæ¥è©¢æä»¤ä¸¦é¡¯ç¤ºå®åï¼
- 4.3) å¦ä½æ´æ¹ä¸åæ¬ä½çè³æé¡åï¼
- 4.4) å®çè¨éï¼å®ä¸è¡¨ï¼ä¸åè³æåº«çæå¤§éå¶æ¯å¤å°ï¼
- 4.5) åå²ä¸åå¸åçææ¬æä»¶è£¡çè³æéè¦å¤å°ç£ç¢ç©ºéï¼
- 4.6) çºä»éº¼æçæ¥è©¢å¾æ¢ï¼çºä»éº¼éäºæ¥è©¢æ²æå©ç¨ç´¢å¼ï¼
- 4.7) æå¦ä½æè½çå°æ¥è©¢åªå卿¯ææ¨£è©ä¼°èçæçæ¥è©¢çï¼
- 4.8) æææ¨£åæ£å表éå¼æç´¢å大å°å¯«ç¡éçæ
- £å表é弿¥æ¾ï¼ææ¨£å©ç¨ç´¢å¼é²è¡å¤§å°å¯«ç¡éæ¥æ¾ï¼
- 4.9) å¨ä¸åæ¥è©¢è£¡ï¼æææ¨£æª¢æ¸¬ä¸åæ¬ä½æ¯å¦çº
- NULLï¼æå¦ä½æè½æºç¢ºæåºèä¸è«ææ¬ä½æ¯å¦å«NULLå¼ï¼
- 4.10) å種å符é¡åä¹éæä»éº¼ä¸åï¼
- 4.11.1) æææ¨£åµå»ºä¸ååºåèåææ¯èªåéå¢çæ¬ä½ï¼
- 4.11.2) æå¦ä½ç²å¾ä¸åæå¥çåºåèçå¼ï¼
- 4.11.3) åæä½¿ç¨ currval() æå°è´åå¶ä»ç¨æ¶çè¡çªææ³åï¼
- 4.11.4) çºä»éº¼ä¸å¨äºåç°å¸¸ä¸æ¢å¾éç¨åºåèå¢ï¼çºä»éº¼å¨åºåèæ¬ä½çåå¼ä¸
- åå¨éæ·å¢ï¼
- 4.12) ä»éº¼æ¯ OIDï¼ä»éº¼æ¯ CTID ï¼
- 4.13) çºä»éº¼ææ¶å°é¯èª¤è³è¨ãERROR: Memory exhausted in
- AllocSetAlloc()ãï¼
- 4.14) æå¦ä½æè½ç¥éæéè¡ç PostgreSQL ççæ¬ï¼
- 4.15) æå¦ä½åµå»ºä¸åé è¨å¼æ¯ç¶åæéçæ¬ä½ï¼
- 4.16) å¦ä½å·è¡å¤é£æ¥ï¼outer joinï¼æ¥è©¢ï¼
- 4.17) å¦ä½å·è¡æ¶åå¤åè³æåº«çæ¥è©¢ï¼
- 4.18) å¦ä½è®å½æ¸è¿åå¤è¡æå¤åè³æï¼
- 4.19) çºä»éº¼æå¨ä½¿ç¨ PL/PgSQL 彿¸ååè¨æè¡¨æææ¶å°é¯èª¤è³è¨ãrelation
- with OID ##### does not existãï¼
- 4.20) ç®åæåªäºè³æè¤å¯«(replication)æ¹æ¡å¯ç¨ï¼
- 4.21) çºä½æ¥è©¢çµæé¡¯ç¤ºçè¡¨åææ¬åèæçæ¥è©¢èªå¥ä¸
- çä¸åï¼çºä½å¤§å¯«çæä¸è½ä¿çï¼
- _________________________________________________________________
-
-常è¦åé¡
-
- 1.1) PostgreSQL æ¯ä»éº¼ï¼è©²æéº¼ç¼é³ï¼
-
- PostgreSQL è®ä½ Post-Gres-Q-Lï¼ææåä¹ç°¡ç¨±çºPostgres
- ãæ³è½ä¸ä¸å¶ç¼é³ç人å¡å¯å¾é裡ä¸è¼è²é³æä»¶ï¼ MP3 æ ¼å¼ ã
-
- PostgreSQL æ¯é¢åç®æ¨çéä¿è³æåº«ç³»çµ±ï¼å®å·æå³çµ±åæ¥
- è³æåº«ç³»çµ±çææåè½ï¼åæå嫿å°å¨ä¸ä¸ä»£ DBMS
- 系統ç使ç¨çå¢å¼·ç¹æ§ãPostgreSQL
- æ¯èªç±åè²»çï¼ä¸¦ä¸æææºä»£ç¢¼é½å¯ä»¥ç²å¾ã
-
- PostgreSQL
- çéç¼éä¼ä¸»è¦çºå¿é¡èï¼ä»åéä½ä¸çåå°ä¸¦ééäºè¯ç¶²é²è¡è¯ç¹«ï¼éæ¯ä¸å社åéç¼é
- ç®ï¼å®ä¸è¢«ä»»ä½å¬å¸æ§å¶ã
- 妿³å å¥éç¼éä¼ï¼è«åè¦éç¼äººå¡å¸¸è¦åé¡ï¼FAQï¼
- http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html
-
- 1.2) 誰æ§å¶ PostgreSQL ï¼
-
- å¦æä½ å¨å°æ¾PostgreSQLçæéäººï¼ææ¯ä»éº¼ä¸
- 央å§å¡æï¼ææ¯ä»éº¼æå±¬å¬å¸ï¼ä½ åªè½æ¾æ£äº---å çºä¸åä¹ä¸å
- å¨ï¼ä½æåç確æä¸å æ ¸å¿å§å¡æåCVS管ççµï¼ä½éäºå·¥ä½çµçè¨
- ç«ä¸»è¦æ¯çºäºé²è¡ç®¡çå·¥ä½è䏿¯å°PostgreSQLé²è¡ç¨ä½å¼æ§å¶ï¼PostgreSQLé
- ç®æ¯ç±ä»»ä½äººå
- å¯åå çéç¼äººå¡ç¤¾ååææç¨æ¶æ§å¶çï¼ä½ æéè¦åçå°±æ¯è¨é±éµä»¶å表ï¼åèè¨è«å³å
- ¯ï¼è¦åèPostgreSQLçéç¼è©³è¦ éç¼äººå¡å¸¸åé¡ (Developer's FAQ) ç²åè³è¨ï¼ã
-
- 1.3) PostgreSQL ççæ¬æ¯ä»éº¼?
-
- PostgreSQLçç¼å¸éµå¾ç¶å¸ç BSD çæ¬ãå®åè¨±ç¨æ¶ä¸éç®çå°ä½¿ç¨
- PostgreSQLï¼çè³ä½ å¯ä»¥é·å® PostgreSQL
- èä¸å«æºä»£ç¢¼ä¹å¯ä»¥ï¼å¯ä¸çéå¶å°±æ¯ä½ ä¸è½å è»é«èªèº«åé¡èåæå追訴æ³å¾
- 責任ï¼å¦å¤å°±æ¯è¦æ±ææçè»é«æ·è²ä¸é 忬以ä¸çæ¬è²æã
- ä¸é¢å°±æ¯æåæä½¿ç¨çBSDçæ¬è²æå§å®¹ï¼
-
- PostgreSQL è³æåº«ç®¡ç系統
-
- é¨åçæ¬ï¼cï¼1996-2005ï¼PostgreSQL å¨çéç¼å°çµï¼é¨åçæ¬ï¼cï¼1994-1996
- å å·å¤§å¸è£äº
-
- ï¼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.ï¼
-
- 1.4) PostgreSQL å¯ä»¥éè¡å¨åªäºä½æ¥ç³»çµ±å¹³å°ä¸ï¼
-
- ä¸è¬èªªä¾ï¼ä»»ä½ç¾å¨å° UNIX ç¸å®¹ç使¥ç³»çµ±ä¹ä¸é½è½éè¡ PostgreSQL
- ãå¨å®è£æå裡ååºäºç¼ä½æç¶éæç¢ºæ¸¬è©¦çå¹³å°ã
-
- PostgreSQL ä¹å¯ä»¥ç´æ¥éè¡å¨åºæ¼å¾®è» Windows-NT ç使¥ç³»çµ±ï¼å¦
- Win2000 SP4ï¼WinXP å Win2003ï¼å·²è£½ä½å®æçå®è£åå¯å¾
- http://pgfoundry.org/projects/pginstallerä¸è¼ï¼åºæ¼MSDOSçWindows使¥
- 系統 ï¼Win95ï¼Win98ï¼WinMeï¼éè¦ééCygwin模æ¬ç°å¢éè¡PostgreSQLã
-
- åæä¹æä¸åçº Novell Netware 6 éç¼ççæ¬å¯å¾ http://forge.novell.com
- ç²åï¼çºOS/2(eComStation)éç¼ççæ¬å¯å¾
- http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
- SQL&stype=all&sort=type&dir=%2F ä¸è¼ã
-
- 1.5) æå¾åªè£¡è½å¾å° PostgreSQLï¼
-
- ééç覽å¨å¯å¾ http://www.postgresql.org/ftp/ ä¸è¼ï¼ä¹å¯ééFTPï¼å¾
- ftp://ftp.PostgreSQL.org/pub/ ç«é»ä¸è¼ã
-
- 1.6) ææ°çç PostgreSQL æ¯ä»éº¼ï¼
-
- PostgreSQL ææ°ççæ¬æ¯çæ¬ 8.2.3 ã
-
- æåè¨åæ¯å¹´ç¼ä½ä¸å主è¦åç´çæ¬ï¼æ¯å¹¾åæç¼ä½ä¸åå°çæ¬ã
-
- 1.7) æå¾åªè£¡è½å¾å°å° PostgreSQL çæ¯æï¼
-
- PostgreSQL社åéééµä»¶å表çºå¶å¤§å¤æ¸ç¨æ¶æä¾å¹«å©ï¼è¨é±éµä»¶å表ç主ç«é
- »æ¯
- http://www.postgresql.org/community/lists/ï¼ä¸è¬ææ³ä¸ï¼åå å¥General æ
- Bugéµä»¶å表æ¯ä¸åè¼å¥½çéå§ã
-
- 主è¦çIRCé »éæ¯å¨FreeNode(irc.freenode.net)ç#postgresqlï¼çºäºé£ä¸æ
- ¤é »éï¼å¯ä»¥ä½¿ç¨ UNIX ç¨åº ircï¼å¶æä»¤æ ¼å¼ï¼ irc -c '#postgresql'
- "$USER" irc.freenode.net ï¼æè使ç¨å¶ä»IRC客æ¶ç«¯ç¨åºã卿¤ç¶²çµ¡ä¸éå
- å¨ä¸å PostgreSQL ç西ççé »é(#postgersql-es)åæ³èªé »é
- (#postgresql-fr)ã忍£å°ï¼å¨ EFNET ä¸ä¹æä¸å PostgreSQL ç交æµé »éã
-
- 坿ä¾åæ¥æ¯æçå¬å¸å表å¯å¨ http://techdocs.postgresql.org/companies.php
- ç覽ã
-
- 1.8) æå¦ä½æäº¤ä¸å BUG å ±åï¼
-
- å¯è¨ªå http://www.postgresql.org/support/submitbugï¼å¡«å¯« Bug
- ä¸å ±è¡¨æ ¼å³å¯ï¼å樣ä¹å¯è¨ªå ftp ç«é» ftp://ftp.PostgreSQL.org/pub/
- æª¢æ¥æç¡æ´æ°çPostgreSQL çæ¬æè£ä¸ã
-
- ééä½¿ç¨ Bug æäº¤è¡¨æ ¼ææ¯ç¼å¾ PostgreSQL éµä»¶å表ç Bug
- é常ææä»¥ä¸ä¹ä¸åè¦ï¼
- * ææäº¤å§å®¹ä¸æ¯ä¸å Bug åå¶ä¸æ¯ Bug çåå ã
- * ææäº¤å§å®¹æ¯ä¸åå·²ç¥ç Bug 並ä¸å·²ç¶å å¥ TODO å¾èçä»»åå表ã
- * ææäº¤ç Bug å·²å¨ç¶åçæ¬ä¸è¢«ä¿®æ£ã
- * ææäº¤ç Bug 已修æ£ä½å°æªå°è£ä¸å å¥ç¾å¨çç¼å¸è»é«åã
- * è«æ±æäº¤èæä¾æ´è©³ç´°çè³è¨ï¼
- + 使¥ç³»çµ±
- + PostgreSQL çæ¬
- + å¯éç¾ Bug çæ¸¬è©¦æ¡ä¾
- + 調試è³è¨
- + 調試è·è¹¤è¼¸åº
- * ææäº¤å§å®¹æ¯ä¸åæ° Bugï¼å°å·è¡ä»¥ä¸å·¥ä½ï¼
- + åµå»ºä¸åæ°è£ä¸ä¸¦å°å¶å å¥ä¸ä¸å主è¦çæ¬ææ¯å°çæ¹é²çæ¬ä¸ã
- + æ¤ Bug æ«æä¸è½ä¿®æ£ï¼å°è¢«å è³ TODO å¾èçä»»åå表ã
-
- 1.9) æå¦ä½ç解已ç¥ç BUG ææ«ç¼ºçåè½ï¼
-
- PostgreSQL æ¯æä¸åæ´å±ç SQL:2003 çåéãå鱿åç TODO å表ï¼çè§£å·²ç¥ Bug
- åè¡¨ãæ«ç¼ºçåè½åå°ä¾çéç¼è¨åã
-
- è¦æ±å¢å æ°åè½çç³è«éå¸¸ææ¶å°ä»¥ä¸ä¹ä¸çåè¦ï¼
- * 該åè½å·²å å¥ TODO å¾èçä»»åå表ã
- * 該åè½ä¸æ¯å¿é çï¼å çºï¼
- + 宿¯ç¾æçä¸ç¬¦å SQL æ¨æºçæåè½çéè¤ã
- + 該åè½æ§æå¤§å¤§å¢å 代碼çè¤éç¨åºï¼è帶ä¾çå¥½èæ¯å¾®ä¸è¶³éçã
- + 該åè½æ¯ä¸å®å¨ææ¯ä¸å¯é çã
- * 該åè½å°è¢«å å¥ TODO å¾èçä»»åå表ã
-
- PostgreSQL ä¸ä½¿ç¨ Bug è·è¹¤ç³»çµ±ï¼å çºæåç¼ç¾å¨éµä»¶å表ä¸
- ç´æ¥åè¦ä»¥åä¿è TODO
- ä»»åå表總æ¯èæ¼ææ°çæçæ¹å¼å·¥ä½æçææ´é«ä¸äºãäºå¯¦ä¸ï¼Bug䏿卿åçè»é«ä¸
- åå¨å¾é·æéï¼ å°å½±é¿å¾å¤ç¨æ¶çBugä¹ç¸½æ¯å¾å¿«æè¢«ä¿®æ
- £ãå¯ä¸è½æ¾å°æææ¹é²ãæé«åä¿®æ£çå°æ¹æ¯ CVS
- çæ¥èªè³è¨ï¼å³ä½¿æ¯å¨è»é«æ°çæ¬çç¼å¸è³è¨ä¸ä¹ä¸æååºæ¯ä¸èçè»é«æ´æ°ã
-
- 1.10) è½å¤ ç²åçææ°ææªæåªäºï¼
-
- PostgreSQL åå«å¤§éçææªï¼ä¸»è¦æè©³ç´°çåèæåï¼æåé åä¸äºç測試ä¾åãåè¦
- /doc ç®éï¼è¯è¨»ï¼æçº $PGHOME/docï¼ã ä½ éå¯ä»¥å¨ç·ç覽 PostgreSQL
- çæåï¼å¶ç¶²åæ¯ï¼http://www.PostgreSQL.org/docsã
-
- æå©æ¬éæ¼PostgreSQLçæ¸å¨ç·æä¾ï¼å¨
- http://www.postgresql.org/docs/books/awbook.html å
- http://www.commandprompt.com/ppbook/ ã 乿大éç PostgreSQL
- æ¸ç±å¯ä¾è³¼è²·ï¼å¶ä¸æçºæµè¡ç䏿¬æ¯ç± Korry Douglas 編寫çãå¨
- http://techdocs.PostgreSQL.org/techdocs/bookreviews.phpä¸ ä¸æå¤§éæé
- PostgreSQL æ¸ç±çç°¡ä»ã å¨ http://techdocs.PostgreSQL.org/ 䏿¶éäºæé
- PostgreSQL ç大éæè¡æç« ã
-
- 客æ¶ç«¯çå½ä»¤è¡ç¨åºpsqlæä¸äºä»¥ \d éé
- çå½ä»¤ï¼å¯é¡¯ç¤ºéæ¼é¡åï¼æä½ç¬¦ï¼å½æ¸ï¼èåçè³è¨ï¼ä½¿ç¨ \?
- å¯ä»¥é¡¯ç¤ºææå¯ç¨çå½ä»¤ã
-
- æåç web ç«é»å嫿´å¤çææªã
-
- 1.11) ææè©²ææ¨£å¸ç¿ SQL ï¼
-
- é¦åèæ®ä¸è¿°æå°çèPostgreSQLç¸éçæ¸ç±ï¼å¦å¤ä¸æ¬æ¯ Teach Yourself SQL in
- 21 Days, Second Editionï¼å¶è©³ç´°ä»ç´¹çç¶²åæ¯
- http://members.tripod.com/er4ebus/sql/index.htmï¼ æåç許å¤ç¨æ¶åæ¡The
- Practical SQL Handbookï¼ Bowman, Judith S.
- 編寫ï¼Addison-Wesleyå¬å¸åºçï¼å¶ä»çååæ¡ The Complete Reference SQL,
- Groff 編寫ï¼McGraw-Hill å¬å¸åºçã
-
- å¨ä¸åç¶²åä¸ä¹æå¾å¥½çæç¨ï¼ä»åæ¯
- * http://www.intermedia.net/support/sql/sqltut.shtm
- * http://sqlcourse.com.
- * http://www.w3schools.com/sql/default.asp
- * http://mysite.verizon.net/Graeme_Birchall/id1.html
-
- 1.12)å¦ä½æäº¤è£ä¸ææ¯å å¥éç¼éä¼ï¼
-
- è©³è¦ éç¼äººå¡å¸¸è¦åé¡ (Developer's FAQ) ã
-
- 1.13) PostgreSQL åå¶ä»è³æåº«ç³»çµ±æ¯èµ·ä¾å¦ä½ï¼
-
- è©å¹è»é«æå¥½å¹¾ç¨®æ¹æ³ï¼åè½ï¼æ§è½ï¼å¯é æ§ï¼æ¯æå广 ¼ã
-
- åè½
- PostgreSQL ææå¤§ååç¨è³æåº«æå¤çåè½ï¼ä¾å¦ï¼äºåï¼å
- æ¥è©¢ï¼è§¸ç¼å¨ï¼è¦åï¼å¤éµåè宿´æ§åè¤éçéå®çã
- æåéæä¸äºå®åæ²æçç¹æ§ï¼å¦ç¨æ¶å®ç¾©é¡åï¼ç¹¼æ¿ï¼è¦ååå¤çæ¬ä¸¦è¡æ§å¶ä
- »¥æ¸å°éççç¨çã
-
- æ§è½
- PostgreSQLåå¶ä»åç¨åéæºçè³æåº«å·æé¡ä¼¼çæ§è½ãå°æäºèç宿¯è¼å¿«ï¼å°
- å¶ä»ä¸äºèç宿¯è¼æ¢ã èå¶ä»è³æåº«ç¸æ¯ï¼æåçæ§è½åªå£éå¸¸å¨ +/-
- 10%ä¹éã
-
- å¯é æ§
- æåé½ç¥éè³æåº«å¿é æ¯å¯é çï¼å¦åå®å°±ä¸é»ç¨é½æ²æãæååªååå°ç¼ä½ç¶éèª
- çæ¸¬è©¦çï¼ç¼ºé·æå°çç©©å®ä»£ç¢¼ãæ¯åçæ¬è³å°æä¸åæç beta
- 測試æéï¼ä¸¦ä¸æåçç¼å¸æ
- ·å²é¡¯ç¤ºæåå¯ä»¥æä¾ç©©å®çï¼ç¢åºçï¼å¯ç¨æ¼çç¢ä½¿ç¨ççæ¬ãæåç¸ä¿¡å¨é
- æ¹é¢æåèå¶ä»çè³æåº«è»é«æ¯ç¸ç¶çã
-
- æ¯æ
- æåçéµä»¶å表æä¾ä¸åé常大çéç¼äººå¡åç¨æ¶ççµä»¥å¹«å©è§£æ±ºæç¢°å°ç
- ä»»ä½åé¡ãæåä¸è½ä¿è
- 總æ¯è½è§£æ±ºåé¡ï¼ç¸æ¯ä¹ä¸ï¼åç¨è³æåº«è»é«ä¹ä¸¦ä¸æ¯ç¸½è½å¤ æä¾è§
- £æ±ºæ¹æ³ã
- ç´æ¥èéç¼äººå¡ï¼ç¨æ¶ç¾¤ï¼æååæºç¨åºæ¥è§¸ä½¿PostgreSQLçæ¯ææ¯å¶ä»è³
- æåº«éè¦å¥½ãéæä¸äºåæ¥
- æ§çå¨é¢æè¡æ¯æï¼å¯ä»¥çµ¦æä¾çµ¦é£äºéè¦ç人ãï¼åé±1.7 å°ç¯ï¼
-
- 广 ¼
- æåå°ä»»ä½ç¨éé½åè²»ï¼åæ¬åç¨åéåç¨ç®çã
- ä½ å¯ä»¥ä¸å éå¶å°åä½ çç¢å裡å 奿åç代碼ï¼é¤äºé£äºæåå¨ä¸é¢ççæ¬
- è²æè£¡è²æç BSDçæ¬ä¹å¤çå§å®¹ã
-
- 1.14) PostgreSQL å¯ä»¥èçæè¿ååå家夿å¶çè®åå?
-
- PostgreSQL 8.0ä¹åççæ¬æ¯ä½¿ç¨ä½æ¥ç³»çµ±ä¸çæåè³æåº«ä¾èç夿å¶çè³è¨ï¼èª
- 8.0 çå以å¾ççæ¬ PostgreSQL æèªèº«å«æææ°çæåè³è¨ã
- _________________________________________________________________
-
-ç¨æ¶å®¢æ¶ç«¯åé¡
-
- 2.1) æåå¯ä»¥ç¨ä»éº¼èªè¨å PostgreSQL é²è¡æºéï¼
-
- PostgreSQL (é è¨ææ³)åªå®è£æ C åå§åµå¼ C
- çæ¥å£ï¼å¶ä»çæ¥å£é½æ¯ç¨ç«çé ç®ï¼è½å¤ åå¥ä¸è¼ï¼éäºæ¥å£é ç®ç¨ç«ç好è
- æ¯ä»åå¯ä»¥æåèªçç¼å¸è¨åååèªç¨ç«çéç¼çµã
-
- ä¸äºç·¨ç¨èªè¨å¦ PHP é½æè¨ªå PostgreSQL çæ¥å£ï¼PerlãTCLãPython
- 以åå¾å¤å¶ä»èªè¨çæ¥å£å¨ http://gborg.postgresql.org ç¶²ç«ä¸ç
- Drivers/Interfaces å°ç¯å¯æ¾å°ï¼ 並ä¸éé Internet å¾å®¹ææç´¢å°ã
-
- 2.2) æä»éº¼å·¥å·å¯ä»¥æ PostgreSQL ç¨æ¼ Web é é¢ï¼
-
- ä¸åä»ç´¹ä»¥è³æåº«çºå¾å°çæºä¸é¯çç«é»æ¯ï¼http://www.webreview.comã
-
- å°æ¼ Web éæï¼PHP æ¯ä¸åæ¥µå¥½çæ¥å£ãå®å¨ http://www.php.net/ã
-
- å°æ¼è¤éçä»»åï¼å¾å¤äººæ¡ç¨ Perl æ¥å£å ä½¿ç¨ CGI.pm ç DBD::Pg æ mod_perl
- ã
-
- 2.3)PostgreSQL ææåå½¢ç¨æ¶çé¢åï¼
-
- åæ¥ç¨æ¶ææ¯éæºéç¼äººå¡è½æ¾å°å¾å¤çæé PostgreSQLçGUI å形工å·è»é«ï¼å¨
- PostgreSQLç¤¾åææª æä¸å詳細çå表ã
- _________________________________________________________________
-
-系統管çåé¡
-
- 3.1)æææ¨£è½æ PostgreSQL è£å¨ /usr/local/pgsql 以å¤çå°æ¹ï¼
-
- å¨éè¡ configure æå ä¸ --prefix é¸é ã
-
- 3.2) æå¦ä½æ§å¶ä¾èªå¶ä»é»è¦ç飿¥ï¼
-
- é è¨ææ³ä¸ï¼PostgreSQL åªå許ä¾èªæ¬æ©ä¸éé unix å奿¥åæ TCP/IP
- æ¹å¼ç飿¥ã ä½ åªæå¨ä¿®æ¹äºéç½®æä»¶ postgresql.conf ä¸ç
- listen_addressesï¼ä¸ä¹å¨éç½®æä»¶ $PGDATA/pg_hba.conf 䏿éäº
- åºæ¼é ç¨é»è¦ï¼ host-based ï¼ç身份èªèï¼ä¸¦éæ°åå
- PostgreSQLï¼å¦åå¶ä»é»è¦æ¯ä¸è½èä½ ç PostgreSQL 伺æå¨é²è¡é£æ¥çã
-
- 3.3) æææ¨£èª¿æ´è³æåº«å¼æä»¥ç²å¾æ´å¥½çæ§è½ï¼
-
- æä¸åä¸»è¦æ¹é¢å¯ä»¥æå PostgreSQL çæ½è½ã
-
- æ¥è©¢æ¹å¼çè®å
- éä¸»è¦æ¶åä¿®æ¹æ¥è©¢æ¹å¼ä»¥ç²åæ´å¥½çæ§è½:
-
- + åµå»ºç´¢å¼ï¼åæ¬è¡¨éå¼åé¨åç´¢å¼ï¼
- + ä½¿ç¨ COPY èªå¥ä»£æ¿å¤å Insert èªå¥ï¼
- + å°å¤åSQLèªå¥çµæä¸åäºå以æ¸å°æäº¤äºåçéé·ï¼
- + å¾ä¸åç´¢å¼ä¸æå夿¢è¨éæä½¿ç¨ CLUSTERï¼
- + å¾ä¸åæ¥è©¢çµæä¸ååºé¨åè¨éæä½¿ç¨ LIMITï¼
- + 使ç¨é ç·¨è¯å¼æ¥è©¢ï¼Prepared Query)ï¼
- + ä½¿ç¨ ANALYZE ä»¥ä¿æç²¾ç¢ºçåªåçµ±è¨ï¼
- + å®æä½¿ç¨ VACUUM æ pg_autovacuum
- + é²è¡å¤§éè³ææ´æ¹æååªé¤ç´¢å¼ï¼ç¶å¾é建索å¼ï¼
-
- 伺æå¨çéç½®
- éç½®æä»¶ postgres.conf ä¸çå¾å¤è¨
- ç½®é½æå½±é¿æ§è½ï¼ææåæ¸çå表å¯è¦ï¼
- 管ç塿å/è³æåº«ä¼ºæå¨éè¡ç°å¢/è³æåº«ä¼ºæå¨éè¡éç½®ï¼
- æé忏çè§£éå¯è¦ï¼http://www.varlena.com/varlena/GeneralBits/Tidb
- its/annotated_conf_e.html å
- http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.htmlã
-
- 硬é«ç鏿
- é»è¦ç¡¬é«å°æ§è½çå½±é¿å¯ç覽
- http://candle.pha.pa.us/main/writings/pgsql/hw_performance/inde
- x.html å http://www.powerpostgresql.com/PerfList/ã
-
- 3.4)PostgreSQL 裡å¯ä»¥ç²å¾ä»éº¼æ¨£çèª¿è©¦ç¹æ§ï¼
-
- PostgreSQL æå¾å¤é¡ä¼¼ log_*
- ç伺æå¨éç½®è®éå¯ç¨æ¼æ¥è©¢çåå°åé²ç¨çµ±è¨ï¼èéäºå·¥ä½å°èª¿è©¦åæ§è½æ¸¬è©¦å
- ¾æå¹«å©ã
-
- 3.5) çºä»éº¼å¨è©¦å飿¥ææ¶å°ãSorry, too many
- clientsï¼å·²æå¤ªå¤ç¨æ¶é£æ¥ï¼ãæ¶æ¯ï¼
-
- éè¡¨ç¤ºä½ å·²éå°é è¨ 100 å並ç¼(åä½)å¾å°é²ç¨æ¸çéå¶ï¼ä½ éè¦ééä¿®æ¹
- postgresql.conf æä»¶ä¸ç max_connections å¼ä¾ å¢å postmaster
- çå¾å°ä½µç¼èçæ¸ï¼ä¿®æ¹å¾ééæ°åå postmasterã
-
- 3.6)PostgreSQL çåç´éç¨æåªäºå§å®¹ ï¼
-
- PostgreSQL éç¼çµå°æ¯æ¬¡å°çæ¬çåç´ä¸»è¦åªåäºä¸äº Bug ä¿®æ£å·¥ä½ï¼å æ¤å¾
- 7.4.8 åç´å° 7.4.9 ä¸éè¦ dump å restoreï¼åéè¦åæ
- ¢è³æåº«ä¼ºæå¨ï¼å®è£æ´æ°å¾çè»é«åï¼ç¶å¾éå伺æå¨å³å¯ã
-
- ææPostgreSQLçç¨æ¶æè©²å¨ææ¥è¿ï¼ä½ æä½¿ç¨çä¸»çæ¬ï¼çå°æ¹é²çæ¬ç¼ä½ç¡å¿«åç´
- ãåç®¡æ¯æ¬¡åç´å¯è½é½æä¸é»é¢¨éªï¼PostgreSQLçå°æ¹ é²çå忝è¨è¨ç¨ä¾ä¿®æ
- £ä¸äº Bug
- çï¼ç¨å¼ç¢¼æ¹åè¼å°ï¼æä»¥é¢¨éªéæ¯å¾å°çãPostgreSQL社åèªçºä¸è¬ææ³ä¸ä¸åç´ç
- 風éªéæ¯å¤æ¼åç´çã
-
- ä¸»çæ¬çåç´ï¼ä¾å¦å¾ 7.3 å° 7.4ï¼é常æä¿®æ¹ç³»çµ±è¡¨åè³æè¡¨çå§é¨æ ¼å¼ã
- éäºæ¹è®ä¸è¬æ¯è¼è¤éï¼å æ¤æåä¸ç¶æè³ææä»¶çåå¾å¼å®¹æ§ãå æ¤å¾èçæ¬ä¸
- é²è¡è³æå°åºï¼dumpï¼/ç¶å¾å¨æ°çæ¬ä¸
- é²è¡è³æå°å¥ï¼reloadï¼å°ä¸»çæ¬çåç´æ¯å¿é çã
-
- 3.7)(ä½¿ç¨ PostgreSQL )æéè¦ä½¿ç¨ä»éº¼é»è¦ç¡¬é« ï¼
-
- ç±æ¼é»è¦ç¡¬é«å¤§å¤æ¸æ¯ç¸å®¹çï¼äººå總æ¯å¾åæ¼ç¸ä¿¡ææé»è¦ç¡¬é«è³ªé乿¯ç¸
- åçãäºå¯¦ä¸ä¸æ¯ï¼ ECC RAMï¼å¸¶å¥å¶æ ¡é©çè¨æ¶é«ï¼ï¼SCSI
- ï¼ç¡¬ç¢ï¼ååªè³ªçä¸»æ©æ¿æ¯ä¸äºä¾¿å®è²¨è¦æ´å å¯é ä¸å·ææ´å¥½çæ§è½ã
- PostgreSQL å¹¾ä¹å¯ä»¥éè¡å¨ä»»ä½ç¡¬é«ä¸ï¼
- ä½å¦æå¯é æ§åæ§è½å°ä½ ç系統å¾éè¦ï¼ä½ å°±éè¦å¨é¢çç ç©¶ä¸ä¸ä½ ç硬é«çµæ
- äºã卿åçéµä»¶å表ä¸ä¹æéæ¼ ç¡¬é«éç½®åæ§å¹æ¯çè¨è«ã
- _________________________________________________________________
-
-æä½åé¡
-
- 4.1) å¦ä½åªé¸æä¸åæ¥è©¢çµæçé å¹¾è¡ï¼ææ¯é¨æ©çä¸è¡ï¼
-
- å¦æä½ åªæ¯è¦æåå¹¾è¡è³æï¼ä¸¦ä¸ä½ å¨å·è¡æ¥è©¢ä¸
- ç¥é確åçè¡æ¸ï¼ä½ å¯ä»¥ä½¿ç¨ LIMIT åè½ã 妿æä¸åç´¢å¼è ORDER BY ä¸
- çæ¢ä»¶å¹éï¼PostgreSQL å¯è½å°±åªèçè¦æ±çé å¹¾æ¢è¨éï¼
- ï¼å¦åå°å°æ´åæ¥è©¢é²è¡èçç´å°çæéè¦çè¡ï¼ã妿å¨å·è¡æ¥è©¢åè½æä¸ç¥é確åçè¨éæ
- ¸ï¼ å¯ä½¿ç¨æ¸¸æ¨(cursor)åFETCHåè½ã
-
- å¯ä½¿ç¨ä»¥ä¸æ¹æ³æåä¸è¡é¨æ©è¨éçï¼
- SELECT cols
- FROM tab
- ORDER BY random()
- LIMIT 1 ;
-
- 4.2)
- å¦ä½æ¥ç表ãç´¢å¼ãè³æåº«ä»¥åç¨æ¶çå®ç¾©ï¼å¦ä½æ¥çpsql裡ç¨å°çæ¥è©¢æä»¤ä¸¦é¡¯ç¤ºå
- ®åï¼
-
- å¨psqlä¸ä½¿ç¨ \dt å½ä»¤ä¾é¡¯ç¤ºè³æè¡¨çå®ç¾©ï¼è¦çè§£ psql ä¸
- ç宿´å½ä»¤å表å¯ä½¿ç¨ \? ï¼å¦å¤ï¼ä½ ä¹å¯ä»¥é±è® psql çæºä»£ç¢¼ æä»¶
- pgsql/src/bin/psql/describe.cï¼å®åæ¬çºçæ psql åææ§å½ä»¤ç輸åºçææ SQL
- å½ä»¤ãä½ éå¯ä»¥å¸¶ -E é¸é åå psqlï¼ éæ¨£å®å°åå°åºä½ å¨ psql ä¸
- æçµ¦åºçå½ä»¤å·è¡æçå§é¨å¯¦é使ç¨ç SQL
- æ¥è©¢èªå¥ãPostgreSQL乿ä¾äºä¸åå¼å®¹ SQLç INFORMATION SCHEMA æ¥å£ï¼
- ä½ å¯ä»¥å¾é裡ç²åéæ¼è³æåº«çè³è¨ã
-
- å¨ç³»çµ±ä¸ä¹æä¸äºä»¥ pg_ æé çç³»çµ±è¡¨ä¹æè¿°äºè¡¨çå®ç¾©ã
-
- ä½¿ç¨ psql -l æä»¤å¯ä»¥ååºææçè³æåº«ã
-
- ä¹å¯ä»¥ç覽ä¸ä¸ pgsql/src/tutorial/syscat.source
- æä»¶ï¼å®åèäºå¾å¤å¯å¾è³æåº«ç³»çµ±è¡¨ä¸ç²åè³è¨çSELECTèªæ³ã
-
- 4.3) å¦ä½æ´æ¹ä¸åæ¬ä½çè³æé¡åï¼
-
- å¨8.0çæ¬è£¡æ´æ¹ä¸åæ¬ä½çè³æé¡åå¾å®¹æï¼å¯ä½¿ç¨ ALTER TABLE ALTER COLUMN
- TYPE ã
-
- å¨ä»¥åççæ¬ä¸ï¼å¯ä»¥é樣åï¼
- 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;
-
- ä½ ç¶å¾å¯ä»¥ä½¿ç¨ VACUUM FULL tab æä»¤ä¾ä½¿ç³»çµ±æ¶åç¡æè³ææä½ç¨ç空éã
-
- 4.4) 宿¢è¨éï¼å®å表ï¼å®åè³æåº«çæå¤§éå¶æ¯å¤å°ï¼
-
- ä¸é¢æ¯ä¸äºéå¶ï¼
-
- å®åè³æåº«æå¤§å°ºå¯¸ï¼ ç¡éå¶ï¼å·²å卿 32TB çè³æåº«ï¼
- å®å表çæå¤§å°ºå¯¸ï¼ 32 TB
- ä¸è¡è¨éçæå¤§å°ºå¯¸ï¼ 1.6 TB
- ä¸åæ¬ä½çæå¤§å°ºå¯¸? 1 GB
- ä¸å表裡æå¤§åæ¸ï¼ ç¡éå¶
- ä¸å表裡æå¤§æ¬ä½æ¸ï¼ 250-1600 ï¼èåé¡åæéï¼
- ä¸å表裡çæå¤§ç´¢å¼æ¸éï¼ ç¡éå¶
-
- ç¶ç¶ï¼å¯¦é䏿²æçæ£çç¡éå¶ï¼éæ¯è¦åå¯ç¨ç£ç¤ç©ºéãå¯ç¨è¨æ¶é«/交æåçå¶ç´ã
- äºå¯¦ä¸ï¼ç¶ä¸è¿°éäºæ¸å¼è®å¾ç°å¸¸å°å¤§æï¼ç³»çµ±æ§è½ä¹æåå¾å¤§å½±é¿ã
-
- å®è¡¨çæå¤§å¤§å° 32 TB ä¸éè¦ä½æ¥
- 系統å°å®åæä»¶ä¹éééº¼å¤§çæ¯æã大表ç¨å¤å 1 GB çæä»¶åå²ï¼å æ
- ¤æä»¶ç³»çµ±å¤§å°çéå¶æ¯ä¸éè¦çã
-
- 妿é è¨çå¡å¤§å°å¢é·å° 32K ï¼æå¤§çå®è¡¨å¤§å°åæå¤§åæ¸éå¯ä»¥å¢å å°ååã
-
- æä¸åéå¶å°±æ¯ä¸è½å°å¤§å°å¤æ¼2000å
- ç¯çååµå»ºç´¢å¼ã幸éå°æ¯é樣çç´¢å¼å¾å°ç¨å°ãééå°å¤å
- ç¯åçå§å®¹é²è¡MD5åç¨éç®çµæé²è¡å½æ¸ç´¢å¼å¯å°åçå¯ä¸æ§å¾å°ä¿èï¼
- 並ä¸å¨ææª¢ç´¢å許å°åä¸çå®è©é²è¡æç´¢ã
-
- 4.5) åå²ä¸åå¸åçææ¬æä»¶è£¡çè³æéè¦å¤å°ç£ç¤ç©ºéï¼
-
- ä¸å Postgres è³æåº«ï¼å
- å²ä¸åææ¬æä»¶ï¼æä½ç¨ç空éæå¤å¯è½éè¦ç¸ç¶æ¼éåææ¬æä»¶èªèº«å¤§å°5åçç£ç¤ç©ºé
- ã
-
- ä¾å¦ï¼åè¨æä¸å 100,000 è¡çæä»¶ï¼æ¯è¡æä¸åæ´æ¸åä¸åææ¬æè¿°ã åè¨
- ææ¬ä¸²çå¹³åé·åº¦çº20ä½åçµ(Byte)ãææ¬æä»¶ä½ç¨ 2.8 MBãå
- æ¾éäºè³æçPostgreSQLè³æåº«æä»¶å¤§ç´æ¯ 5.2 MB:
- 24 ååçµ: æ¯è¡çé ï¼å¤§ç´å¼ï¼
- 24 ååçµç¯: ä¸åæ´æ¸åæ¬ä½åä¸åææ¬åæ¬ä½
- + 4 ååçµç¯: é é¢å§æååçµçæé
- ----------------------------------------
- 52 ååçµæ¯è¡
-
- PostgreSQL è³æé ç大尿¯ 8192 ä½åçµ (8 KB)ï¼åï¼
-
- 8192 ååçµæ¯é
- ------------------- = 158 è¡/è³æé ï¼åä¸åæ´ï¼
- 52 ååçµæ¯è¡
-
- 100000 è³æè¡
- -------------------- = 633 è³æé ï¼åä¸åæ´ï¼
- 146 è¡/è³æé
-
- 633 è³æé * 8192 åç¯/é = 5,185,536 åç¯ï¼5.2 MBï¼
-
- ç´¢å¼ä¸éè¦é麼å¤çé¡å¤æ¶èï¼ä½ä¹ç¢ºå¯¦åæ¬è¢«ç´¢å¼çè³æï¼å æ
- ¤å®åä¹å¯è½å¾å¤§ã
-
- ç©ºå¼ NULL åæ¾å¨ä½åä¸ï¼å æ¤ä½ç¨å¾å°ç空éã
-
- 4.6) çºä»éº¼æçæ¥è©¢å¾æ¢ï¼çºä»éº¼éäºæ¥è©¢æ²æå©ç¨ç´¢å¼ï¼
-
- ä¸¦éæ¯åæ¥è©¢é½æèªå使ç¨ç´¢å¼ãåªæå¨è¡¨ç大å°è¶éä¸åæå°å¼ï¼ä¸¦ä¸æ¥è©¢åªæé
- ¸ä¸è¡¨ä¸è¼å°æ¯ä¾çè¨éææææ¡ç¨ç´¢å¼ã 鿝å çºç´¢å¼æçå¼èµ·çé¨å³ç£ç¤å
- åå¯è½æ¯ç´æ¥å°è®å表ï¼é åºæçï¼æ´æ¢ã
-
- çºäºå¤æ·æ¯å¦ä½¿ç¨ç´¢å¼ï¼PostgreSQL
- å¿é ç²å¾æé表ççµ±è¨å¼ãéäºçµ±è¨å¼å¯ä»¥ä½¿ç¨ VACUUM ANALYZEï¼æ ANALYZE
- ç²å¾ã 使ç¨çµ±è¨å¼ï¼åªåå¨ç¥é表ä¸
- æå¤å°è¡ï¼å°±è½å¤ æ´å¥½å°å¤æ·æ¯å¦å©ç¨ç´¢å¼ã
- çµ±è¨å¼å°ç¢ºå®åªåç飿¥é åºå飿¥æ¹æ³ä¹å¾æç¨ãå¨è¡¨çå§å®¹ç¼çè®åæï¼æå®æé²è
- ¡çµ±è¨å¼çæ´æ°æ¶éã
-
- ç´¢å¼é常ä¸ç¨æ¼ ORDER BY
- æå·è¡é£æ¥ãå°ä¸å大表ç䏿¬¡é åºæçåå䏿¬¡æåºé常æ¯ç´¢å¼æçè¦å¿«ãç¶èï¼å¦æ
- å° LIMIT å ORDER BY
- çµåå¨ä¸èµ·ä½¿ç¨ç話ï¼éå¸¸å°æä½¿ç¨ç´¢å¼ï¼å çºéæåè¿å表ä¸çä¸å°é¨åè¨éã
-
- å¦æä½ ç¢ºä¿¡PostgreSQLçåªåå¨ä½¿ç¨é åºæçæ¯ä¸æ£ç¢ºçï¼ä½ å¯ä»¥ä½¿ç¨SET
- enable_seqscan TO 'off'æä»¤ä¾ééé åºæçï¼
- ç¶å¾å次éè¡æ¥è©¢ï¼ä½ å°±å¯ä»¥çåºä½¿ç¨ä¸åç´¢å¼æçæ¯å¦ç¢ºå¯¦è¦å¿«ä¸äºã
-
- ç¶ä½¿ç¨éé符æä½ï¼ä¾å¦ LIKE æ ~ æï¼ç´¢å¼åªè½å¨ç¹å®çææ³ä¸ä½¿ç¨ï¼
- * å符串çéå§é¨åå¿é æ¯æ®éå符串ï¼ä¹å°±æ¯èªªï¼
- + LIKE 模å¼ä¸è½ä»¥ % æé ã
- + ~ ï¼æ£å表éå¼ï¼æ¨¡å¼å¿é 以 ^ æé ã
- * å符串ä¸è½ä»¥å¹éå¤ååç¬¦çæ¨¡å¼é¡æé ï¼ä¾å¦ [a-e]ã
- * 大å°å¯«ç¡éçæ¥æ¾ï¼å¦ ILIKE å ~* çä¸ä½¿ç¨ç´¢å¼ï¼ä½å¯ä»¥ç¨ 4.8
- ç¯æè¿°ç表éå¼ç´¢å¼ã
- * å¨å initdb æå¿é æ¡ç¨é è¨çæ¬å°è¨ç½® C
- localeï¼å çºç³»çµ±ä¸å¯è½ç¥éå¨é C locale ææ³æä¸ä¸åæå¤§å符æ¯ä»éº¼ã
- å¨éç¨®ææ³ä¸ï¼ä½ å¯ä»¥åµå»ºä¸åç¹æ®ç text_pattern_ops ç´¢å¼ä¾ç¨æ¼
- LIKE çç´¢å¼ã
-
- å¨ 8.0 ä¹åççæ¬ä¸
- ï¼é¤éè¦æ¥è©¢çè³æé¡ååç´¢å¼çè³æé¡åç¸å¹éï¼å¦åç´¢å¼ç¶å¸¸æ¯æªè¢«ç¨å°ï¼ç¹å¥æ
- ¯å° int2, int8 忏å¼åçç´¢å¼ã
-
- 4.7) æå¦ä½æè½çå°æ¥è©¢åªå卿¯ææ¨£è©ä¼°èçæçæ¥è©¢ï¼
-
- åè EXPLAIN æåé ã
-
- 4.8) æææ¨£åæ£å表éå¼æç´¢å大å°å¯«ç¡éçæ
- £å表é弿¥æ¾ï¼ææ¨£å©ç¨ç´¢å¼é²è¡å¤§å°å¯«ç¡éæ¥æ¾ï¼
-
- æä½ç¬¦ ~ èçæ£å表éå¼å¹éï¼è ~* èç大å°å¯«ç¡éçæ£å表éå¼å¹éã大å°å¯«ç¡éç
- LIKE è®ç¨®æçº ILIKEã
-
- 大å°å¯«ç¡éçç弿¯è¼é常寫åï¼
- SELECT *
- FROM tab
- WHERE lower(col) = 'abc';
-
- 鿍£å°ä¸æä½¿ç¨æ¨æºçç´¢å¼ã使¯å¯ä»¥åµå»ºä¸åå¨éç¨®ææ³ä¸ä½¿ç¨ç表éå¼ç´¢å¼
- :
- CREATE INDEX tabindex ON tab (lower(col));
-
- 妿ä¸è¿°ç´¢å¼å¨åµå»ºæå å¥ UNIQUE ç´æï¼éç¶ç´¢å¼æ¬ä½èªèº«å§å®¹å¯ä»¥å
- å²å¤§å°å¯«ä¸éçå§å®¹ï¼ä½å¦ææ UNIQUE
- ç´æå¾ï¼éäºå§å®¹ä¸è½å忝大å°å¯«ä¸åï¼å¦åæé æè¡çªï¼ãçºäºä¿è
- ä¸ç¼çéç¨®ææ³ï¼å¯ä»¥ä½¿ç¨ CHECK ç´ææ¢ä»¶ææ¯è§¸ç¼å¨å¨é奿é²è¡éå¶ã
-
- 4.9) å¨ä¸åæ¥è©¢è£¡ï¼æææ¨£æª¢æ¸¬ä¸åæ¬ä½æ¯å¦çº NULL
- ï¼æå¦ä½æè½æºç¢ºæåºèä¸è«ææ¬ä½æ¯å¦å« NULL å¼ï¼
-
- ç¨ IS NULL å IS NOT NULL 測試é忬ä½ï¼å·é«æ¹æ³å¦ä¸ï¼
- SELECT *
- FROM tab
- WHERE col IS NULL;
-
- çºäºè½å°å« NULL æ¬ä½æåºï¼å¯å¨ ORDER BY æ¢ä»¶ä¸ä½¿ç¨ IS NULL å IS NOT
- NULL ä¿®é£¾ç¬¦ï¼æ¢ä»¶çºç true å°æ¯æ¢ä»¶çºå false æå¨åé¢ï¼ä¸é¢çä¾å
- å°±æå°å« NULL çè¨éæå¨çµæçä¸é¢é¨åï¼
- SELECT *
- FROM tab
- ORDER BY (col IS NOT NULL)
-
- 4.10) å種å符é¡åä¹éæä»éº¼ä¸åï¼
-
- é¡å å§é¨å稱 說æ
- VARCHAR(n) varchar æå®äºæå¤§é·åº¦ï¼è®é·å
- 符串ï¼ä¸è¶³å®ç¾©é·åº¦çé¨åä¸è£é½
- CHAR(n) bpchar å®é·å符串ï¼å¯¦éè³æä¸è¶³å®ç¾©é·åº¦æï¼ä»¥ç©ºæ ¼è£é½
- TEXT text æ²æç¹å¥çä¸ééå¶ï¼ååè¡çæå¤§é·åº¦éå¶ï¼
- BYTEA bytea è®é·åç¯åºåï¼ä½¿ç¨NULLåç¬¦ä¹æ¯å許çï¼
- "char" char å®åå符
-
- å¨ç³»çµ±è¡¨åå¨ä¸äºé¯èª¤è³è¨è£¡ä½ å°çå°å§é¨å稱ã
-
- ä¸é¢æåçåå種é¡åæ¯ "varlena"ï¼è®é·ï¼é¡åï¼ä¹å°±æ¯èªªï¼éé çååå
- ç¯æ¯é·åº¦ï¼å¾é¢ææ¯è³æï¼ã æ¼æ¯å¯¦éä½ç¨çç©ºéæ¯è²æç大å°è¦å¤ä¸äºã
- ç¶èéäºé¡åå¦å®ç¾©å¾é·æé½å¯ä»¥è¢«å£ç¸®åå²ï¼å æ
- ¤ç£ç¤ç©ºéä¹å¯è½æ¯é æ³çè¦å°ã
-
- VARCHAR(n) å¨åå²éå¶äºæå¤§é·åº¦çè®é·åç¬¦ä¸²æ¯æå¥½çã TEXT é©ç¨æ¼å
- 岿大å¯é 1G å·¦å³ä½æªå®ç¾©éå¶é·åº¦çå符串ã
-
- CHAR(n) æé©åæ¼åå²é·åº¦ç¸åçå符串ã
- CHAR(n)ææ ¹ææçµ¦å®çæ¬ä½é·åº¦ä»¥ç©ºæ ¼è£è¶³ï¼ä¸è¶³çæ¬ä½å§å®¹ï¼ï¼ è
- VARCHAR(n) åªåå²æçµ¦å®çè³æå§å®¹ã BYTEA ç¨æ¼åå²äºé²å¶è³æï¼å°¤å¶æ¯åå«
- NULL åç¯çå¼ãéäºé¡åå·æå·®ä¸å¤çæ§è½ã
-
- 4.11.1) æææ¨£åµå»ºä¸ååºåèææ¯èªåéå¢çæ¬ä½ï¼
-
- PostgreSQL æ¯æ SERIAL
- è³æé¡åãï¼æ¬ä½å®ç¾©çºSERIALå¾ï¼å°èªååµå»ºä¸ååºåçæå¨ï¼ä¾å¦ï¼
- CREATE TABLE person (
- id SERIAL,
- name TEXT
- );
-
- æèªåè½æçºä»¥ä¸SQLèªå¥ï¼
- CREATE SEQUENCE person_id_seq;
- CREATE TABLE person (
- id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
- name TEXT
- );
-
- åè create_sequence æåé ç²åéæ¼åºåçæå¨çæ´å¤è³è¨ã
-
- 4.11.2) æå¦ä½ç²å¾ä¸åæå¥çåºåèçå¼ï¼
-
- ä¸ç¨®æ¹æ³æ¯å¨æå¥ä¹ååç¨å½æ¸ nextval() å¾åºåå°è±¡è£¡æª¢ç´¢åºä¸ä¸å SERIAL
- å¼ï¼ç¶å¾åç¨æ¤å¼ç²¾ç¢ºå°æå¥ãä½¿ç¨ 4.11.1 裡çä¾è¡¨ï¼å¯ç¨å½ç¢¼é樣æè¿°ï¼
- new_id = execute("SELECT nextval('person_id_seq')");
- execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-
- 鿍£éè½å¨å¶ä»æ¥è©¢ä¸ä½¿ç¨åæ¾å¨ new_id è£¡çæ°å¼ï¼ä¾å¦ï¼ä½çºåç§ person
- 表çå¤éµï¼ã 注æèªååµå»ºç SEQUENCE å°è±¡çåç¨±å°ææ¯
- <table>_<serialcolumn>_seqï¼ é裡 table å serialcolumn
- å奿¯ä½ ç表çå稱åä½ ç SERIAL æ¬ä½çå稱ã
-
- é¡ä¼¼çï¼å¨ SERIAL å°è±¡é è¨æå¥å¾ä½ å¯ä»¥ç¨å½æ¸ currval() 檢索å賦å¼ç
- SERIAL å¼ï¼ä¾å¦ï¼
- execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
- new_id = execute("SELECT currval('person_id_seq')");
-
- 4.11.3) åæä½¿ç¨ currval() æå°è´åå¶ä»ç¨æ¶çè¡çªææ³åï¼
-
- 䏿ãcurrval() è¿åçæ¯ä½ æ¬æ¬¡æè©±é²ç¨æè³¦çå¼è䏿¯ææç¨æ¶çç¶åå¼ã
-
- 4.11.4) çºä»éº¼ä¸å¨äºåç°å¸¸ä¸æ¢å¾éç¨åºåèå¢ï¼çºä»éº¼å¨åºåèæ¬ä½çåå¼ä¸åå¨éæ·å¢ï¼
-
- çºäºæé«ä½µç¼æ§ï¼åºåèå¨éè¦çæåè³¦äºæ
- £å¨éè¡çäºåï¼ä¸¦ä¸å¨äºåçµæä¹åä¸é²è¡éå®ï¼ éå°±æå°è´ç°å¸¸ä¸
- æ¢çäºåå¾ï¼åºåèæåºç¾ééã
-
- 4.12) ä»éº¼æ¯ OID ï¼ä»éº¼æ¯ CTID ï¼
-
- PostgreSQL 裡åµå»ºçæ¯ä¸è¡è¨é齿ç²å¾ä¸åå¯ä¸ç OIDï¼é¤éå¨åµå»ºè¡¨æä½¿ç¨
- WITHOUT OIDS é¸é ã OID åµå»ºææèªåçæä¸å 4ä½åçµçæ´æ¸ï¼ææ OID å¨ç¸æ
- PostgreSQL 伺æå¨ä¸åæ¯å¯ä¸çã ç¶èï¼å®å¨è¶é 40åæå°æº¢åºï¼ OID æ
- ¤å¾æåºç¾éè¤ãPostgreSQL å¨å®çå§é¨ç³»çµ±è¡¨è£¡ä½¿ç¨ OID
- å¨è¡¨ä¹é建ç«è¯ç¹«ã
-
- å¨ç¨æ¶çè³æè¡¨ä¸ï¼æå¥½æ¯ä½¿ç¨ SERIAl ä¾ä»£æ¿ OID å çº SERIAL åªè¦ä¿è
- å¨å®å表ä¸çæ¸å¼æ¯å¯ä¸çå°±å¯ä»¥äºï¼éæ¨£å®æº¢åºçå¯è½æ§å°±é常å°äºï¼
- SERIAL8 å¯ç¨ä¾ä¿å8ååçµçåºåæ¸å¼ã
-
- CTID ç¨æ¼æ¨è帶èè³æå¡ï¼å°åï¼åï¼å¡å§ï¼åç§»çç¹å®çç©çè¡ã CTID
- å¨è¨éè¢«æ´æ¹æéè¼å¾ç¼çæ¹è®ãç´¢å¼è³æä½¿ç¨å®åæåç©çè¡ã
-
- 4.13) çºä»éº¼ææ¶å°é¯èª¤è³è¨ãERROR: Memory exhausted in AllocSetAlloc()ãï¼
-
- éå¾å¯è½æ¯ç³»çµ±çèæ¬å§åç¨åäºï¼æèå§æ ¸å°æäºè³æºæè¼ä½çéå¶å¼ãå¨åå
- postmaster ä¹å試試ä¸é¢çå½ä»¤ï¼
- ulimit -d 262144
- limit datasize 256m
-
- åæ±ºæ¼ä½ ç¨ç
- shellï¼ä¸é¢å½ä»¤åªæä¸æ¢è½æåï¼ä½æ¯å®å°æä½ çé²ç¨è³ææ®µéå¶è¨å¾æ¯è¼é«ï¼
- å èä¹è¨±è½è®æ¥è©¢å®æã鿢å½ä»¤æç¨æ¼ç¶åé²ç¨ï¼ä»¥åææå¨éæ¢å½ä»¤éè¡å¾åµå»ºç
- åé²ç¨ã
- å¦æä½ æ¯å¨éè¡SQL客æ¶ç«¯æå çºå¾å°è¿åäºå¤ªå¤çè³æèåºç¾åé¡ï¼è«å¨éè¡å®¢æ¶ç
- «¯ä¹åå·è¡ä¸è¿°å½ä»¤ã
-
- 4.14) æå¦ä½æè½ç¥éæéè¡çPostgreSQLççæ¬ï¼
-
- å¾ psql 裡ï¼è¼¸å¥ SELECT version();æä»¤ã
-
- 4.15) æå¦ä½åµå»ºä¸åé è¨å¼æ¯ç¶åæéçæ¬ä½ï¼
-
- ä½¿ç¨ CURRENT_TIMESTAMPï¼
- CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-
- 4.16) æææ¨£é²è¡ outer join ï¼å¤é£æ¥ï¼ï¼
-
- PostgreSQL æ¡ç¨æ¨æºç SQL èªæ³æ¯æå¤é£æ¥ãé裡æ¯å©åä¾åï¼
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-
- ææ¯
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 USING (col);
-
- éå©åçå¹çæ¥è©¢å¨ t1.col å t2.col ä¸å飿¥ï¼ä¸¦ä¸è¿å t1 ä¸
- æææªé£æ¥çè¡ï¼é£äºå¨ t2 䏿²æå¹éçè¡ï¼ã å³[å¤]飿¥ï¼RIGHT OUTER
- JOINï¼å°è¿å t2 䏿ªé£æ¥çè¡ã å®å¨å¤é£æ¥ï¼FULL OUTER JOINï¼å°è¿å t1 å t2
- 䏿ªé£æ¥çè¡ã ééµå OUTER å¨å·¦[å¤]飿¥ãå³[å¤]飿¥åå®å¨[å¤]飿¥ä¸
- æ¯å¯é¸çï¼æ®é飿¥è¢«ç¨±çºå§é£æ¥ï¼INNER JOINï¼ã
-
- 4.17) å¦ä½ä½¿ç¨æ¶åå¤åè³æåº«çæ¥è©¢ï¼
-
- æ²æè¾¦æ³æ¥è©¢ç¶åè³æåº«ä¹å¤çè³æåº«ã
- å çºPostgreSQLè¦å è¼èè³æåº«ç¸éç系統ç®éï¼ç³»çµ±è¡¨ï¼ï¼å æ
- ¤è·¨è³æåº«çæ¥è©¢å¦ä½å·è¡æ¯ä¸å®çã
-
- éå å¢å¼æ¨¡å¡ contrib/dblink
- å許æ¡ç¨å½æ¸èª¿ç¨å¯¦ç¾è·¨åº«æ¥è©¢ãç¶ç¶ç¨æ¶ä¹å¯ä»¥åæé£æ¥å°ä¸åçè³æåº«å·è
- ¡æ¥è©¢ç¶å¾å¨å®¢æ¶ç«¯åä½µçµæã
-
- 4.18) å¦ä½è®å½æ¸è¿åå¤è¡æå¤åè³æï¼
-
- å¨å½æ¸ä¸è¿åè³æè¨ééçåè½æ¯å¾å®¹æä½¿ç¨çï¼è©³æåè¦ï¼
- http://techdocs.postgresql.org/guides/SetReturningFunctions
-
- 4.19) çºä»éº¼æå¨ä½¿ç¨ PL/PgSQL 彿¸ååè¨æè¡¨æææ¶å°é¯èª¤è³è¨ãrelation with OID
- ##### does not existãï¼
-
- PL/PgSQL æç·©å彿¸çè³æ¬å§å®¹ï¼ç±æ¤å¸¶ä¾çä¸åä¸å¥½çå¯ä½ç¨æ¯è¥ä¸å
- PL/PgSQL
- 彿¸è¨ªåäºä¸åè¨æè¡¨ï¼ç¶å¾è©²è¡¨è¢«åªé¤ä¸¦é建äºï¼å忬¡èª¿ç¨è©²å½æ¸å°å¤
- ±æï¼ å çºç·©åç彿¸å§å®¹ä»ç¶æåèçè¨æè¡¨ãè§£æ±ºçæ¹æ³æ¯å¨ PL/PgSQL ä¸
- ç¨EXECUTE å°è¨æè¡¨é²è¡è¨ªåã鿍£æä¿èæ¥è©¢å¨å·è¡å總æè¢«éæ°è§£æã
-
- 4.20) ç®åæåªäºè³æè¤å¯«(replication)æ¹æ¡å¯ç¨ï¼
-
- ãè¤å¯«ãåªæ¯ä¸åè¡èªï¼æå¥½å¹¾ç¨®è¤å¯«æè¡å¯ç¨ï¼æ¯ç¨®é½æåªé»å缺é»ï¼
-
- 主/å¾å¼è¤å¯«æ¹å¼æ¯å許ä¸å主伺æå¨æ¥åè®/寫çç³è«ï¼èå¤åå¾ä¼ºæå¨åªè½æ¥å
- è®/SELECTæ¥è©¢çç³è«ï¼ ç®åææµè¡ä¸åè²»ç主/å¾PostgreSQLè¤å¯«æ¹æ¡æ¯
- Slony-I ã
-
- å¤å主伺æå¨çè¤å¯«æ¹å¼å許å°è®/寫çç³è«ç¼é給å¤å°ç主æ©ï¼é種æ¹å¼ç±æ¼é
- è¦å¨å¤å°ä¼ºæå¨ä¹éåæ¥è³æè®å å¯è½æå¸¶ä¾è¼å´éçæ§è½æå¤±ï¼Pgcluster
- æ¯ç®åéç¨®æ¹æ¡ä¸æå¥½çï¼ä¸¦ä¸éå¯ä»¥åè²»ä¸è¼ã
-
- 乿ä¸äºåæ¥éä»è²»ååºæ¼ç¡¬é«çè³æè¤å¯«æ¹æ¡ï¼æ¯æä¸è¿°å種è¤å¯«æ¨¡åã
-
- 4.21) çºä½æ¥è©¢çµæé¡¯ç¤ºçè¡¨åææ¬åèæçæ¥è©¢èªå¥ä¸çä¸åï¼çºä½å¤§å¯«çæä¸è½ä¿çï¼
-
- æå¸¸è¦çåå æ¯å¨åµå»ºè¡¨æå°è¡¨åææ¯æ¬å使ç¨äºéå¼è( ' '
- )ï¼ç¶ä½¿ç¨äºéå¼èå¾ï¼è¡¨åææ¬åï¼ç¨±çºæ¨è符ï¼å岿æ¯åå 大å°å¯«çï¼
- éæè¬èä½ å¨æ¥è©¢æè¡¨åææ¬åä¹æä½¿ç¨éå¼èï¼ä¸äºå·¥å·è»é«ï¼å pgAdmin
- æå¨ç¼åºåµå»ºè¡¨çæä»¤æèªåå°å¨æ¯åæ¨è符ä¸å éå¼èã å æ¤ï¼çºäºæ¨è
- 符ççµ±ä¸ï¼ä½ æè©²ï¼
- * å¨åµå»ºè¡¨æé¿åå°æ¨è符使ç¨éå¼èå¼èµ·ä¾ã
- * 卿¨è符ä¸åªä½¿ç¨å°å¯«åæ¯ã
- * ï¼çºäºèå·²åå¨çæ¨è符ç¸åï¼å¨æ¥è©¢ä¸ä½¿ç¨éå¼èå°æ¨è符å¼èµ·ä¾ã
+++ /dev/null
-
- Frequently Asked Questions
-
- Casto kladené dotazy (FAQ) PostgreSQL
-
- Poslední aktualizace: 29. ríjna 2007 (aktualizováno pro PostgreSQL
- 8.3)
-
- Soucasný správce: Bruce Momjian (bruce@momjian.us)
-
- Prelozil: Pavel Stehule (pavel.stehule@gmail.com)
-
- Nejaktuálnejsí verzi tohoto dokumentu naleznete na adrese
- http://www.postgresql.org/files/documentation/faqs/FAQ.html
-
- Odpovedi na otázky vázané na konkrétní platformy naleznete na adrese
- http://www.postgresql.org/docs/faq/.
- _________________________________________________________________
-
- Obecné otázky
-
- 1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
- 1.2) Kdo rídí vývoj PostgreSQL?
- 1.3) Pod jakou licencí je PostgreSQL?
- 1.4) Na kterých platformách lze provozovat PostgreSQL?
- 1.5) Kde mohu získat PostgreSQL?
- 1.6) Jaká je poslední verze?
- 1.7) Kde mohu získat podporu?
- 1.8) Jak a kam hlásit chyby?
- 1.9) Kde najdu informace o známých chybách nebo nepodporovaných
- vlastnostech?
- 1.10) Jaká je dostupná dokumentace?
- 1.11) Jak se mohu naucit SQL?
- 1.12) Jak se mohu pripojit k týmu vývojáru?
- 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
- 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v
- nekterých zemích?
-
- Dotazy na klientská rozhraní
-
- 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL?
- 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web?
- 2.3) Existuje grafické rozhraní pro PostgreSQL?
-
- Administrativní dotazy
-
- 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
- 3.2) Jak nastavit pravidla pro prístup z jiných stanic?
- 3.3) Jak vyladit databázi na vyssí výkon?
- 3.4) Jaké mám ladící prostredky?
- 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit?
- 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu
- PostgreSQL?
- 3.7) Jaký hardware bych mel pouzívat?
-
- Provozní dotazy
-
- 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek?
- 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných
- uzivatelu. Mohu videt dotazy, které pouzívá psql pro zobrazení techto
- informací?
- 4.3) Jak zmenit datový typ sloupce?
- 4.4) Jaká je maximální velikost rádku, tabulky a databáze?
- 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního
- textového souboru?
- 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc?
- 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz?
- 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index
- pro case insensitive hledání?
- 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit
- dva retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli
- je polozka NULL nebo ne?
- 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy?
- 4.11.1) Jak vytvorit serial/auto-increment polozku?
- 4.11.2) Jak získat hodnotu SERIAL po vlození rádku?
- 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském
- prostredí?
- 4.11.4) Proc není vygenerované císlo pouzito pri prerusení
- transakce?Proc vznikají díry v císlování prostrednictvím sekvence nebo
- typu SERIAL?
- 4.12) Co to je OID? Co je to CTID?
- 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
- AllocSetAlloc()"?
- 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
- 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální
- cas?
- 4.16) Jak provést vnejsí spojení (outer join)?
- 4.17) Jak provést dotaz napríc nekolika databázemi?
- 4.18) Muze funkce vrátit více rádku nebo sloupcu?
- 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"?
- 4.20) Jaké jsou moznosti replikace databází?
- 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí?
- Proc jsou velká písmena v názvech automaticky prevedena na malá
- písmena?
- _________________________________________________________________
-
- Obecné otázky
-
- 1.1) Co je to PostgreSQL? Jaká je správná výslovnost slova PostgreSQL?
-
- Výslovnost PostgreSQL je Post-Gres-Q-L , nebo zjednodusene Postgres .
- V rade jazyku je slovo PostgreSQL obtízne vyslovitelný, proto se v
- hovoru casto pouzívá zjednodusená forma názvu. Pro ty, kterí by si
- rádi poslechli výslovnost, je k dispozici audiozáznam v MP3 formátu.
-
- PostgreSQL je relacní databáze s nekterými objektovými rysy, která má
- moznosti tradicních komercních databázových systému s nekolika
- rozsíreními, které lze najít v DBMS systémech prístí generace.
- Pouzívání PostgreSQL není omezené a veskeré zdrojové kódy jsou volne
- dostupné.
-
- Za vývojem PostgreSQL je mezinárodní skupina nezávislých vývojáru
- navzájem komunikujících prostrednictvím internetu. Tento projekt není
- rízen zádnou obchodní organizací. Pokud se chcete pridat k projektu,
- prectete si vývojárské FAQ na adrese
- http://www.postgresql.org/files/documentation/faqs/FAQ_DEV.html .
-
- 1.2) Kdo rídí vývoj PostgreSQL?
-
- Pokud budete hledat organizaci rídící vývoj PostgreSQL, budete
- zklamáni. Nic takového neexistuje. Existují pouze "core" a CVS skupiny
- uzivatelu, ale ty existují více z administrátorských duvodu nez z
- organizacních. Projekt je smerován komunitou vývojáru a uzivatelu, ke
- které se kdokoliv muze pripojit. Jediné co potrebuje, je prihlásit se
- do elektronické konference. Více ve vývojárském FAQ.
-
- 1.3) Pod jakou licencí je PostgreSQL?
-
- PostgreSQL je predmetem následujících autorských práv:
-
- Dílcí Copyright (c) 1996-2009, PostgreSQL Global Development Group
- Dílcí Copyright (c) 1994-6, Regents of the University of California
-
- Udeluje se oprávnení k uzití, rozmnozování, provádení úprav a
- rozsirování tohoto softwaru a dokumentace k nemu, pro jakékoli úcely,
- bez licencního poplatku a bez písemné licencní smlouvy, za podmínky,
- ze na vsech jeho kopiích je uvedeno oznámení o výse uvedených právech,
- jakoz i obsah tohoto a dvou následujících odstavcu.
-
- THE UNIVERSITY OF CALIFORNIA ("KALIFORNSKÁ UNIVERZITA") NENÍ V ZÁDNÉM
- PRÍPADE ODPOVEDNA ZÁDNÉ TRETÍ OSOBE ZA PRÍMOU, NEPRÍMOU, ZVLÁSTNÍ,
- NAHODILOU NEBO VÝSLEDNOU SKODU, VCETNE USLÉHO ZISKU, ZPUSOBENOU UZITÍM
- TOHOTO SOFTWARU A DOKUMENTACE K NEMU, A TO I V PRÍPADE, ZE THE
- UNIVERSITY OF CALIFORNIA BYLA INFORMOVÁNA O MOZNOSTI VZNIKU TAKOVÉ
- SKODY.
-
- THE UNIVERSITY OF CALIFORNIA ZEJMÉNA NEPOSKYTUJE JAKÉKOLI ZÁRUKY, A TO
- NEJEN ZÁRUKY OBCHODOVATELNOSTI A VHODNOSTI TOHOTO VÝROBKU KE
- SPECIFICKÝM ÚCELUM. NÍZE UVEDENÝ SOFTWARE JE POSKYTNUT "JAK STOJÍ A
- LEZÍ" A THE UNIVERSITY OF CALIFORNIA NENÍ POVINNA ZAJISTIT JEHO
- ÚDRZBU, PODPORU, AKTUALIZACI, VYLEPSENÍ NEBO MODIFIKACI.
-
- Výse uvedené je BSD licence, bezná licence otevreného zdroje. Není zde
- zádné omezení ohledne uzití kódu zdroje. Jsme s tím spokojeni a nemáme
- v úmyslu na této skutecnosti cokoli menit.
-
- 1.4) Na kterých platformách lze provozovat PostgreSQL?
-
- Strucne receno, PostgreSQL bezí na vsech moderních unixových
- systémech. Seznam tech, u kterých probehlo testování, naleznete v
- instalacních instrukcích.
-
- PostreSQL také bezí nativne na vsech Microsof Windows systémech
- odvozených z Microsoft Windows NT jako jsou Windows 2000SP4, WindowsXP
- a Windows2003. Instalacní balícek naleznete na adrese
- http://pgfoundry.org/projects/pginstaller. Na starsích systémech s
- jeste MS-DOS jádrem lze spustit PostgreSQL s emulacním programem
- Cygwin.
-
- Dále existuje port pro Novell Netware 6 port na adrese
- http://forge.novell.com, a pro OS/2 verze (eComStation) na adrese
- http://hobbes.nmsu.edu/cgi-bin/h-search?sh=1&button=Search&key=postgre
- SQL&stype=all&sort=type&dir=%2F .
-
- 1.5) Kde mohu získat PostgreSQL?
-
- Pomocí webového klienta z adresy http://www.postgresql.org/ftp/ nebo
- klienta ftp z adresy ftp://ftp.postgresql.org/pub/.
-
- 1.6) Jaká je poslední verze?
-
- Nejnovejsí verzí PostgreSQL je verze 8.2.5
-
- V plánu je uvolnovat kazdorocne jednu velkou verzi a kazdých nekolik
- mesícu malé verze.
-
- 1.7) Kde mohu získat podporu?
-
- Nejcastejsí forma podpory uzivatelum PostgreSQL komunitou je
- prostrednictvím e-mailu. Na nasem webovém serveru naleznete odkaz na
- stránky,kde se muzete prihlásit do elektronické konference. Pro
- zacátek jsou doporucené konference general nebo bugs.
-
- Dalsí cestou je IRC kanál #postgresql na Freenode (irc.freenode.net).
- K pripojení pouzijte Unixový príkaz irc -x '#postgresql' "$USER"
- irc.freenode.net nebo jakékoholiv jiného IRC klienta. V této síti
- existuje jeste spanelská (#postgresql-es) a francouzská
- (#postgresqlfr) verze. Dalsí PostgreSQL kanál naleznete na EFNet.
-
- Seznam spolecností poskytující komercní podporu naleznete na adrese
- http://techdocs.postgresql.org/companies.php.
-
- 1.8) Jak a kam hlásit chyby?
-
- Vyplnte formulár na adrese
- http://www.postgresql.org/support/submitbug. Na nasem ftp serveru
- ftp://ftp.postgresql.org/pub/ si overte, ze pouzíváte aktuální verzi
- PostreSQL.
-
- Chyby reportované prostrednictvím chybového formuláre nebo zasláním
- mailu do PostgreSQL konference obvykle generuje následující odezvu:
- * Nejedná se o chybu, a proc
- * Jedná se o známou chybu, která je jiz v seznamu úkolu TODO
- * Tato chyba byla opravena v aktuální verzi
- * Tato chyba byla jiz opravena ve verzi, která zatím nebyla
- oficiálne uvolnena
- * Pozadavek na dalsí doplnující informace:
- + Operacní systém
- + Verze PostgreSQL
- + Test reprodukující chybu
- + Ladící informace
- + Backtrace výstup debuggeru
- * Jedná se o zatím nezjistenou chybu, pak muzete cekat
- + Záplatu odstranující chybu, která bude vlozena do dalsí velké
- nebo malé verze
- + Informaci, ze se jedná o chybu, kterou nelze okamzite resit a
- je proto pridána do TODO
-
- 1.9) Kde najdu informace o známých chybách nebo nepodporovaných vlastnostech?
-
- PostgreSQL podporuje rozsírenou podmnozinu SQL:2003. V nasem TODO
- naleznete seznam známých chyb, chybejících vlastností, a plány do
- budoucna.
-
- Odezva na pozadavek na novou vlastnost PostgreSQL je obvykle:
- * Pozadavek je jiz v TODO
- * Pozadovaná funkce není chtená protoze
- + Duplikuje jiz existující funkci, která respektuje SQL
- standard
- + Implementací funkce by se prílis zkomplikoval kód bez
- relevantního prínosu
- + Funkce by mohla být nebezpecná nebo nespolehlivá
- * Pozadavek je pridán do TODO
-
- PostgreSQL nepozívá systém pro sledování chyb, protoze jsme zjistili,
- ze je efektivnejsí prímo reagovat na maily a udrzovat aktuální TODO. V
- praxi je snaha o co nejrychlejsí resení chyb, a chyby, které by se
- mohly projevit u mnoha uzivatelu jsou opravovány velice rychle. Jediné
- místo, kde lze dohledat vsechny zmeny, rozsírení a opravy v PostgreSQL
- je CVS log. Poznámky k verzi "Release notes" nezachycují vsechny
- zmeny, k nemz doslo.
-
- 1.10) Jaká je dostupná dokumentace?
-
- PostgreSQL obsahuje vynikající dokumentaci zahrnující manuál,
- manuálové stránky a testovací príklady. Podívejte se do adresáre /doc.
- Manuál je prístupný online na http://www.postgresql.org/docs.
-
- K dispozici jsou zdarma dve online knihy na adresách
- http://www.postgresql.org/docs/books/awbook.html a
- http://www.commandprompt.com/ppbook/. Dalsí literaturu lze zakoupit.
- Nejpopulárnejsí je od Kerryho Douglase. Seznam dostupné literatury je
- na http://techdocs.postgresql.org/techdocs/bookreviews.php. Jeste je
- kolekce technicky orientovaných clánku tematicky spojených s
- PostgreSQL na adrese http://techdocs.postgresql.org/.
-
- Rádkový klient psql má \d príkazy pro zobrazení informací o typech,
- operátorech, funkcích, agregacních funkcí, atd. Pouzijte \? pro
- zobrazení dostupných príkazu.
-
- Dalsí dokumentaci najdete na nasem webu.
-
- 1.11) Jak se mohu naucit SQL?
-
- Podívejte se do výse uvedené dokumentace. Dalsí online knihou je
- "Teach Yourself SQL in 21 Days, Second Edition" na adrese
- http://members.tripod.com/er4ebus/sql/index.htm. Mnoho nasich
- uzivatelu doporucuje knihu The Practical SQL Handbook, Bowman, Judith
- S., et al., Addison-Wesley. Dalsí The Complete Reference SQL, Groff et
- al., McGraw-Hill.
-
- Dalsí online tutoriály jsou dostupné na adresách:
- * http://www.intermedia.net/support/sql/sqltut.shtm
- * http://sqlcourse.com
- * http://www.w3schools.com/sql/default.asp
- * http://mysite.verizon.net/Graeme_Birchall/id1.html
-
- 1.12) Jak se mohu pripojit k týmu vývojáru?
-
- Prostudujte si Developer's FAQ.
-
- 1.13) Jak je na tom PostgreSQL v porovnání s jinými databázemi?
-
- Software muzeme porovnávat z nekolika ruzných pohledu: vlastnosti,
- výkon, spolehlivost, podpora a cena.
-
- Vlastnosti
-
- PostgreSQL nabízí vetsinu funkcí funkcionality velkých komercních DBMS
- systému jako jsou: transakce, vnorené dotazy, spouste, referencní
- integrita a sofistikovaný systém zamykání. Poskytujeme urcité funkce,
- které ostatní systémy bezne nepodporují. Napr. uzivatelem definované
- typy, dedicnost, pravidla (rules), a MVCC architekturu.
-
- Výkon
-
- Výkon PostgreSQL je srovnatelný s ostatními komercními nebo Open
- Source databázemi. V nekterých prípadech je rychlejsí, jindy
- pomalejsí. Nás výkon je obvykle +/-10% vuci ostatním databázím.
-
- Spolehlivost
-
- Uvedomujeme si, ze databáze musí být stoprocentne spolehlivá, jinak je
- nepouzitelná. Snazíme se, aby kazdá verze byla dobre otestována a
- obsahovala minimum chyb. Kazdá verze je minimálne nekolik mesícu v
- beta testovacím rezimu. Do produkcního rezimu se dostane, az kdyz
- nedochází k dalsím zmenám nebo opravám. Veríme, ze jsem více nez
- srovnatelní s ostatními databázemi v této oblasti.
-
- Podpora
-
- Na nasich internetových konferencích se setkává velká skupina vývojáru
- a uzivatelu pri resení vyskytujících se problému. Nase internetové
- konference umoznují kontakt velké skupiny vývojáru a uzivatelu.
- Nemuzeme garantovat opravu chyby, ale komercní DBMSs také vzdy
- negarantují resení problému. Veríme ale, ze díky prímému kontaktu na
- vývojáre, nasi uzivatelskou komunitu, manuálum, a dostupným zdrojovým
- kódum máme lepsí podporu nez ostatní DBMSs. Pro ty, kterí preferují
- komercní "per-incident" podporu, existuje spolecností, kterí ji
- nabízejí (FAQ sekce 1.7.)
-
- Cena
-
- PostgreSQL lze pouzívat bezplatne (a to i pro komercní pouzití). Také
- muzete neomezene pouzívat nás kód ve svých produktech s výjimkami
- specifikovanými v nasí licenci (prebíráme BSD licenci).
-
- 1.14) Je PostgreSQL pripraven na aktuální zavádení letního casu v nekterých
- zemích?
-
- Pocínaje verzí 8.0.[4+] podporuje PostgreSQL letní cas také pro USA.
- Podpora letního casu (daylight saving time) pro Kanadu a Západní
- Austrálii je obsazena ve verzích 8.0.[10+] a 8.1.[6+] a vsech
- následujících verzích. Starsí verze pouzívaly systémovou databázi
- casových zón obsahující, krome jiného, informaci o tom, zda se pro
- danou casovou zónu rozlisuje mezi letním a zimním casem.
- _________________________________________________________________
-
- Dotazy na klientská rozhraní
-
- 2.1) Která rozhraní jsou pouzitelná pro PostgreSQL?
-
- PostgreSQL se distribuuje pouze s rozhraním pro jazyk C a embedded C.
- Vsechna dalsí rozhraní predstavují nezávislé projekty, které je treba
- stáhnout z internetu samostatne. Osamostatnení techto projektu
- umoznuje nezávislost vývojových týmu a moznost vydávat nové verze bez
- ohledu na vydání nové verze PostgreSQL.
-
- Nekteré programovací jazyky jako je napr. PHP obsahují rozhraní pro
- PostgreSQL. Rozhraní pro jazyky jako je Perl, Tcl, Python a mnoho
- dalsích jsou dostupné na adrese: http://gborg.postgresql.org v sekci
- Drivers/Interfaces.
-
- 2.2) Jaké nástroje lze pouzít pro PostgreSQL a web?
-
- Dobrým úvodem do problematiky databází v prostredí webových stránek
- muze být web http://www.webreview.com.
-
- PHP (http://www.php.net) je vynikajícím rozhraním pro tvorbu webu.
-
- Pro slozitejsí úlohy se casto pouzívá Perl a jeho BDB:Pg rozhraní s
- podporou CGI - CGI.pm nebo mod_perl(u).
-
- 2.3) Existuje grafické rozhraní pro PostgreSQL?
-
- K dispozici je rada grafických nástroju podporujících PostgreSQL a to
- od komercních nebo open source vývojáru. Podrobný seznam naleznete na
- adrese http://www.postgresql.org/docs/techdocs.54.
- _________________________________________________________________
-
- Administrativní dotazy
-
- 3.1) Jak nainstalovat PostgreSQL jinam nez do /usr/local/pgsql?
-
- Pri spoustení configure nastavte parametr --prefix
-
- 3.2) Jak nastavit pravidla pro prístup z jiných stanic?
-
- Ve výchozí konfiguraci, PostgreSQL umoznuje pouze pripojení z
- lokálního uzivatele prostrednictvím Unix domain sockets nebo TCP/IP
- spojení. Bez modifikace listen_addresses v souboru postgresql.conf, a
- povolení adresy v souboru $PGDATA/pg_hba.conf se nelze pripojit k
- PostgreSQL z ostatních stanic. Zmena výse zmínených parametru vyzaduje
- restart databázového serveru.
-
- 3.3) Jak vyladit databázi na vyssí výkon?
-
- Výkon systému muzete ovlivnit ve trech oblastech:
-
- Zmeny dotazu
-
- * Pouzitím indexu vcetne cástecných a funkcionálních
- * Pouzitím COPY místo opakovaných INSERTu
- * Sloucením mnoha SQL príkazu do jedné transakce snízením rezie na
- commit
- * Pouzíváním CLUSTERU, pokud nacítáte vetsí pocet rádek podle indexu
- * Pouzitím klauzule LIMIT v poddotazech
- * Pouzitím predpripravených dotazu
- * Pouzíváním ANALYZE. Tento príkaz aktualizuje statistiky, které se
- pouzívají pri optimalizaci dotazu
- * Pravidelné pouzití VACUUM nebo pouzívání pg_autovacuum
- * Odstranením indexu pred rozsáhlými zmenami v datech
-
- Konfigurace serveru
-
- Urcité parametry v souboru postgresql.conf mají vliv na výkon serveru.
- Detaily naleznete v prírucce Administrátora v Server Run-time
- Environment/Run-time Configuration. Dalsí komentáre naleznete v
- http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.ht
- ml a http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
-
- Výber hardware
-
- Vliv hardware na výkon serveru je popsán v dokumentech
- http://candle.pha.pa.us/main/writings/pgsql/hw_performance/index.html
- a http://www.powerpostgresql.com/PerfList/.
-
- 3.4) Jaké mám ladící prostredky?
-
- Nastavením log_* promenných v konfiguraci serveru si vynutíte logování
- dotazu a procesních statistik, které Vám mohou pomoci pri ladení a
- optimalizaci výkonu.
-
- 3.5) Co znamená "Sorry, too many clients", kdyz se zkousím pripojit?
-
- Prekrocil jste výchozí limit, který je 100 soucasne pripojených
- uzivatelu. V konfiguraci serveru v postgresql.conf tuto hodnotu muzete
- zvetsit zmenou hodnoty max_connection. Nezapomente restartovat server.
-
- 3.6) Proc je nutný dump a obnovení (load) databáze pri upgradu PostgreSQL?
-
- Zpusob císlování je popsán v dokumentaci na
- http://www.postgresql.org/support/versioning. Instrukce k provedení
- migrace na vyssí verzi jsou taktéz v dokumentaci na adrese
- http://www.postgresql.org/docs/current/static/install-upgrading.html.
-
- 3.7) Jaký hardware bych mel pouzívat?
-
- Jelikoz PC jsou vetsinou kompatibilní, lidé mají tendence verit, ze
- vsechna PC jsou stejne kvalitní. Coz není pravda. Pameti ECC, SCSI a
- kvalitní základní desky jsou mnohem spolehlivejsí a výkonnejsí nez
- lacinejsí hardware. PostgreSQL pobezí na vetsine hardwaru, nicméne
- pokud je pro Vás spolehlivost a výkon systému dulezitá, je dobré
- venovat cas nalezení vhodné hardwarové konfigurace. Na nasich
- elektronických konferencích muzete diskutovat o vhodných konfiguracích
- a znackách.
- _________________________________________________________________
-
- Provozní dotazy
-
- 4.1) Jak získat pouze první rádek dotazu? Náhodný rádek?
-
- Pokud potrebujete pouze nekolik rádku a pokud víte kolik, pouzijte
- SELECT LIMIT. Pokud bude mozné pouzít index shodující se s ORDER BY,
- je mozné, ze se nebude provádet celý dotaz. Pokud neznáte pocet
- záznamu, pouzijte kurzor a príkaz FETCH.
-
- Pro výber náhodného rádku pouzijte príkaz ve tvaru:
-SELECT col
-FROM tab
-ORDER BY random()
-LIMIT 1;
-
- 4.2) Jak získám seznam tabulek, indexu, databází, a definovaných uzivatelu.
- Mohu videt dotazy, které pouzívá psql pro zobrazení techto informací?
-
- V psql príkazem \dt získáte seznam tabulek. Úplný seznam príkazu psql
- získáte príkazem \?. Alternativne si muzete prostudovat zdrojový kód
- psql - soubor pgsql/src/bin/psql/describe.c, který obsahuje SQL
- príkazy, které jsou generovány pro získání výstupu psql "backslash"
- príkazu. Také muzete nastartovat psql s parametrem -E, který zpusobí
- zobrazení vsech SQL príkazu, které se odesílají na server. PostgreSQL
- také podporuje SQL standard INFORMACNÍ SCHÉMATA (standardní systémové
- tabulky). Klasickým dotazem do systémových tabulek získáte pozadované
- informace o strukture databáze.
-
- Systémové tabulky PostgreSQL (mimo rámec SQL standardu) pouzívají
- prefix pg_. Pro zjistení struktury databáze je muzete pouzít také, i
- kdyz preferovány jsou dotazy do informacního schématu.
-
- Seznam vsech databází získáte príkazem psql -l
-
- Dalsí inspiraci najdete v souboru pgsql/src/tutorial/syscat.source.
- Obsahuje ilustracní SELECTy potrebné k získání informací z systémových
- tabulek databáze.
-
- 4.3) Jak zmenit datový typ sloupce?
-
- Ve verzích 8.0 a pozdejsích jednoduse:
-ALTER TABLE ALTER COLUMN TYPE
-
- V starsích verzích:
-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;
-
- Po zmene spustte príkaz VACUUM FULL, aby doslo k uvolnení diskového
- prostoru pouzitého v tu chvíli jiz neplatnými záznamy.
-
- 4.4) Jaká je maximální velikost rádku, tabulky a databáze?
-
- PostgreSQL má tato omezení:
-
- Maximální velikost databáze: neomezena (existují 32TB db)
- Maximální velikost tabulky: 32 TB
- Maximální velikost rádky: 480GB
- Maximální velikost polozky 1 GB
- Maximální pocet rádku v tabulce: neomezeno
- Maximální pocet sloupcu v tabulce: 250-1600 podle typu
- Maximální pocet indexu na tabulce: neomezeno
-
- Ve skutecnosti nic není neomezeno, limitem bývá vzdy dostupná disková
- pamet nebo velikost operacní pameti. Pokud máte nekterou z techto
- hodnot neobvykle velkou, muze dojít ke snízení výkonu.
-
- Maximální velikost tabulky je 32 TB a nevyzaduje podporu velkých
- souboru operacním systémem. Velké tabulky se ukládají do nekolika 1 GB
- souboru takze limity souborového systému nejsou podstatné.
-
- Maximální velikost tabulky a maximální pocet sloupcu muzeme
- zectyrnásobit nastavením velikosti bloku na 32K.
-
- Indexy jsou povolené pouze na sloupcích jejichz délka je mensí nez
- 2000 znaku. Pokud tuto délku prekrocíme a index potrebujeme pro
- zajistení jednoznacnosti, je vhodnejsí pouzít funkcionální index nad
- MD5 funkcí nebo fulltextový index.
-
- 4.5) Kolik diskového prostoru je potreba k ulození dat z normálního textového
- souboru?
-
- PostgreSQL vyzaduje az petinásobek diskového prostoru k ulození dat z
- textového souboru.
-
- Napríklad, uvazujme soubor se 100 tisíci rádky obsahující na kazdé
- rádce celé císlo a textový popis. Text je v prumerne dvacet bytu
- dlouhý. Textový soubor bude 2.8 MB dlouhý. Velikost databáze
- obsahující odpovídající data bude zhruba 5.2 MB.
- 24 bytu: hlavicka rádku (priblizne)
- 24 bytu: jedna celocíselná polozka a jedna textová
- + 4 byty: ukazatel na stránku k entici
- ------------------------------------------------------
- 52 bytu na rádek
-
- Velikost datové stránky PostgreSQL je 8192 bytu (8KB)
- 8192 bytu na stránce
----------------------- = 158 rádek na stránku
- 52 bytu za rádek
-
-100000 rádek
------------------------ = 633 stránek (zaokrouhleno nahoru)
- 158 rádek na stránce
-
-633 datových stránek * 8192 bytu na kazdou stránku = 5,185,536 bytu (5.2 MB)
-
- Indexy nemají tak velkou rezii, ale mohou být také velké, protoze
- obsahují indexovaná data.
-
- Hodnoty NULL jsou ulozeny v bitmapách, takze zabírají jen velmi málo
- diskového prostoru.
-
- 4.6) Muj dotaz je pomalý a nepouzívá vytvorené indexy. Proc?
-
- Kazdý dotaz nemusí nutne pouzít existující indexy. Index se pouzije
- tehdy, kdyz je tabulka vetsí nez urcitá minimální velikost, a dotaz
- vybírá pouze procentuálne malou cást rádku tabulky. To proto, ze
- náhodný prístup k disku daný ctením indexu muze být pomalejsí nez
- lineární ctení tabulky nebo sekvencní ctení.
-
- PostgreSQL rozhoduje o pouzití indexu na základe statistiky prístupu k
- tabulce. Tyto statistiky se shromazdují príkazy VACUUM ANALYZE nebo
- ANALYZE. Díky statistikám má optimizer informaci o poctu rádek v
- tabulce a muze lépe rozhodnout o pouzití indexu. Statistiky se uplatní
- pri urcení optimálního poradí a metody spojení tabulek. Statistiky by
- se meli aktualizovat opakovane, tak jak se mení obsah tabulek.
-
- Indexy nejsou obycejne pouzity pro setrídení nebo spojení tabulek.
- Sekvencní zpracování následované explicitním trídením je obycejne
- rychlejsí nez pouzití indexu na velké tabulce.
-
- Jinak je tomu v prípade pouzití LIMIT a ORDER BY, pri kterém se
- vetsinou index pouzije, jelikoz je výsledkem pouze malá cást tabulky.
-
- Pokud si myslíte, ze optimizer mylne zvolil sekvencní prohledávání
- tabulky, pouzijte príkaz SET enable_seqscan TO 'off' a zkuste zda je
- prohledávání s indexem rychlejsí.
-
- Pri vyhledávání na základe vzoru jako je napr. operátor LIKE nebo ~ se
- indexy pouzijí pouze za urcitých skutecností:
- * zacátek hledaného vzoru musí být ukotven k zacátku, tj.
- + vzor LIKE nesmí zacínat %
- + ~ regulární výraz musí zacínat ^
- * vzor nesmí zacínat intervalem, napr. [a-e]
- * vyhledávaní, které není Case sensitiv jako je ILIKE nebo ~*
- nepouzívá indexy. Muzete ale pouzít funkcionální indexy, které
- jsou popsány v sekci 4.8
- * pri inicializaci databáze (initdb) musí být pouzito C locale nebo
- vytvorte speciální text_pattern_index, který umozní, pri
- respektování zmínených podmínek pouzití indexu operací LIKE. Pro
- vyhledávání celých slov je mozné a výhodné pouzít fulltext.
-
- 4.7) Jak zjistím, jak se vyhodnocuje muj dotaz?
-
- Podívejte se do nápovedy k príkazu EXPLAIN.
-
- 4.8) Jak pouzít case-(in)sensitive regulární výraz? Jak pouzít index pro case
- insensitive hledání?
-
- Vyhledávání prostrednictvím regulárních vzoru zajistuje operátor ~,
- který je case-sensitive. Jeho case-insensitive varianta je operátor
- ~*. Case-insensitive variací operátoru LIKE je operátor ILIKE.
-
- Case-insensitive vyhledání se resí:
-SELECT *
-FROM tab
-WHERE lower(col) = 'abc';
-
- Tento dotaz nepouzije standardní index. Musíte pouzít tzv.
- funkcionální index:
-CREATE INDEX tabindex ON tab (lower(col));
-
- Pokud index vytvoríme jako unikátní, tak muzeme ukládat retezce
- obsahující malá i velká písmena, ale nikoliv retezce, které se od sebe
- odlisují jen v malých a velkých písmenech. K zajistení zápisu retezce
- obsahující pouze malá nebo pouze velká písmena pouzijte CHECK kontroly
- nebo triggery.
-
- 4.9) Jak v dotazu detekovat, ze polozka je NULL? Jak bezpecne spojit dva
- retezce, pokud mohou obsahovat NULL? Lze trídit podle toho, jestli je polozka
- NULL nebo ne?
-
- Pokud chcete testovat hodnotu NULL pouzijte operátor IS:
- SELECT *
- FROM tab
- WHERE col IS NULL;
-
- K spojení retezcu, které mohou obsahovat hodnotu NULL, pouzívejte
- funkci COALESCE(), napr.:
- SELECT COALESCE(col1, '') || COALESCE(col2, '')
- FROM tab
-
- Pokud chcete trídit podle hodnoty NULL, pouzijte výraz IS NULL nebo IS
- NOT NULL v klauzuli ORDER. Hodnota pravda má prednost pred hodnotou
- false a tedy pokud pouzijete:
- SELECT *
- FROM tab
- ORDER BY (col IS NOT NULL)
-
- tak záznamy s NULL budou na zacátku setrídených dat.
-
- 4.10) Jaké jsou rozdíly mezi ruznými znakovými typy?
-
- Typ Interní název Poznámky
- VARCHAR(n) varchar n urcuje maximální délku
- CHAR(n) bpchar retezec je do dané délky rozsíren mezerami
- TEXT text bez omezení délky
- BYTEA bytea pole bytu nespecifikované délky
- "char" char jeden znak
-
- Na interní názvy muzete narazit v systémovém katalogu nebo v nekterých
- chybových hláseních.
-
- Ctyri první typy jsou tzv. varlena typy (první ctyri byty na disku
- jsou obsahují délku, ostatní obsahují vlastní data). Skutecne obsazený
- prostor je tedy o neco málo vetsí nez deklarovaná velikost. Na druhou
- stranu, delsí retezce jsou komprimovány, takze obsazený prostor na
- disku muze být mensí nez se ceká.
-
- VARCHAR(n) je vhodný pro ukládání ruzne dlouhých retezcu u kterých
- známe délkové omezení, TEXT pro retezce bez omezení délky (maximum je
- jeden gigabyte).
-
- CHAR(n) se pouzívá pro ulození stejne dlouhých retezcu. CHAR(n) doplní
- mezerami na specifikovanou délku, VARCHAR(n) hodnoty se ukládají tak
- jak jsou. BYTEA je pro ukládání binárních dat - non ASCII hodnot.
- Vsechny zmínené typy mají podobné výkonové charakteristiky.
-
- 4.11.1) Jak vytvorit serial/auto-increment polozku?
-
- V PostgreSQL muzete pouzít datový typ SERIAL. Jeho pouzitím se
- automaticky vytvorí sekvence. Napríklad:
-CREATE TABLE person (
- id SERIAL,
- name TEXT
-);
-
- je automaticky transformováno na:
-CREATE SEQUENCE person_id_seq;
-CREATE TABLE person (
- id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
- name TEXT
-);
-
- Podrobnejsí informace najdete v manuálu v popisu príkazu
- create_sequence.
-
- 4.11.2) Jak získat hodnotu SERIAL po vlození rádku?
-
- Nejjednodussím zpusob, jak získat vygenerovanou hodnotu typu SERIAL,
- je vyuzít klauzuli RETURNING. Pro tabulku z 4.11.1 vypadá takto:
-INSERT INTO person (name) VALUES ('Blaise Pascal') RETURNING id;
-
- Také muzete pouzít funkci nextvall() a její výsledek pouzít v príkazu
- INSERT, nebo zavolat currval() po provedení príkazu INSERT.
-
- 4.11.3) Nezpusobí currval() a nextval() problémy ve více uzivatelském
- prostredí?
-
- Ne, currval vrací vzdy hodnotu, která byla vygenerována pro vás.
-
- 4.11.4) Proc není vygenerované císlo pouzito pri prerusení transakce?Proc
- vznikají díry v císlování prostrednictvím sekvence nebo typu SERIAL?
-
- Poté co sekvence vygeneruje nové císlo, tak se nedochází k zamcení
- sekvence a neceká se na úspesné nebo neúspesné dokoncení transakce.
- Odvoláním transakce, která si vyzádala císla sekvence se tato císla
- nenávratne ztratí.
-
- 4.12) Co to je OID? Co je to CTID?
-
- V prípade, ze tabulku nezalozíme s atributem WITHOUT OIDS, tak má
- kazdý rádek unikátní identifikacní císlo OID. Toto císlo je 4 bajtové
- celé císlo, které je jedinecné v celé instalaci. Pretece po 4
- miliardách rádku. PostgreSQL pouzívá OIDs jako interní linky v
- interních systémových tabulkách.
-
- K získání unikátního císla v nesystémových tabulkách je vhodnejsí
- pouzití typu SERIAL nez OID, jelikoz sekvence SERIAL se pouzívá pouze
- pro jednu tabulku a je tudíz méne náchylná na pretecení. Pokud byste
- se toho obávali, pouzijte typ SERIAL8.
-
- CTID se pouzívá k identifikaci konkrétního fyzického rádku. CTID se
- mení pokud je rádek modifikován nebo znovu nacten. Pouzívají ho indexy
- jako adresaci fyzických rádku.
-
- 4.13) Co znamená chybové hlásení "ERROR: Memory exhausted in
- AllocSetAlloc()"?
-
- Pravdepodobne jste vycerpal dostupnou virtuální pamet, nebo tvuj
- kernel má prílis nízké limity u urcitých zdroju. Pred startem
- PostgreSQL vyzkousejte:
-ulimit -d 262144
-limit datasize 256m
-
- Mozná, ze se projde pouze jeden príkaz - zálezí to na vasem shellu.
- Mel by zvednout limity datových segmentu vasich procesu na dostatecne
- velkou hodnotu a snad umoznit dokoncení dotazu. Zmena limitu se bude
- aplikovat pouze na aktuální proces a na vsechny nove vytvorené
- procesy. Jestlize máte problém s SQL klientem, protoze vám server
- vrátil prílis dat, zkuste to pred startem klienta.
-
- 4.14) Jak zjistím, kterou verzi PostgreSQL pouzívám?
-
- V psql napiste:
-SELECT version();
-
- 4.15) Jak vytvorit sloupec, který bude implicitne obsahovat aktuální cas?
-
- Pouzijte CURRENT_TIMESTAMP:
-CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );
-
- 4.16) Jak provést vnejsí spojení (outer join)?
-
- PostgreSQL podporuje standardní SQL syntaxi pro vnejsí spojení. Zde
- jsou dva príklady:
-SELECT *
-FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-
- nebo
-SELECT *
-FROM t1 LEFT OUTER JOIN t2 USING (col);
-
- Tyto identické dotazy spojí sloupec t1.col k sloupci t2.col, a jeste
- vrátí vsechny nespárované rádky t2 (ty, které nedohledá v t2). RIGHT
- JOIN by pripojil vsechny nespárované rádky z t2. FULL JOIN vrátí
- vsechny spárované rádky i vsechny zbývající rádky z obou tabulek.
- Klícové slovo OUTER je volitelné. Bezná operace JOIN se také oznacuje
- jako vnitrní spojení.
-
- 4.17) Jak provést dotaz napríc nekolika databázemi?
-
- Neexistuje zádný zpusob, jak se v dotazu odkazovat na tabulky z jiné
- nez aktuální databáze. A to protoze má systémové tabulky ulozené
- nezávisle v kazdé databázi a není tak úplne zrejmé, jak by se dotaz
- provedený napríc databázemi mel chovat.
-
- Jeden z doplnku dblink umoznuje dotaz nad nekolika tabulkami pomocí
- funkcí. Druhý zpusob je simultální pripojení klienta ke vsem
- relevantním databázím a sloucení výsledku na strane klienta.
-
- 4.18) Muze funkce vrátit více rádku nebo sloupcu?
-
- Jde to jednoduse pomocí set-returning funkce. Více na
- http://www.postgresql.org/docs/techdocs.17.
-
- 4.19) Co je prícinou chyby "relation with OID xxxxx does not exist"?
-
- Nechteným vedlejsím efektem kesování SQL dotazu v PL/pgSQL funkci je
- problém s neplatnými odkazy na docasné tabulky, které byly od prvního
- spustení funkce zruseny a znovu vytvoreny pred dalsím spustením
- PL/pgSQL funkce. Resením je pouzít príkaz EXECUTE a to proto, ze
- provádecí plán SQL príkazu spousteného príkazem EXECUTE se vytvárí
- pokazdé znovu (neukládá se do cache).
-
- Tento problém by se nemel vyskytovat u PostgreSQL verze 8.3 a vyssích
- verzích.
-
- 4.20) Jaké jsou moznosti replikace databází?
-
- Replikaci databáze umoznuje nekolik technoligií. Kazdá má urcité
- výhody a nevýhody.
-
- Master/Slave replikaci podporuje jeden hlavní server, který prijímá
- pozadavky na zápis a ctení, a nekolik podrízených serveru, které
- umoznují pouze ctení (SELECT). Nejrozsírenejsím volne dostupným
- resením tohoto typu je Slony-I.
-
- Replikace typu Multi-master podporuje existenci nekolika serveru s
- povoleným zápisem na více replikovaných serverech. Toto resení zvysuje
- zátez serveru, protoze je nutná synchronizace serveru.
- Nejrozsírenejsím volne dostupným resením je PGCluster.
-
- Jeste existuje nekolik komercních a hardware resení replikací
- podporujících ruzné modely replikace.
-
- 4.21) Proc v dotazu nejsou rozpoznány názvy mých tabulek nebo funkcí? Proc
- jsou velká písmena v názvech automaticky prevedena na malá písmena?
-
- Nejcastejsím duvodem nerozpoznání názvu objektu bylo pouzití vlození
- názvu sloupce nebo tabulky mezi uvozovky pri zakládání tabulky. Pokud
- se název zapíse mezi uvozovky, pak je case sensitive, a v dusledku
- toho je nutné názvy techto sloupcu nebo tabulek v SQL príkazech také
- vkládat mezi uvozovky (pokud obsahují velká písmena). Nekteré
- programy, jako je napríklad pgAdmin, automaticky pouzívají uvozovky.
- Takze pokud chcete, aby systém identifikoval identifikátor, musíte:
- * nepouzívat uvozovky v príkazu CREATE TABLE
- * v identifikátoru pouzít pouze malá písmena
- * v dotazech vkládat identifikátory do uvozovek
+++ /dev/null
-PostgreSQL FAQسوالاتي كه اغلب در مورد PostgreSQL‌
-پرسيده مي شوند
-تاريخ آخرين Ø§ØµÙ„Ø§Ø Ø§ÙŠÙ† Ù\81ايل: 28 شهریور 1383 هجری
-شمسی
-نگهدارنده اصلي Ù\81ايل (زبان انگليسي)در ØØ§Ù„
-ØØ§Ø¶Ø± : Bruce Momjian pgman@candle.pha.pa.us
-نگهدارنده Ù\81ايل به زبان Ù\81ارسي: m.taghizadeh@imenafzar.net
- Ù…ØÙ…ود تقي‌زاده مهرجردی
-
-آخرين نسخه اين Ù\81ايل را مي‌توانيد از اين
-آدرس بگيريد http://www.PostgreSQL.org/docs/faqs/FAQ.html
-سوالاتي كه در مورد يك سکوی(پلتÙ\81رم) خاص است در
-اين آدرس جواب داده شده اند
-http://www.PostgreSQL.org/docs/index.html
-
-
-
-سوالات عمومي
-1.1) PostgreSQL چيست Ùˆ چگونه بايد آن را تلÙ\81ظ كرد؟
-1.2) قانون كپي رايت‌ (ØÙ‚وق معنوي) در مورد
-PostgreSQL به چه صورت است؟
-1.3) PostgreSQL‌ روي چه نوع يونيكسهايي اجرا
-مي‌شود؟
-1.4) روي Ú†Ù‡ Ù…ØÙŠØ·Ù‡Ø§ÙŠ ØºÙŠØ± يونيكسي مي‌توان آن را
-اجرا كرد؟
-1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟
-1.6) از كجا خدمات پشتيباني بگيرم؟
-1.7) آخرين نسخه اعلام شده چيست؟
-1.8) چه مستندات و راهنمائيهايي وجود دارند؟
-1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
-امكاناتي كه در اين پايگاه داده وجود ندارد
-مطلع شوم؟
-1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟
-1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟
-1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL
-ملØÙ‚ شوم؟
-1.13) چگونه مي‌توانم يك اشكال را به گروه
-برنامه نويس اعلام كنم؟
-1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به
-چه صورت است؟
-1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
-كمك كنم؟
-
-سوالات مربوط به استÙ\81اده از پايگاه داده
-2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
-2.2) Ú†Ù‡ ابزارهايي براي استÙ\81اده از PostgreSQL‌ با
-صÙ\81ØØ§Øª وب وجود دارد؟
-2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙ\81يكي دارد؟
-2.4) با چه زبانهاي برنامه‌نويسي مي‌توان با
-PostgreSQL‌ ارتباط برقرار كرد؟
-
-سوالات مربوط به راهبري
-3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
-از /usr/local/pgsql/ نصب كنم؟
-3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
-كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
-3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
-را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
-3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
-را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
-3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
-كنترل كنم؟
-3.6) براي كارايي بالاتر و بهتر پايگاه داده من
-چه تنظيماتي را بايد انجام دهم؟
-3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
-دارد؟
-3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
-وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
-3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
-3.10) چرا براي به روز كردن نسخه پايگاه داده من
-بايد كل داده ها را dump‌ و مجدداً restore كنم؟
-3.11) از Ú†Ù‡ سخت اÙ\81زاري بايد استÙ\81اده كنم؟
-
-سوالات عملياتي
-4.1) تÙ\81اوت بين binary cursors Ùˆ Normal cursors چيست؟
-4.2) من چگونه مي‌توانم Ù\81قط روي چند رديÙ\81 اول يا
-يك رديÙ\81 تصادÙ\81ÙŠ درخواست SELECT‌ بزنم؟
-4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
-چيزهايي كه در psql‌ وجود دارد را ببينم؟
-4.4) چگونه يك ستون جدول را ØØ°Ù\81 مي‌كنيد؟ چگونه
-نوع داده آن را عوض كنيم؟
-4.5) ØØ¯Ø§ÙƒØ«Ø± اندازه يك رديÙ\81،‌ جدول Ùˆ خود
-پايگاه داده چقدر است؟
-4.6) چقدر Ù\81ضاي ديسك سخت براي ذخيره كردن
-داده‌‌هاي يك Ù\81ايل متني مورد نياز است؟
-4.7) چگونه مي‌توانم بÙ\81همم كه Ú†Ù‡ كاربران،‌
-پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ\81
-شده است؟
-4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
-چرا از نمايه ها استÙ\81اده نمي‌كنند؟
-4.9) چگونه مي‌توانم Ù†ØÙˆÙ‡ بررسي درخواست را
-توسط بهينه‌ساز درخواستها مشاهده كنم؟
-4.10) نمايه R-tree‌ چيست؟
-4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
-Optimizer)
-4.12) چگونه از عبارات منظم براي جستجو استÙ\81اده
-كنم؟ چگونه جستجويي انجام دهم كه ØØ³Ø§Ø³ به متن
-نباشد؟ چگونه براي يك جستجوي غير ØØ³Ø§Ø³ به متن
-از نمايه استÙ\81اده كنم؟
-4.13) چگونه مي‌توانم در يك درخواست تشخيص دهم
-كه يك Ù\81يلد NULL‌ است؟
-4.14) تÙ\81اوت بين گونه‌هاي مختلÙ\81 character چيست؟
-4.15.1) چگونه مي‌توانم يك Ù\81يلد سريال يا
-اÙ\81زايشي ايجاد كنم؟
-4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
-بدانم؟
-4.15.3) آیا توابع ()nextval و ()currval منجر به ایجاد
-شرایط race برای سایر کاربران می شوند؟
-4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort
-شده مجدداً استÙ\81اده نمی شود؟ چرا بین اعداد
-سریالی یک Ù\81اصله خالی ایجاد Ù…ÛŒ شود؟
-4.16) OID و TID چه هستند؟
-4.17) معني بعضي از ترمها و كلماتي كه در PostgreSQL‌
-استÙ\81اده مي‌شود چيست؟
-4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc"
-مي‌گيرم؟
-4.19) از كجا تشخيص دهم كه ويرايش يا نسخه
-PostgreSQLيي كه من استÙ\81اده مي‌كنم چيست؟
-4.20) چرا در ØÛŒÙ† اجرای عملیات روی large-objectها
-خطای "invalid large obj descriptor"به وجود می آید؟
-4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان
-جاري را به عنوان مقدار پيش‌Ù\81رض داشته باشد؟
-4.22) چرا زير درخواستهايي كه از IN استÙ\81اده
-مي‌كنند كند هستند؟
-4.23) چگونه مي‌توانم يك Ø§Ù„ØØ§Ù‚ خارجي (outer join)
-انجام دهم؟
-4.24) چگونه مي‌توان درخواستهايي از چند پايگاه
-داده توليد كرد؟
-4.25) چگونه خروجي يك تابع مي‌تواند چند رديÙ\81
-يا ستون باشد؟
-4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان
-جداول موقت را ايجاد يا ØØ°Ù\81 كرد؟
-4.27) چه گزينه‌هايي براي تكرار (replication) وجود
-دارد؟
-4.28) چه گزينه‌هايي براي رمزنگاري وجود دارد؟
-
-توسعه PostgreSQL
-5.1) من يك تابع نوشته‌ام. چگونه آن را در psql
-اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
-5.2) چگونه مي‌توانم در توليد نوع‌ها و توابع
-جديد و جالب براي PostgreSQL‌ همكاري و مشاركت
-داشته باشم.
-5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم
-كه خروجي آن يك ‌tuple (چند تايي) باشد؟
-5.4) من يك Ù\81ايل منبع را عوض كرده ام چرا در
-عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟
-
-
-
-
-سوالات عمومي
-1.1) PostgreSQL چيست Ùˆ چگونه آن را بايد تلÙ\81ظ كرد؟
-PostgreSQL به صورت Post-Gres-Q-L‌ تلÙ\81ظ مي‌شود. يك Ù\81ايل
-صوتي در آدرس http://www.postfresql.org/postgresql.mp3‌ براي
-كساني كه مايلند تلÙ\81ظ صØÙŠØ را بشنوند وجود
-دارد.
-PostgreSQL از روي سيستم مديريت پايگاه داده POSTGRES
-توسعه داده شده است (هنوز هم بعضي مواقع براي
-سادگي به آن Postgres Ú¯Ù\81ته مي‌شود) كه يك نمونه
-تØÙ‚يقاتي از پايگاه داده‌هاي نسل بعد است.
-PostgreSQL همان الگوي داده قوي و انواع داده را
-ØÙ\81ظ كرده است ولي زبان PostQuel را با يك
-زيرمجموعه پيشرÙ\81ته از SQL جايگزين كرده است.
-PostgreSQL متن باز بوده و متن كامل آن در دسترس
-است.
-PostgreSQL توسط يك تيم برنامه‌نويس كه همگي در
-گروه پست الكترونيك برنامه‌نويسان PostgreSQL
-عضو هستند، انجام مي‌شود. هماهنگ كننده اصلي
-در ØØ§Ù„ ØØ§Ø¶Ø± Marc G. Fournier‌ به آدرس scrappy@PostgreSQL.org
-مي‌باشد. (براي ديدن Ù†ØÙˆÙ‡ ملØÙ‚ شدن به اين تيم
-قسمت 1.6 را ببينيد). اين تيم در ØØ§Ø¶Ø± مسئوليت
-تمام مسائل مربوط به برنامه‌نويسي PostgreSQL را
-بر عهده دارد. اين يك پروژه گروهي است Ùˆ ØªØØª
-كنترل هيچ شركتي نيست. براي اطلاعات بيشتر در
-مورد اين تيم به آدرس
-http://www.PostgreSQL.org/docs/faqs/FAQ_DEV.html مراجعه كنيد.
-اولين نسخه PostgreSQL‌ توسط Andrew Yu and Jolly Chen به
-وجود آمد. اÙ\81راد بسياري در توسعه Ùˆ رÙ\81ع اشكال Ùˆ
-انتقال آن شركت كرده‌اند. متن اصلي Postgres كه
-PostgreSQL از روي آن نوشته شده است، توسط تعداد
-زيادي دانشجوي كارشناسي ارشدو دانشجوي
-كارشناسي Ùˆ تيم برنامه‌نويسي كه ØªØØª نظر
-پروÙ\81سور Michael Stonebrake در دانشگاه
-بركلي،‌كاليÙ\81رنيا كار مي‌كرده‌اند نوشته
-شده است.
-نام اصلي نرم اÙ\81زار در دانشگاه بركلي Postgres‌
-بود. در سال 1995 بعد از اضاÙ\81Ù‡ شدن SQL نام آن به
-Postgres95 تغيير داده شد. در سال 1996 نام آن به
-PostgreSQL تغيير داده شد.
-1.2) قوانين كپي رايت در مورد PostgreSQL به چه صورت
-است؟
-PostgreSQL ØªØØª قانون كپي رايت زير قرار دارد:
-PostgreSQL Data Base Management System
-Portions copyright (c) 1996-2004, 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.
-قانون بالا ليسانس BSD كه يك ليسانس كلاسيك
-براي متن‌هاي باز است مي‌باشد. هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ
-در مورد Ù†ØÙˆÙ‡ استÙ\81اده از متن در آن ديده
-نمي‌شود. ما آن را دوست داريم و هيچ قصدي براي
-تغيير آن نداريم.
-1.3) PostgreSQL‌ روي چه نوع يونيكسهايي اجرا
-مي‌شود؟
-در ØØ§Ù„ت كلي PostgreSQL روي هر پلتÙ\81رم (سكوي) سازگار
-با يونيكس اجرا مي‌شود. ليست پلتÙ\81رمهايي كه
-تاكنون PostgreSQL‌ روي آنها نصب و تست شده است
-درقسمت دستورالعملهاي نصب آمده است.
-1.4) روي Ú†Ù‡ Ù…ØÙŠØ·Ù‡Ø§ÙŠ ØºÙŠØ± يونيكسي مي‌توان آن را
-اجرا كرد؟
-Client
-مي‌توان psql, كتابخانه libpq و ساير واسطها و
-برنامه‌هاي كاربردي را طوري كامپيل كرد كه
-روي Ù…ØÙŠØ·Ù‡Ø§ÙŠ ÙˆÙŠÙ†Ø¯ÙˆØ² نيز اجرا شوند. در اين
-ØØ§Ù„ت Client روي ويندوز اجرا مي‌شود Ùˆ از طربق
-شبكه Ùˆ پروتكل TCP/IP با يك سرور كه روي يك پلتÙ\81رم
-لينوكس در ØØ§Ù„ اجراست ارتباط برقرار
-مي‌كند.يك Ù\81ايل win32.mak همراه با كدهاي PostgreSQL
-وجود دارد كه براي كامپيل كردن كتابخانه libpq و
-برنامه psql مي‌باشد. P‌ostgreSQL‌ همچنين امكان
-ارتباط به صورت ODBC‌ را نيز دارد.
-Server
-با استÙ\81اده از Cygwin‌ Ùˆ كتابخانه Cygnus مي‌توان
-پايگاه داده را روي ويندوز NT و يا Win2K اجرا
-كرد.براي ديدن اطلاعات بيشتر Ù\81ايل pgsql/doc/FAQ_MSWIN
-‌را كه بهمراه توزبع‌هاي PostgreSQL آمده است
-ببينيد Ùˆ يا اينكه به اين صÙ\81ØÙ‡
-http://www.PostgreSQL.org/docs/faqs/text/FAQ_MSWIN مراجعه كنيد.
-در ØØ§Ù„ ØØ§Ø¶Ø± يك عمليات انتقال PostgreSQL به روي
-سكوهاي Win NT/2000/XP در جريان است. براي ديدن وضعيت
-اين پروژه به سايت‌هاي
-http://momjian.postgresql.org/main/writings/pgsql/win32.htm Ùˆ
-http://techdocs.postgresql.org/guides/Windows مراجعه كنيد.
-همچنين يك عمليات انتقال بر روي Novell Netware 6 نيز
-در ØØ§Ù„ انجام است كه در سايت http://forge.novell.com
-مي‌توانيد اطلاعات بيشتر را ببينيد.
-1.5) PostgreSQL را از كجا مي‌توانم بگيرم؟
-PostgreSQL‌ را از سايت اصلي آن ftp://ftp.PostgreSQL.org/pub
-مي‌توانيد بگيريد. در صÙ\81ØÙ‡ اصلي سايت ليست
-ساير آدرسهايي كه مي‌توانيد PostgreSQL‌ را از
-آنها بگيريد آمده است.
-1.6) از كجا خدمات پشتيباني بگيرم؟
-گروه پستي اصلي pgsql-general@PostgreSQL.org مي‌باشد. اين
-گروه براي Ø¨ØØ« در مورد موضوعات مختلÙ\81 در زمينه
-PostgreSQL است. براي عضو شدن در اين گروه پستي يك
-نامه الكترونيكي به آدرس گروه با Ù…ØØªÙˆÙŠØ§ØªÛŒ كه
-در ادامه آمده است ارسال كنيد. در قسمت Subject
-چيزي ننويسيد.
- subscribe
- end
-آدرس گروه: pgsql-general-request@PostgreSQL.org
-همچنين يك گروه پستي هم به صورت ارسال چكيده
-پيامها وجود دارد. براي عضو شدن در اين گروه يك
-نامه با Ù…ØØªÙˆÙŠØ§Øª زير به این آدرس ارسال كنيد.
-pgsql-general-digest-request@PostgreSQL.org
- subscribe
- end
-در اين گروه هر موقع ØØ¬Ù… نامه‌ها به 30
-كيلوبايت رسيد براي تمام اعضاء ارسال مي‌شود.
-گروه پستي بررسي اÙ\90شكالات هم وجود دارد. براي
-عضو شدن در اين گروه يك نامه با Ù…ØØªÙˆÙŠØ§Øª زير به
-pgsql-bugs-request@PostgreSQL.org ارسال كنيد.
- subscribe
- end
-گروه پستي مخصوص توسعه دهندگان
-(برنامه‌نويسان) نيز وجوددارد. براي عضويت در
-اين گروه يك نامه به آدرس زير با Ù…ØØªÙˆÙŠØ§Øª مشخص
-شده ارسال كنيد. pgsql-hackers-request@PostgreSQL.org
- subscribe
- end
-گروههاي پستي ديگري نيز در زمينه PostgreSQL‌ وجود
-دارد كه مي‌توانيد در سايت http://www.postgresql.org
-ببينيد.
-همچنين يك كانال IRC روي Freenode و EFNet بنام PostgreSQL#
-وجود دارد. شما مي‌توانيد از Ù\81رمان يونيكسي irc
--c '#PostgreSQL' "$USER" irc.phoenix.net. يا irc -c '#PostgreSQL' "$USER"
-irc.freenode.net استÙ\81اده كنيد.
-ليست شركتهايي كه از طريق آنها مي‌توانيد
-خدمات پشتيباني تجاري در زمينه PostgreSQL درياÙ\81ت
-كنيد در اين آدرس http://techdocs.postgresql.org/companies.php
-موجود است.
-1.7) آخرين نسخه اعلام شده چيست؟
-آخرين نسخه PostgreSQL‌ كه وجود دارد 7.4.3 است.
-هدÙ\81 ما آن است كه هر 6 ماه تا 8 ماه يك نسخه جديد
-ارائه شود.
-1.8) چه مستندات و راهنمائيهايي وجود دارند؟
-چندين كتابچه Ùˆ صÙ\81ØØ§Øª راهنما Ùˆ مثالهاي كوچك
-همراه با متن اصلي PostgreSQL‌ در شاخه doc وجود
-دارد. براي ديدن صÙ\81ØØ§Øª راهنما مي‌توانيد به
-سايت http://www.PostgreSQL.org/docs نيز مراجعه نماييد.
-دو كتاب در زمينه PostgreSQL‌ در آدرس‌هاي
-http://www.PostgreSQL.org/docs/awbook.htm Ùˆ http://www.commandprompt.com/ppbook
-وجود دارد. ليستي از كتابهايي كه قابل خريد
-است در آدرس http://techdocs.PostgreSQL.org/techdocs/bookreviews.php
-وجود دارد. همچنين ليستي از مقالات Ù\81ني در
-مورد PostgreSQL در آدرس http://techdocs.PostgreSQL.org وجود
-دارد.
-برنامه psql يك دستور d\ دارد كه اطلاعاتي در
-مورد انواع داده‌هاي قابل تعريÙ\81 Ùˆ عملگر‌ها
-و توابع و ... به ما نشان مي‌دهد. در سايت اصلي
-ما اطلاعات بيشتري را مي‌توانيد پيدا كنيد.
-1.9) چگونه مي‌توانم ازاشكالات شناخته شده و يا
-امكاناتي كه در اين پايگاه داده وجود ندارد
-مطلع شوم؟
-PostgreSQL يك زير مجموعه پيشرÙ\81ته از SQL-92 را
-پشتيباني مي‌كند. در ليست TODO اÙ\90شكالات
-شناخته شده يا امكاناتي كه وجود ندارد و يا
-برنامه‌‌هاي آينده آمده است.
-1.10) چگونه مي‌توانم زبان SQL را ياد بگيرم؟
-كتاب PostgreSQL در آدرس SQL http://www.PostgreSQL.org/docs/awbook.html
-‌را آموزش مي‌دهد. همچنين يك كتاب در آدرس
-http://www.commandprompt.com/ppbook وجود دارد. يك راهنماي
-خيلي خوب هم در سايت‌هاي
-http://www.intermedia.net/support/sql/sqltut.shtm Ùˆ
-http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM Ùˆ
-http://sqlcourse.com در مورد SQL وجود دارد.
-كتاب ديگري كه مي‌توان براي يادگيري SQL از آن
-استÙ\81اده كرد كتاب "SQL را در 21 روز ياد بگيريد،‌
-ويرايش دوم" در سايت
-http://members.tripod.com/er4ebus/sql/index.htm مي‌باشد.
-تعداد زيادي از كاربران كتاب The Practical SQL را
-ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡Ù†Ø¯. كتاب ديگر The Complete Refrence SQL
-انتشارات McGraw-Hill مي‌باشد.
-1.11) آيا PostgreSQL مشكل Y2K‌ دارد يا خير؟
-خير،‌PostgreSQL‌ با تاريخ‌هاي قبل و بعد از 2000
-مشكلي ندارد.
-1.12) چگونه مي‌توانم به تيم برنامه نويس PostgreSQL
-ملØÙ‚ شوم؟
-ابتدا،‌آخرين سورس را دونلود كرده و مستندات
-مربوط به برنامه‌نويسي PostgreSQL را در سايت
-مطالعه كنيد. سپس به گروههاي پستي ‌ pgsql-patches و
-pgsql-hackers عضو شويد. در مرØÙ„Ù‡ آخر وصله‌هاي با
-كيÙ\81يت بالا را به pgsql-patches ارسال كنيد.
-تعداد زيادي از برنامه‌نويسان وجود دارند كه
-امتياز انجام تغييرات در cvs‌ را دارند. هر
-كدام از آنها تعداد زيادي وصله‌‌ با كيÙ\81يت
-بالا به گروه ارسال كرده‌اند كه اعتماد
-گردانندگان PostgreSQL را به دست آورده‌اند.
-1.13) چگونه مي‌توانم يك اÙ\90شكال را به گروه
-برنامه نويس اعلام كنم؟
-لطÙ\81اً صÙ\81ØÙ‡ مربوط به اÙ\90شكالات PostgreSQL را در
-سايت http://www.PostgreSQL.org/bugs/bugs.php مشاهده‌ كنيد. در
-اين سايت Ù†ØÙˆÙ‡ گزارش Ùˆ ارسال يك اشكال توضيØ
-داده شده است.
- همچنين براي ديدن نسخه‌هاي جديدتر PostgreSQL و
-يا وجود يك وصله جديد از سايت ftp://ftp.PostgreSQL.org/pub
-بازديد كنيد.
-1.14) وضعيت PostgreSQL‌ در مقايسه با ساير DBMSها به
-چه صورت است؟
-راههاي مختلÙ\81ÙŠ براي اندازه‌گيري Ùˆ مقايسه
-نرم‌اÙ\81زارها وجود دارد كه عبارتند از
-امكانات، كارايي، قابليت اعتماد، پشتيباني و
-قيمت
- امكانات
- PostgreSQL بيشتر امكانات موجود در سيستم‌هاي
- پايگاه داده تجاري بزرگ نظير transactions, subselets,
- triggers, views, foreign key referential integrity Ùˆ sophisticated
- locking‌ را دارد. در PostgreSQL‌‌ امكاناتي وجود
- دارد كه پايگاههاي داده ديگر آن را ندارند
- نظير user-defined types‌و Inheritance‌و rules‌و multi-version
- concurrency control
-
- كارايي
- كارايي PostgreSQL در ØØ¯ بقيه سيستم‌هاي
- تجاري و متن باز است. در بعضي موارد سريعتر و
- در بعضي موارد از آنها كندتر است. در مقايسه
- با MySQL براي كاربران بيشتر و درخواست‌هاي
- پيچيده و بار زياد خواندن/نوشتن سريعتر است.
- در درخواست‌هاي ساده SELECT‌ از MySQL كندتر است.
- البته MySQL خيلي از امكانات PostgreSQL كه در بالا
- به آن اشاره شد را ندارد. هدÙ\81 اصلي ما امكانات
- و قابليت اعتماد بالاست در ضمن آنكه تلاش
- مي‌كنيم تا كارايي آن نيز بهبود يابد. در
- آدرس http://openacs.org/philosophy/why-not-mysql.html يك مقايسه
- جالب بين MySQL Ùˆ PostgreSQL وجود دارد. از طرÙ\81 ديگر
- MySQL‌ يك شركت است كه Ù…ØØµÙˆÙ„ خود را به صورت متن
- باز ارائه مي‌كند ولي براي نرم‌اÙ\81زار غير
- متن باز خود Ø§ØØªÙŠØ§Ø¬ به ليسانس تجاري دارد بر
- خلاÙ\81 PostgreSQL كه يك گروه كاملاً متن باز هستند.
-
- قابليت اطمينان
- ما Ù\81كر مي‌كنيم كه يك سيستم پايگاه
- داده‌اي كه مطمئن نباشد ارزشي ندارد. ما
- تمام تلاشمان را براي ارائه كدهاي پايداري
- كه به خوبي تست شده باشند Ùˆ كمترين اÙ\90شكالات
- را داشته باشند مي‌كنيم. هر نسخه جديدي كه
- ارائه مي‌شود ØØ¯Ø§Ù‚Ù„ يك ماه را در مرØÙ„Ù‡ تست
- بتا مي‌گذراند. ما بر اين باور هستيم كه
- قابليت اطمينان PostgreSQL‌ در مقايسه با ساير
- سيستم‌هاي پايگاه داده قابل توجه است و
- نسخه‌هايي كه تاكنون ارائه شده است نشان
- مي‌دهد كه ما توانايي ارائه يك سيستم قوي و
- Ù…ØÙƒÙ… Ùˆ مطمئن را كه آماده بهره‌برداري است
- داريم.
- پشتيباني
- گروههاي پستي ما امكان ارتباط و تماس به
- گروه بزرگي از برنامه نويسان و كاربران را
- مي‌دهد كه مي‌توانند در ØÙ„ مشكلات به
- ديگران كمك كنند. دسترسي مستقيم به
- برنامه‌نويسان و گروههاي كاربران و
- راهنماها و كداصلي باعث مي‌شود كه
- پشتيباني PostgreSQL نسبت به ساير پايگاههاي
- داده به Ù†ØÙˆ بهتري انجام شود. همچنين امكان
- ارائه خدمات پشتيباني به صورت تجاري نيز
- وجود دارد. براي ديدن اطلاعات بيشتر به FAQ
- section 1.6 مراجعه كنيد.
- قيمت
- هم براي استÙ\81اده تجاري Ùˆ هم غير تجاري هيچ
- هزينه‌اي نبايد پرداخت شود. هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ
- براي انجام تغييرات در PostgreSQL توسط استÙ\81اده
- كنندگان وجود ندارد به جز مواردي كه در
- ليسانس BSD به آن اشاره شده است.
-1.15) من چگونه مي‌توانم از نظر مالي به PostgreSQL
-كمك كنم؟
-PostgreSQL داراي يك ساختار تشكيلاتي درجه اول است
-كه آن را مديون Marc Fournier‌ است كه اين ساختار را
-ايجاد كرده است.
-كيÙ\81يت يك ساختار براي يك پروژه متن باز بسيار
-اهميت دارد. يك ساختار خوب مي‌تواند مانع از
-ØÙˆØ§Ø¯Ø«ÙŠ Ø´ÙˆØ¯ كه در ØØ±ÙƒØª روبه‌جلوي پروژه خللي
-وارد مي‌كنند.
-البته اين ساختار تشكيلاتي ارزان نيست.
-هزينه‌هاي ثابت ماهانه و روزمره براي
-نگهداري Ùˆ ØÙ\81ظ اين ساختار مورد نياز است. اگر
-شما يا شركت شما مايل است كه از نظر مالي به
-اين ØØ±ÙƒØª كمك كند لطÙ\81اً به سايت
-http://store.pgsql.com/shopping مراجعه كرده و كمك خود را
-اهدا كنيد.
-هر چند در صÙ\81ØÙ‡ اصلي عبارت PostgreSQL,Inc‌ ذكر شده
-است ولي مشاركت عمدتاً براي پشتيباني از
-پروژه PostgreSQL‌ مي باشد و نه براي يك شركت مشخص.
-اگر ØªØ±Ø¬ÙŠØ Ù…ÙŠâ€ŒØ¯Ù‡ÙŠØ¯ مي‌توانيد يك Ú†Ùƒ به آدرس
-مشخص شده ارسال كنيد.
-اگر يك استÙ\81اده موÙ\81Ù‚ از PostgreSQL سراغ داريد
-لطÙ\81اً آن را به سايت http://advocacy.postgresql.org گزارش
-دهيد.
-
-
-
-سوالات مربوط به استÙ\81اده از پايگاه داده
-2.1) آيا هيچ درايور ODBC‌ براي PostgreSQL وجود دارد؟
-دو درايور ODBC بنامهاي psqlODBC‌ و OpenLink براي
-PostgreSQL‌ وجود دارد.
-براي گرÙ\81تن psqlODBC به سايت
-http://gborg.postgresql.org/project/psqlodbc/projdisplay.php مراجعه
-كنيد.
-OpenLlink را از اين سايت http://www.openlinksw.com
-مي‌توانيد بگيريد. اين درايور با
-نرم‌اÙ\81زارهاي مختلÙ\81 ODBC كار مي‌كند بنابراين
-شما قادر خواهيد بود با استÙ\81اده از OpenLink روي
-اكثر سكو‌هايي كه نرم‌اÙ\81زارODBC‌دارند بدون
-مشكل به PostgreSQL نيز متصل شويد.
-اين Ù…ØØµÙˆÙ„ به كساني كه Ø§ØØªÙŠØ§Ø¬ به خدمات
-پشتيباني تجاري دارند Ù\81روخته مي‌شود. ولي
-نسخه آزاد اين نرم‌اÙ\81زار هميشه در درسترس
-مي‌باشد. براي كسب اطلاعات بيشتر سوالات خود
-را به آدرس postgres95@openlink.co.uk ‌ارسال نماييد.
-2.2) Ú†Ù‡ ابزارهايي براي استÙ\81اده از PostgreSQL‌ با
-صÙ\81ØØ§Øª وب وجود دارد؟
-در سايت http://www.webreview.com براي استÙ\81اده از
-PostgreSQL‌ در صÙ\81ØØ§Øª وب راهنماييهاي خوبي وجود
-دارد.
-براي تركيب Ùˆ استÙ\81اده در صÙ\81ØØ§Øª وب زبان PHP‌ يك
-واسط بسيار مناسب است. اطلاعات بيشتر راجع به
-PHP‌در سايت http://www.php.net وجود دارد.
-مثالهايي نيز با استÙ\81اده از Perl‌ Ùˆ CGI.pm Ùˆ mod_perl
-وجود دارد.
-2.3) آيا PostgreSQL‌ يك واسط كاربري گراÙ\81يكي دارد؟
-چند نرم اÙ\81زار گراÙ\81يكي براي PostgreSQL‌ وجود دارد
-كه شامل pgAccess درسايت http://www.pgaccess.org و pgAdmin III در
-سايت http://www.pgadmin.org و RHDB Admin در سايت
-http://sources.redhat.com/rhdb و Rekall در سايت
-http://www.thekompany.com/products/rekall مي‌باشد. همچنين يك
-phpPgAdmin هم در سايت http://phppgadmin.sourceforge.net وجود
-دارد كه يك واسط وبي براي مديريت PostgreSQL
-مي‌باشد.
-براي ديدن اطلاعات بيشتر راجع به
-نرم‌اÙ\81زارهاي گراÙ\81يكي براي PostgreSQL به آدرس
-http://techdocs.postgresql.org/guides/GUITools مراجعه كنيد.
-2.4) با چه زبانهاي برنامه‌نويسي مي‌توان با
-PostgreSQL‌ ارتباط برقرار كرد؟
-بيشتر زبانهاي برنامه‌نويسي مي‌توانند با
-PostgreSQL‌ ارتباط برقرار كنند. به همراه سورس
-PostgreSQL تعدادي از واسطهاي مورد نياز براي
-ارتباط با پايگاه داده از طريق زبانهاي مختلÙ\81
-آمده است كه در زير ليست آنها را مشاهده
-مي‌كنيد.
- C (libpq)
- Embedded C (ecpg)
- Java (jdbc)
- Python (PyGreSQL)
- TCL (libpgtcl)
-واسطهاي ديگر در سايت http://gborg.postgresql.org در قسمت
-Drivers/Interfaces وجود دارد.
-
-
-
-سوالات مديريتي
-3.1) چگونه مي‌توانم PostgreSQL‌ را در شاخه‌اي غير
-از /usr/local/pgsql/ نصب كنم؟
-موقع اجراي دستور configure از گزينه prefix-- استÙ\81اده
-كنيد.
-3.2) چرا موقعي كه من برنامه postmaster‌ را اجرا مي
-كنم پيام Bad system call‌ و يا core dump ‌مي‌گيرم؟
-به دلايل مختلÙ\81 ممكن است اين اتÙ\81اق بيÙ\81تد. اما
-در قدم اول شما مطمئن شويد كه كه امكانات
-اضاÙ\81Ù‡ System V‌ در كرنل شما نصب شده باشد. PostgreSQL
-براي اجرا شدن نياز به استÙ\81اده از امكانات
-ØØ§Ù\81ظه مشترك Ùˆ سماÙ\81ورها دارد.
-3.3) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
-را اجرا كنم خطاي IpcMemoryCreate مي‌گيرم؟
-Ø§ØØªÙ…الاً‌ قسمت ايجاد ØØ§Ù\81ظه مشترك در كرنل به
-درستي تنظيم نشده است Ùˆ يا اينكه بايد Ù\81ضاي
-ØØ§Ù\81ظه اشتراكي در كرنل را زياد كرد. ميزان
-دقيق ØØ§Ù\81ظه مشترك مورد نياز بسته به معماري Ùˆ
-Ù†ØÙˆÙ‡ استÙ\81اده از باÙ\81رها توسط برنامه postmaster
-دارد. براي بيشتر سيستم‌ها كه با تنظيمات
-پيش‌Ù\81رض كار مي‌كنند مقدار اين ØØ§Ù\81ظه ØØ¯ÙˆØ¯ 1
-مگابايت است. براي ديدن اطلاعات بيشتر راجع به
-ØØ§Ù\81ظه مشترك Ùˆ سماÙ\81ور به PostgreSQL Administrator's Guide
-مراجعه كنيد.
-3.4) چرا موقعي كه من سعي مي‌كنم برنامه postmaster‌
-را اجرا كنم خطاي IpcSemaphoreCreate مي‌گيرم؟
-اگر پيغام خطا (‌pcSemaphoreCreate: semget failed (No space left on
-device باشد به اين معني است كه تعداد سماÙ\81ورهاي
-تنظيم شده در كرنل كاÙ\81ÙŠ نيست. PostgreSQL‌ براي هر
-Ù\81رايندي كه در backend اجرا مي‌شود به يك سماÙ\81ور
-نياز دارد. يك راه ØÙ„ موقت براي اين مسئله آن
-است كه postmaster را با اعمال Ù…ØØ¯ÙˆØ¯ÙŠØª روي تعداد
-Ù\81رايندهايي كه مي‌تواند ايجاد كند اجرا كنيم.
-براي اينكار از گزينه N- و يك عدد كمتر از 32
-استÙ\81اده كنيد. راه ØÙ„ دائمي اين مشكل آن است كه
-پارامترهاي SEMMNS, SEMMNI كرنل را اÙ\81زايش دهيم.
-در زمان دسترسي خيلي زياد به پايگاه داده، ‌
-سماÙ\81ورهاي نامعتبر مي‌توانند باعث crash‌ كردن
-سيستم شوند.
-اگر پيغام خطا چيز ديگري باشد Ø§ØØªÙ…الاً به
-دليل آن است كه كرنل از سماÙ\81ورها پشتيباني
-نمي‌كند. براي ديدن اطلاعات بيشتر راهنماي
-مديريتي PostgreSQL را مطالعه كنيد.
-3.5) چگونه مي‌توانم اتصالات ساير ماشينها را
-كنترل كنم؟
-به صورت پيش Ù\81رض Ù\81قط از ماشيني كه PostgreSQL روي آن
-در ØØ§Ù„ اجراست مي‌توان با استÙ\81اده از
-سوكت‌هاي يونيكسي به آن متصل شد. ساير
-ماشين‌ها قادر نيستند به PostgreSQL متصل شوند مگر
-آنكه گزينه tcp_sockets در Ù\81ايل postgresql.conf Ù\81عال شده Ùˆ
-همچنين با Ø§ØµÙ„Ø§Ø Ù\81ايل PGDATA/ph_hba.conf هويت‌شناسي
-مبتني بر ميزبان نيز Ù\81عال شود. با اين كار
-مي‌توان اتصالات TCP/IP به PostgreSQL‌ ايجاد كرد.
-3.6) براي كارايي بالاتر و بهتر پايگاه داده من
-چه تنظيماتي را بايد انجام دهم؟
-به طور ØØªÙ… استÙ\81اده از انديس‌ها باعث بالا
-رÙ\81تن سرعت پاسخ‌گويي به درخواست‌ها خواهد
-شد. دستور EXPLAIN ANALYZE به شما امكان ديدن Ù†ØÙˆÙ‡
-پردازش يك دستور توسط PostgreSQL را مي‌دهد.
-اگر شما تعداد زيادي INSERT‌ داريد سعي كنيد
-آنها را با قرار دادن در يك Ù\81ايل با دستور COPY‌
-اجرا كنيد. اين دستور به مراتب از INSERT سريعتر
-است. ØØªÙŠâ€ŒØ§Ù„امكان سعي كنيد از تراكنشها
-استÙ\81اده نكنيد. تراكنشها مجموعه دستوراتي
-هستند كه بيند BEGIN Ùˆ â€\8dCOMMIT مي‌آيند. اگر يك
-دستور به صورت عادي اجرا شود PostgreSQL خود آن
-دستور را به صورت يك تراكنش مستقل نگاه كرده و
-اجرا مي‌كند. موقعی كه تغييرات زيادي در
-پايگاه داده انجام مي‌شود انديسهاي قبلي را
-ØØ°Ù\81 Ùˆ مجدداً‌ ايجاد كنيد.
-استÙ\81اده از گزينه o -F- در Ù\81رمان postmaster باعث غير
-Ù\81عال كردن ()fsync مي‌شود. اين دستور بعد از هر
-تراكنش اطلاعات را روي هاردديسك منتقل
-مي‌كند.
-براي اÙ\81زايش تعداد باÙ\81رهاي ØØ§Ù\81ظه اشتراكي از
-گزينه B- به همراه Ù\81رمان postmaster استÙ\81اده كنيد.
-توجه كنيد كه اگر اين عدد خيلي بزرگ باشد ممكن
-است postmaster اصلاً‌ اجرا نشود. هر باÙ\81ر 8 كيلو
-بايت ØØ§Ù\81ظه نياز دارد Ùˆ تعداد باÙ\81رها به طور
-پيش Ù\81رض 64 است.
-همچنين مي‌توان با گزينه S- ميزان ØØ§Ù\81ظه‌اي
-كه براي مرتب‌سازي‌هاي موقت توسط PostgreSQL
-استÙ\81اده مي‌شود را اÙ\81زايش داد. مقدار پيش Ù\81رض
-512 كيلو بايت است.
-استÙ\81اده از دستور CLUSTER نيز براي بالا بردن
-كارايي موثر ا ست. دستور راهنماي CLUSTER اطلاعات
-بيشتري در اين زمينه به شما مي‌دهد.
-3.7) چه امكاناتي براي پيدا كردن اشكال‌ وجود
-دارد؟
-PostgerSQL‌ امكانات مختلÙ\81ÙŠ براي گزارش دادن
-وضعيت خود دارد كه براي اشكال زدايي مي‌توان
-از آنها استÙ\81اده كرد.
-با استÙ\81اده از گزينه enable-assert-- تعداد زيادي
-()assert براي مونيتور كردن Ùˆ توقÙ\81 برنامه در صورت
-بروز خطاهاي ناخواسته Ù\81عال مي‌شود.
-هم Postmaster و هم postgres گزينه‌هاي زيادي براي
-اشكال زدايي دارند. موقعي كه postmaster را اجرا
-مي‌كنيد خروجي استاندارد Ùˆ خطا را سمت Ù\81ايل log
-ارسال كنيد.
- cd /usr/local/pgsql
- ./bin/postmaster >server.log 2>&1 &
-اين كار يك Ù\81ايل log در بالاترين شاخه PostgreSQL‌
-ايجاد مي‌كند. اين Ù\81ايل ØØ§ÙˆÙŠ Ø§Ø·Ù„Ø§Ø¹Ø§Øª Ù…Ù\81يدي
-در مورد مسائل و خطاهايي است كه براي سرور
-اتÙ\81اق اÙ\81تاده است. براي ديدن جزئيات بيشتر
-مي‌توان از d- به همراه Ù\81رمان postmaster‌ استÙ\81اده
-كرد. گزينه d- همچنين يك عدد مي‌گيرد كه نشان
-دهنده Ø³Ø·Ø Ø¬Ø²Ø¦ÙŠØ§ØªÙŠ است كه در Log‌Ù\81ايل نوشته
-مي‌شود. با بالابردن اين عدد ØØ¬Ù… اطلاعات
-توليد شده در LogÙ\81ايل نيز اÙ\81زايش مي‌يابد.
-اگر postmaster در ØØ§Ù„ اجرا نباشد، مي‌توانيم postgres
-را به طور مستقيم از خط Ù\81رمان اجرا كرده Ùˆ
-دستورات SQL را به آن بدهيم. اين كار Ù\81قط براي
-اشكال‌يابي توصيه مي‌شود. توجه كنيد كه در
-اين ØØ§Ù„ت يك دستور با كاراكتر newline خاتمه پيدا
-مي‌كند و نه با ;. اگر postmaster را با امكانات
-اشكال‌يابي كامپيل كرده باشيد مي‌توانيد با
-استÙ\81اده از يك برنامه اشكال‌ياب اجراي
-برنامه را مونيتور كنيد.
-اگر postmaster در ØØ§Ù„ اجرا باشد با دستور psql
-مي‌توان به postgres متصل شد. با پيدا كردن PID
-Ù\81رايند postgres كه psql به آن متصل شده است مي‌توان
-آن را مونيتور كرد. براي اينكار بايد يك
-برنامه اشكال‌ياب را به آن pid متصل كرد. اگر
-بخواهيم بالا آمدن postgres را مونيتور كنيم كاÙ\81ÙŠ
-است "PGOPTIONS="-W n و psql را اجرا كنيم. اين كار باعث
-مي‌شود كه postgres با n ثانيه تاخير اجرا شود و در
-اين Ù\81اصله شما مي‌توانيد برنامه اشكال‌ياب
-را به آن متصل كرده و با قرار دادن يك نقطه
-توقÙ\81 روند اجراي آن را مونيتور كنيد.
-postgres گزينه‌هاي s-‌ و A- و t-‌ دارد كه براي
-پيدا كردن اشكالات بسيار مناسب هستند.
-شما مي‌توانيد postgreSQL را با امكانات profiling
-كامپيل كنيد. اين كار باعث مي‌شود كه زمان
-اجراي دقيق هر تابع در برنامه مشخص شود.
-خروجي‌هاي توليد شده در اين ØØ§Ù„ت در Ù\81ايل
-DLINUX_PROFILE. ريخته مي‌شود.
-3.8) چرا موقعي كه من مي‌خواهم به پايگاه داده
-وصل شوم پيام "Sorry, too many clients" ‌مي‌گيرم؟
-شما بايد ØØ¯Ø§ÙƒØ«Ø± تعداد Ù\81رايندهاي همزمان
-postmaster را اÙ\81زايش دهيد. مقدار پيش Ù\81رض 32 است.
-براي اÙ\81زايش آن مي‌توان از گزينه N- استÙ\81اده
-كرد Ùˆ يا Ù\81ايل postgresql.conf را Ø§ØµÙ„Ø§Ø Ù†Ù…ÙˆØ¯
-توجه كنيد كه اگر N- مقداري بيشتر از 32 داشته
-باشد بايد مقدار B- را نيز اÙ\81زايش دهيم. اين
-مقدار بايد ØØ¯Ø§Ù‚Ù„ دو برابر مقدار N-‌ باشد.
-براي اعداد خيلي بالا بايد بعضي از
-پارامترهاي كرنل را نيز Ø§ØµÙ„Ø§Ø ÙƒØ±Ø¯.
-پارامترهايي نظير ØØ¯Ø§ÙƒØ«Ø± اندازه ØØ§Ù\81ظه
-اشتراكي SHMMAX ØŒ ØØ¯Ø§ÙƒØ«Ø± تعداد سماÙ\81ورها SEMMNI‌ Ùˆ
-SEMMNS ØŒ ØØ¯Ø§ÙƒØ«Ø± تعداد Ù\81رايندها NPROCØŒ ØØ¯Ø§ÙƒØ«Ø±
-Ù\81رايندهاي يك كاربر MAXUPRC Ùˆ ØØ¯Ø§ÙƒØ«Ø± Ù\81ايلهاي باز
-NFILE و NINODE. يكي از دلايلي كه تعداد اتصالات
-همزمان postgreSQL Ù…ØØ¯ÙˆØ¯ است آن است كه نيازهاي
-PostgreSQL بيش از منابع موجود سيستم نباشد.
-3.9) در شاخه pgsql_tmp چه چيزي قرار دارد؟
-دراين شاخه Ù\81ايلهاي موقتي قرار دارد كه با
-اجراي درخواستها به وجود آمده است. به عنوان
-مثال اگر براي اجراي دستور order by نياز به انجام
-مرتب سازي باشد Ùˆ در صورتي كه ØØ§Ù\81ظه مشخص شده
-با گزينه S- براي اينكار كاÙ\81ÙŠ نباشد سيستم يك
-Ù\81ايل موقت در اين شاخه ايجاد مي‌كند تا عمل
-مرتب سازي را انجام دهد.
-Ù\81ايلهاي موقت معمولاً به صورت اتوماتيك پاك
-مي‌شود اما اگر postgreSQL در ØÙŠÙ† مرتب سازي crash‌
-كند آن Ù\81ايلها باقي مي‌مانند. با stop Ùˆ start كردن
-برنامه postmaster اين Ù\81ايلها پاك مي‌شوند.
-3.10) چرا براي به روز كردن نسخه پايگاه داده من
-بايد كل داده ها را dump‌ و مجدداً restore كنم؟
-تيم برنامه نويس postgreSQL در نسخه‌هاي ارائه شده
-كه Ù\81قط minor آنها متÙ\81اوت است Ù\81قط تغييرات كوچكي
-اعمال مي‌كنند؛ بنابراين براي به روز كردن از
-نسخه 7.2‌به 7.2.1 نيازي به dump و restore نيست. اما در
-نسخه‌هايي كه major آنها تغيير مي‌كند غالباً
-ساختار داخلي جداول Ùˆ Ù\81ايلهاي داده تغيير
-مي‌كند. اين تغييرات معمولاً‌ پيچيده هستند.
-براي انتقال داده‌هاي موجود در پايگاه داده
-در اين ØØ§Ù„ت بايد ‌از dump Ùˆ restore استÙ\81اده كرد.
-در نسخه‌هايي كه ساختار روي ديسك تغييري
-نمي‌كند مي توان از برنامه pg_upgrade براي به روز
-كردن پايگاه داده استÙ\81اده كرد بدون اينكه
-نيازي به استÙ\81اده از dump Ùˆ restore باشد. در
-يادداشتي كه به همراه هر توزيع مي‌آيد ذكر
-شده است كه آيا برنامه pg_upgrade براي اين توزيع
-وجود دارد يا خير.
-3.11) از Ú†Ù‡ سخت اÙ\81زاري بايد استÙ\81اده كنم؟
-
-چون اكثر سخت‌اÙ\81زارهاي PC سازگار هستند مردم
-Ù\81كر مي‌كنند كه كيÙ\81يت آنها نيز يكسان است. در
-ØØ§Ù„يكه اينطور نيست. استÙ\81اده از هاردهاي SCSI Ùˆ
-ØØ§Ù\81ظه‌هاي ECC Ùˆ مادربردهاي با كيÙ\81يت بالا
-نسبت به سخت اÙ\81زارهاي ارزانتر نتايج بهتري از
-نظر كارايي و پايداري سيستم بهمراه خواهد
-داشت. PostgreSQL روي بيشتر سخت اÙ\81زارها اجرا
-مي‌شود اما اگر كارايي Ùˆ اطمينان Ù\81اكتورهاي
-مهمي هستند بايد سخت اÙ\81زار مناسب استÙ\81اده شود.
-در گروههاي پستي در مورد سخت اÙ\81زار مناسب Ùˆ
-انتخاب آن Ø¨ØØ« شده است.
-
-
-
-سوالات عملياتي
-4.1) تÙ\81اوت بين binary cursors Ùˆ Normal cursors چيست؟
-راهنماي دستور DECLARE‌ را مطالعه كنيد.
-4.2) من چگونه مي‌توانم Ù\81قط روي چند رديÙ\81 اول يا
-يك رديÙ\81 تصادÙ\81ÙŠ درخواست SELECT‌ بزنم؟
-راهنماي دستور FETCH يا SELECT...LIMIT را ببينيد.
-در واقع كل درخواست بايد بررسي و ارزيابي شود
-ØØªÙŠ Ø§Ú¯Ø± شما Ù\81قط چند رديÙ\81 اول را بخواهيد. براي
-مثال درخواست ORDER BY را در نظر بگيريد. اگر
-انديس يا نمايه‌اي براي ORDER BY وجود داشته
-باشد،‌postgreSQL‌ ممكن است بتواند Ù\81قط چند سطر
-اول درخواستي را ارزيابي كند و يا اينكه كل
-درخواست پردازش شود تا تعداد رديÙ\81‌هاي
-درخواستي توليد شود.
-براي انتخاب يك سطر تصادÙ\81ÙŠ به روش زير عمل
-مي‌كنيم:
- SELECT col
- FROM tab
- ORDER BY random()
- LIMIT 1;
-4.3) من چگونه مي‌توانم ليستي از جداول يا ساير
-چيزهايي كه در psql‌ وجود دارد را ببينم؟
-براي ديدن ليست جداول دستور dt\ را در برنامه
-psql‌ استÙ\81اده كنيد. براي ديدن ليست كامل
-Ù\81رمانها ?\ را اجرا كنيد. راه ديگر خواندن متن
-برنامه psql‌ است كه در شاخه pgsql/src/bin/psql/describe.c
-‌قرار دارد. اين Ù\81ايل ØØ§ÙˆÙŠ Ù\81رامين SQLيي است كه
-خروجي را براي دستوراتي كه با \‌در psql شروع
-مي‌شوند توليد مي‌كنند. راه ديگر اجراي psql با
-گزينه E-‌است. اينكار باعث مي‌شود كه psql قبل
-از اجرا هر دستور SQL‌متناظر آن را نشان دهد.
-PostgreSQL‌همچنين يك برنامه SQLi دارد كه مي‌توان
-با استÙ\81اده از آن اطلاعات داخلي پايگاه داده
-را استخراج كرد.
-4.4) چگونه يك ستون جدول را ØØ°Ù\81 مي‌كنيد؟ چگونه
-نوع داده آن را عوض كنيم؟
-ØØ°Ù\81 يك ستون در توزيع 7.3 با استÙ\81اده از دستور
-ALTER TABLE DROP COLUMN اضاÙ\81Ù‡ شده است. در نسخه‌هاي
-قبلي به روش زير عمل كنيد:
- BEGIN;
- LOCK TABLE old_table;
- SELECT ... -- تمام ستونها غير از ستوني كه مي‌خواهيد آن را ØØ°Ù\81 كنيد را در اينجا بياوريد
- INTO TABLE new_table
- FROM old_table;
- DROP TABLE old_table;
- ALTER TABLE new_table RENAME TO old_table;
- COMMIT;
-براي عوض كردن نوع داده يك ستون به روش زير عمل
-كنيد:
- 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) ØØ¯Ø§ÙƒØ«Ø± اندازه يك رديÙ\81،‌ جدول Ùˆ خود
-پايگاه داده چقدر است؟
-Ù…ØØ¯ÙˆØ¯ÙŠØªÙ‡Ø§ عبارتند از:
- ØØ¯Ø§ÙƒØ«Ø± اندازه پايگاه داده Ù†Ø§Ù…ØØ¯ÙˆØ¯ (تا 32 ترابايت وجود دارد)
- ØØ¯Ø§ÙƒØ«Ø± اندازه يك جدول 32 ترابايت
- ØØ¯Ø§ÙƒØ«Ø± ا ندازه يك رديÙ\81 1.6 ترابايت
- ØØ¯Ø§ÙƒØ«Ø± اندازه يك Ù\81يلد 1 گيگا بايت
- ØØ¯Ø§ÙƒØ«Ø± اندازه رديÙ\81هاي يك جدول نا Ù…ØØ¯ÙˆØ¯
- ØØ¯Ø§ÙƒØ«Ø± ستونهاي يك جدول بسته به نوع جدول بين 250 تا 6000
- ØØ¯Ø§ÙƒØ«Ø± انديسهاي يك جدول نا Ù…ØØ¯ÙˆØ¯
-البته در ØØ§Ù„ت Ù†Ø§Ù…ØØ¯ÙˆØ¯ نيز ما Ù…ØØ¯ÙˆØ¯ به ØØ¬Ù…
-هاردديسك Ùˆ Ù\81ضاي ØØ§Ù\81ظه خواهيم بود. در صورتي
-Ú©Ù‡ مقادير مشخص شده به عنوان Ù†Ø§Ù…ØØ¯ÙˆØ¯ به صورت
-غير معمولي بزرك شوند كارايي سيستم كاهش
-خواهد ياÙ\81ت.
-براي ذخيره كردن جداول با اندازه خيلي بزرگ
-نيازي نيست كه سيستم عامل امكان ايجاد
-Ù\81ايلهاي بزرگ را داشته باشد. بلكه جداول خيلي
-بزرگ به صورت Ù\81ايلهايي به ØØ¬Ù… يك گيگا بايت
-نگاهداري مي‌شوند.
-اگر اندازه بلوكهاي داده را برابر 32 كيلو بايت
-قرار دهيم ØØ¯Ø§ÙƒØ«Ø± اندازه جدول Ùˆ ØØ¯Ø§ÙƒØ«Ø± تعداد
-ستونها 4 برابر خواهد شد.
-4.6) چقدر Ù\81ضاي ديسك سخت براي ذخيره كردن
-داده‌‌هاي يك Ù\81ايل متني مورد نياز است؟
-يك پايگاه داده PostgreSQL‌ تا 5 برابر Ù\81ضايي روي
-هاردديسك براي نگاهداري يك Ù\81ايل متني نياز
-دارد.
-به عنوان مثال يك Ù\81ايل با 100000 خط را در نظر
-بگيريد كه در هر خط يك عدد صØÙŠØ Ùˆ يك توضيØ
-متني آمده است. Ù\81رض كنيد كه رشته متني به طور
-متوسط 20 بايت باشد. اندازه Ù\81ايل برابر 2.8 مگا
-بايت خواهد بود ولي PostgreSQL براي نگاهداري اين
-Ù\81ايل به 6.4 مگا بايت اطلاعات نياز خواهد داشت.
- 32 bytes: اندازه سرايند هر خط به طور تقريبي
- 24 bytes: يك عدد صØÙŠØ Ùˆ يك رشته 24 بايتي
- + 4 bytes: اشاره گر روي صÙ\81ØÙ‡ به يك چندتايي
- ----------------------------------------
- 60 bytes در هر رديÙ\81
-
-اندازه صÙ\81ØØ§Øª داده در PostgreSQL برابر با 8 كيلو بايت است
- 8192 تعداد بايت‌ها در هر صÙ\81ØÙ‡
- ------------------- = 136 تعداد رديÙ\81‌ها در يك صÙ\81ØÙ‡ پايگاه داده
- 60 تعداد بايت‌هاي هر رديÙ\81
-
- 100000 تعداد رديÙ\81ها
- -------------------- = تعدادصÙ\81ØØ§Øª پايگاه داده
- 128 تعداد رديÙ\81ها در هر صÙ\81ØÙ‡
-
-735 تعداد صÙ\81ØØ§Øª * 8192 تعداد بايت‌هاي هر صÙ\81ØÙ‡ = 6,021,120 مگا بايت
-سربار انديسها يا نمايه‌ها از اين مقدار كمتر
-است ولي چون شامل خود داده‌ها هم هست ممکن است
-اندازه آنها هم بزرگ شود.
-NULLها به صورت bitmap ذخيره مي‌شوند و از اينرو
-Ù\81ضاي بسيار كمي را اشغال مي‌كنند.
-4.7) چگونه مي‌توانم بÙ\81همم كه Ú†Ù‡ كاربران،‌
-پايگاه داده،‌ نمايه Ùˆ جداولي در سيستم تعريÙ\81
-شده است؟
-psql تعداد زيادي دستور دارد كه با \ شروع
-مي‌شوند و اين اطلاعات را در اختيار ما قرار
-مي‌دهند. براي ديدن آنها دستور ?\ را اجرا
-كنيد. همچنين جداول سيستمي كه با نام آنها pg_
-‌شروع مي‌شود نيز اين اطلاعات را در خود
-دارند. اجراي برنامه psql با گزينه l- نيز باعث
-نشان دادن ليست تمام پايگاههاي داده مي‌شود.
-همچنين Ù\81ايل pgsql/src/tutorial/syscat.source نيز Ù\81رمانهاي
-SELECT كه با استÙ\81اده از آن مي‌توان اطلاعات
-پايگاه داده را استخراج كرد Ø´Ø±Ø Ø¯Ø§Ø¯Ù‡ است.
-4.8) چرا درخواستهاي من كند اجرا مي‌شوند يا
-چرا از نمايه ها استÙ\81اده نمي‌كنند؟
-به طور معمول براي درخواستها از نمايه‌ها
-استÙ\81اده نمي‌شود. تنها در صورتي از نمايه‌ها
-استÙ\81اده مي‌شود كه اندازه جدول از يك اندازه
-ØØ¯Ø§Ù‚Ù„ بزرگتر باشد Ùˆ درخواست هم Ù\81قط قسمتي از
-رديÙ\81‌هاي جدول را انتخاب كرده باشد. دليل اين
-كار آن است كه دسترسي‌هاي تصادÙ\81ÙŠ به هاردديسك
-كه به خاطر نمايه‌ها ايجاد مي‌شود ممكن است
-از خواندن مستقيم جدول يا خواندن ترتيبي
-ركوردها كندتر باشد.
-براي تعيين اينكه از نمايه استÙ\81اده شود يا
-خير، PostgreSQL بايد اطلاعات آماري را در مورد يك
-جدول بداند. اين اطلاعات توسط دستور ANALYZE و VACUUM
-ANALYZE به دست مي‌آيد. با استÙ\81اده از اين
-اطلاعات،‌ بهينه ساز از تعداد رديÙ\81‌هاي يك
-جدول اطلاع پيدا مي‌كند و بهتر مي‌تواند
-تعيين كند كه آيا از نمايه استÙ\81اده شود يا خير.
-اطلاعات آماري همچنين براي تعيين ترتيب Ø§Ù„ØØ§Ù‚
-Ùˆ روشهاي Ø§Ù„ØØ§Ù‚ به صورت بهينه نيز كاربر دارد.
-جمع آوري اطلاعات آماري بايد به صورت دوره‌اي
-همزمان با تغيير داده‌هاي جدول انجام شود.
-نمايه‌ها به طور معمول همراه با دستور ORDER BY
-به كار برده نمي‌شوند. براي يك جدول بزرگ يك
-پيمايش ترتيبي همراه با دستور مرتب سازي از به
-كار بردن نمايه‌ها سريعتر خواهد بود.
-اما اگر همراه با ORDER BY‌ از LIMIT استÙ\81اده شود
-اغلب از نمايه‌ها استÙ\81اده مي‌شود چون Ù\81قط
-قسمتي از جدول استÙ\81اده مي‌شود. در ØÙ‚يقت هر
-چند توابع ()MIN‌ Ùˆ ()MAX از نمايه‌ها استÙ\81اده
-نمي‌كنند ولي مي‌توانيم با استÙ\81اده از دستور
-زير با استÙ\81اده از نمايه‌ها Ùˆ دستور ORDER BY Ùˆ
-LIMIT‌ آنها را به دست آوريم.
- SELECT col
- FROM tab
- ORDER BY col [ DESC ]
- LIMIT 1;
-اگر شما Ù\81كر مي‌كنيد كه بهينه ساز سيستم در
-انتخاب پيمايش ترتيبي اشتباه كرده است با
-دستور 'SET enable_seqscan TO 'off' مي‌توانيد ببينيد آيا
-استÙ\81اده از نمايه‌ها باعث اÙ\81زايش سرعت
-درخواست‌ها خواهد شد.
-استÙ\81اده از نمايه‌ها هنگامي كه از علائم ويژه
-نظير LIKE Ùˆ ~ استÙ\81اده مي‌كنيد Ù\81قط در بعضي
-شرايط خاصي كه در اينجا ذكر شده است ممكن است:
- ابتداي رشته جستجو بايد به طور ØµØ±ÙŠØ Ù…Ø´Ø®Øµ
- باشد براي مثال:
- دستورات LIKE نبايد با علامت % شروع شوند
- الگوهاي منظمي كه با ~ مي‌ايد ØØªÙ…اً بايد با
- علامت ^ شروع شود
- رشته جستجو نبايد با يك مجموعه از
- كاراكتر‌ها مثل [a-e] شروع شود
- جستجوهاي ØºÙŠØ±ØØ³Ø§Ø³ به متن مثل ILIKE‌ Ùˆ *~ از
- نمايه‌ها استÙ\81اده نمي‌كنند. در عوض از
- توابع نمايه‌اي كه در قسمت 4.12 ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ شد
- استÙ\81اده مي‌كنند.
- مقدار پيش Ù\81رض locale‌ بايد در initdb استÙ\81اده شود.
-
-4.9) چگونه مي‌توانم Ù†ØÙˆÙ‡ بررسي درخواست را
-توسط بهينه‌ساز درخواستها مشاهده كنم؟
-راهنماي دستور EXPLAIN را نگاه كنيد.
-4.10) نمايه R-tree‌ چيست؟
-از نمايه R-Tree براي انديس كردن داده‌هاي
-Ù\81اصله‌اي استÙ\81اده مي‌شود. يك نمايه hash
-نمي‌توانند جستجوهاي Ù…ØØ¯ÙˆØ¯Ù‡â€ŒØ§ÙŠ Ø±Ø§ انجام
-دهد. نمايه "B-tree" نيز براي انجام جستجوي
-Ù…ØØ¯ÙˆØ¯Ù‡â€ŒØ§ÙŠ Ø¯Ø± يك جهت قابل استÙ\81اده است. اما
-R-Tree مي‌تواند داده‌هاي چند بعدي را نيز
-پشتيباني كند. براي مثال استÙ\81اده اگر از نمايه
-R-tree‌ براي گونه Point استÙ\81اده شود سرعت
-درخواست‌هايي نظير "select all points within a bounding
-rectangle" به مراتب اÙ\81زايش مي‌يابد.
-مقاله‌اي كه طراØÙŠ R-tree را ØªÙˆØ¶ÙŠØ Ø¯Ø§Ø¯Ù‡ است
-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.
-R-tree‌ مي‌تواند چندضلعيها و چند وجهي را
-پشتيباني كند. در تئوري R-tree مي‌تواند تعداد
-بعدهاي بالاتر ري نيز پشتيباني كند. در عمل
-توسعه R-tree‌ نياز به كار بيشتري دارد.
-4.11) بهينه ساز تكويني درخواست چيست؟ (Genetic Query
-Optimizer)
-استÙ\81اده از GEQO سرعت بهينه سازي درخواست را
-هنگاميكه تعداد زيادي جدول را با استÙ\81اده از
-الگوريتم ژنتيك Ø§Ù„ØØ§Ù‚ مي‌كنيم اÙ\81زايش
-مي‌دهد.
-4.12) چگونه از عبارات منظم براي جستجو استÙ\81اده
-كنم؟ چگونه جستجويي انجام دهم كه ØØ³Ø§Ø³ به متن
-نباشد؟ چگونه براي يك جستجوي غير ØØ³Ø§Ø³ به متن
-از نمايه استÙ\81اده كنم؟
-براي جستجوي عبارت منظم از عملگر ~‌ استÙ\81اده
-مي‌كنيم. براي جستجوي غير ØØ³Ø§Ø³ به متن از
-عملگر *~ Ùˆ يا ILIKE‌ استÙ\81اده مي‌كنيم.
-روش ديگر انجام جستجوي غير ØØ³Ø§Ø³ به متن در زير
-نشان داده شده است.
- SELECT *
- FROM tab
- WHERE lower(col) = 'abc';
-اين از نمايه‌هاي استاندارد استÙ\81اده
-نمي‌كند. ولي شما مي توانيد با دستور زير يك
-نمايه ايجاد كنيد Ùˆ از آن استÙ\81اده كنيد.
- CREATE INDEX tabindex ON tab (lower(col));
-4.13) Iچگونه مي‌توانم در يك درخواست تشخيص دهم
-كه يك Ù\81يلد NULL‌ است؟
-با استÙ\81اده از توابع IS NULL Ùˆ IS NOT NULL مي‌توانيم
-NULL بودن يك Ù\81يلد را تست كنيم.
-4.14) تÙ\81اوت بين گونه‌هاي مختلÙ\81 character چيست؟
-Type Internal Name Notes
---------------------------------------------------
-VARCHAR(n) varchar اندازه، ØØ¯Ø§ÙƒØ«Ø± طول را نشان مي دهد بدون اضاÙ\81Ù‡ شدن كاراكتر اضاÙ\81Ù‡
-CHAR(n) bpchar كاراكترهاي بلانك براي پر شدن طول مشخص شده استÙ\81اده مي‌شود
-TEXT text ØØ¯Ø§ÙƒØ«Ø± طول را مشخص نمي‌كند
-BYTEA bytea آرايه‌اي از بايت با طول متغير
-"char" char يك كاراكتر
-نام داخلي گونه‌ها را در system catalogue ‌و بعضي از
-پيغامهاي خطا مي‌توان ديد.
-چهار گونه اول همگي از نوع varlena هستند (4 بايت
-اول روي ديسك طول را مشخص مي‌كند كه به دنبال
-آن داده‌ها قرار دارند.)‌بنابراين Ù\81ضاي
-واقعي استÙ\81اده شده روي ديسك از اندازه تعريÙ\81
-شده بيشتر است. اما اين گونه‌ها را مي‌توان
-Ù\81شرده كرد كه اينكار باعث مي‌شود Ù\81ضاي كمتري
-روي ديسك اشغال كنند.
-براي ذخيره رشته‌هاي با طول متغير(VARCHAR(n‌
-بهترين انتخاب است. در اين گونه ØØ¯Ø§ÙƒØ«Ø± طول
-رشته Ù…ØØ¯ÙˆØ¯ است بر خلاÙ\81 text كه هيچ Ù…ØØ¯ÙˆØ¯ÙŠØªÙŠ
-روي ØØ¯Ø§ÙƒØ«Ø± اندازه رشته نمي‌گذارد.(در اين
-گونه ØØ¯Ø§ÙƒØ«Ø± طول يك رشته يك گيگا بايت خواهد
-بود)
-گونه (CHAR(n براي ذخيره داده‌هاي با طول يكسان
-است.يك گونه‌ي (CHAR(n با كاراكترهاي بلانك
-(خالي) پر مي‌شود تا به طول مشخص شده برسد در
-ØØ§Ù„يكه گونه VARCHAR كاراكترها را به همان صورت
-كه هستند ذخيره مي‌كند. گونه BYTEA براي ذخيره
-داده‌هاي باينري است به خصوص داده‌هاي
-باينتري كه شامل بايت‌هاي NULL هستند. از نظر
-كارايي تمام اين گونه‌ها يكسان هستند.
-4.15.1) چگونه مي‌توانم يك Ù\81يلد سريال يا
-اÙ\81زايشي ايجاد كنم؟
-PostgreSQL از داده‌هاي سريال پشتيباني مي‌كند.
-براي ايجاد يك Ù\81يلد سريال (براي داشتن يك Ù\81يلد
-Ù…Ù†ØØµØ± به Ù\81رد براي هر رديÙ\81 )به روش زير عمل
-كنيد:
- CREATE TABLE person (
- id SERIAL,
- name TEXT
- );
-دستور بالا به طور اتوماتيک به دستور زير
-تبديل مي‌شود:
- CREATE SEQUENCE person_id_seq;
- CREATE TABLE person (
- id INT4 NOT NULL DEFAULT nextval('person_id_seq'),
- name TEXT
- );
-براي ديدن اطلاعات بيشتر به راهنماي دستور
-create_sequence مراجعه كنيد. همچنين مي‌توان از
-OID‌هر رديÙ\81 به عنوان يك مقدار Ù…Ù†ØØµØ± به Ù\81رد
-استÙ\81اده كرد. اما در اين ØØ§Ù„ت براي dump كردن Ùˆ
-reload‌كردن پايگاه داده بايد دستور pg_dumps‌ را
-با گزينه o-‌ اجرا كنيد.
-4.15.2) چگونه مي‌توانم مقدار يك درج سريالي را
-بدانم؟
-يك روش براي گرÙ\81تن مقدار بعدي يك Ù\81يلد سريال
-استÙ\81اده از تابع ()nextval است. در شبه ÙƒÙ\8fدي كه در
-ادامه آمده است روش انجام اين كار نشان داده
-شده است:
- new_id = execute("SELECT nextval('person_id_seq')");
- execute("INSERT INTO person (id, name) VALUES (new_id, 'Blaise Pascal')");
-با اجرا دستور Ù\81وق مقدار جديد را در متغير new_id
-نيز خواهيدداشت كه مي‌توانيد آن را در بقيه
-درخواست‌هاي نيز استÙ\81اده كنيد. توجه داشته
-باشيد كه نام SEQUENCEيي كه به طور اتوماتيك ايجاد
-شده است به صورت table_serialcolumn_seq‌ خواهد بود. كه
-در آن table‌ نام جدول Ùˆ serialcolumn نام Ù\81يلد سريال
-جدول مي‌باشد.
-براي ديدن مقدار نسبت داده شده به Ù\81يلد سريال
-نيز مي‌توان از تابع () currval به صورت زير
-استÙ\81اده كرد.
- execute("INSERT INTO person (name) VALUES ('Blaise Pascal')");
- new_id = execute("SELECT currval('person_id_seq')");
-و سرانجام شما مي‌توانيد از مقدار OID كه خروجي
-دستور INSERT است براي ديدن مقدار پيش Ù\81رض
-استÙ\81اده كنيد. هر چند اين روش در همه پلتÙ\81رمها
-قابل استÙ\81اده نيست Ùˆ ضمن اينكه Ù\81يلد oid‌ بعد
-از عدد 4 ميليارد دوباره صÙ\81ر مي‌شود. در زبان
-perl با استÙ\81اده از DBI Ùˆ DBD::Pg مقدار oid‌را
-مي‌توانيد به شكل زير استخراج كنيد: بعد از
-اجراي ()st->execute$ مقدار oid‌ در متغير sth->pg_oid_status$
-ذخيره خواهد شد.
-4.15.3) آیا توابع ()nextval و ()currval منجر به ایجاد
-شرایط race برای سایر کاربران می شوند؟
-خیر، استÙ\81اده از این توابع شرایط race را به
-وجود نمی آورد.
-4.15.4) چرا اعداد سریالی مربوط به تراکنشهای abort
-شده مجدداً استÙ\81اده نمی شود؟ چرا بین اعداد
-سریالی یک Ù\81اصله خالی ایجاد Ù…ÛŒ شود؟
-برای بالا بردن امکان اجرای همزمان تراکنشها،
-اعداد سریالی به Ù…ØØ¶ اجرای تراکنش به آنها
-تخصیص Ù…ÛŒ یابد در این ØØ§Ù„ت اگر بعضی از
-تراکنشها abort شوند بین اعداد سریالی استÙ\81اده
-شده یک Ù\81اصله خالی به وجود Ù…ÛŒ آید.
-4.16) OID و TID چه هستند؟
-OID راه ØÙ„ PostgreSQL برای داشتن یک شناسه Ù…Ù†ØØµØ± به
-Ù\81رد برای هر ردیÙ\81 است. هر ردیÙ\81 جدیدی Ú©Ù‡ ایجاد
-Ù…ÛŒ شود یک OID Ù…Ù†ØØµØ± به Ù\81رد به آن اختصاص Ù…ÛŒ
-یابد. تمام OIDهایی Ú©Ù‡ در ØÛŒÙ† initdb ایجاد Ù…ÛŒ شوند
-از 16384 کمتر هستند و OIDهایی بعداً تولید می شود
-از این عدد بزرگتر خواهد بود. نکته مهم آن است
-که OIDها نه تنها در یک جدول شبیه نیستند بلکه
-در Ú©Ù„ پایگاه داده هیچ دو ردیÙ\81ÛŒ دارای OID یکسان
-نخواهد بود.
-PostgreSQL از OID در سیستم داخلی خود برای ایجاد
-ارتباط بین ردیÙ\81های جداول مختلÙ\81 استÙ\81اده Ù…ÛŒ
-کند. توصیه می شود که یک ستون از نوع OID برای
-ذخیره این Ù\81یلد در جدول ایجاد کنید. ساختن یک
-نمایه برای این Ù\81یلد باعث دسترسی سریعتر به آن
-خواهد شد.
-تمام پایگاههای داده در PostgreSQL برای گرÙ\81تن OID
-جدید از یک ناØÛŒÙ‡ مرکزی استÙ\81اده Ù…ÛŒ کند. ولی
-اگر بخواهیم OID را به روش دیگری بگیریم و یا
-اینکه در ØÛŒÙ† Ú©Ù¾ÛŒ کردن یک جدول بخواهیم OIDهای
-اصلی آن تغییر نکند به روش زیر می توانیم عمل
-کنیم:
-
- CREATE TABLE new_table(mycol int);
- SELECT oid AS old_oid, mycol INTO tmp_table FROM old_table;
- COPY tmp_table TO '/tmp/pgtable';
- COPY new_table WITH OIDS FROM '/tmp/pgtable';
- DROP TABLE tmp_table;
-OID یک عدد صØÛŒØ 4 بایتی است Ùˆ بنابراین ØØ¯Ø§Ú©Ø«Ø±
-مقدار آن 4 میلیارد خواهد بود و بعد از آن
-مقدار آن سرریز خواهد شد. البته تا کنون برای
-کسی این اتÙ\81اق Ù†ÛŒÙ\81تاده است Ùˆ تصمیم گرداندگان
-PostgreSQL آن است Ú©Ù‡ قبل از آنکه این اتÙ\81اق رخ دهد
-این مشکل را برطرÙ\81 کنند.
-TIDها برای شناسایی Ù…ØÙ„ Ù\81یزیکی یک ردیÙ\81 بر اساس
-بلوک Ùˆ Ø¢Ù\81ست Ù…ÛŒ باشد. TIDها بعد از تغییر پیدا
-کردن یک ردیÙ\81 Ùˆ یا بازخوانی آن عوض Ù…ÛŒ شوند.
-TIDها توسط نمایه ها استÙ\81اده Ù…ÛŒ شوند.
-4.17) معني بعضي از ترمها و كلماتي كه در PostgreSQL‌
-استÙ\81اده مي‌شود چيست؟
-لیست برخی از ترمها Ùˆ کلماتی Ú©Ù‡ استÙ\81اده Ù…ÛŒ
-شوند:
- table, relation, class :کلاس، رابطه، جدول
- row, record, tuple چندتایی، رکورد، ردیÙ\81
- column, field, attribute صÙ\81ت، Ù\81یلد، ستون
- retrieve, select انتخاب، خواندن
- replace, updateبه روز کردن، جایگزینی
- append, insert درج، اضاÙ\81Ù‡ کردن
- OID, serial value مقدار سریال
- portal, cursor
- range variable, table name, table alias
-یک لیست عمومی از ترمهای مورد استÙ\81اده در
-پایگاه داده در آدرس
-http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary/glossary.htm
-وجود دارد.
-4.18) چرا من خطاي "ERROR: Memory exhausted in AllocSetAlloc"
-مي‌گيرم؟
-این خطا Ø§ØØªÙ…الاً یا به خاطر تمام شدن ØØ§Ù\81ظه
-مجازی سیستم شماست و یا اینکه کرنل برای
-برنامه ها در مورد میزان استÙ\81اده از ØØ§Ù\81ظه
-مجازی Ù…ØØ¯ÙˆØ¯ÛŒØª اعمال کرده است. قبل از اجرای
-برنامه اصلی یکی از دستورات زیر را اجرا کنید.
- ulimit -d 262144
- limit datasize 256m
-بسته به نوع شل یکی از این دستورات ممکن است با
-موÙ\81قیت اجرا شود. با اجرای آن دستور Ù…ØØ¯ÙˆØ¯ÛŒØª
-ØØ§Ù\81ظه مجازی برای برنامه ها برداشته شده Ùˆ با
-این کار Ø§ØØªÙ…الاً درخواستی Ú©Ù‡ قبلاً خطا Ù…ÛŒ
-داده است اجرا خواهد شد.
-4.19) از كجا تشخيص دهم كه ويرايش يا نسخه
-PostgreSQLيي كه من استÙ\81اده مي‌كنم چيست؟
-با اجرای دستور ()SELECT version
-4.20) چرا در ØÛŒÙ† اجرای عملیات روی large-objectها
-خطای "invalid large obj descriptor"به وجود می آید؟
-شما باید قبل از شروع دستوراتی که با large-objectها
-کار می کنند از BEGIN و بعد از آنها هم یک END
-بگذارید. در ØØ§Ù„ ØØ§Ø¶Ø± PostgreSQL هندل large-objectها را
-در زمان نهایی شدن تراکنش (commitشدن) می بندد. به
-همین دلیل اولین تلاش برای انجام هر کاری با
-هندل منجر به خطای invalid large obj descriptor خواهد شد.
-برای جلوگیری از این خطا ØØªÙ…اً باید از یک
-تراکنش استÙ\81اده کنید. این کار همانطور Ú©Ù‡
-قبلاً Ú¯Ù\81ته شد با استÙ\81اده از قرار دادن BEGIN Ùˆ END
-در ابتدا و انتهای دستورات انجام می شود.
-اگر این خطا را در ØÛŒÙ† استÙ\81اده از یک درایور ODBC
-دریاÙ\81ت کردید Ø§ØØªÙ…الاً باید این دستور را
-اجرا کنید: set auto-commit off
-4.21) چگونه يك ستون ايجاد كنم كه مقدار زمان
-جاري را به عنوان مقدار پيش‌Ù\81رض داشته باشد؟
-از CURRENT_TIMESTAMP استÙ\81اده کنید در مثال زیر Ù†ØÙˆÙ‡
-انجام این کار نشان داده شده است:
-CREATE TABLE test (x int, modtime timestamp DEFAULT CURRENT_TIMESTAMP );
-
-4.22) چرا "زير درخواستهايي" كه از IN استÙ\81اده
-مي‌كنند كند هستند؟
-در نسخه های قبل از 7.4 عمل Ø§Ù„ØØ§Ù‚ زیر درخواست Ùˆ
-درخواست اصلی به این صورت انجام می شود که
-نتایج به دست آمده از زیر درخواست به صورت
-ترتیبی برای هر ردیÙ\81 اعمال Ù…ÛŒ شود. اگر
-زیردرخواست ردیÙ\81 های Ú©Ù…ÛŒ را به عنوان خروجی
-برگرداند Ùˆ درخواست بیرونی ردیÙ\81 های زیادی را
-شامل شود استÙ\81اده از IN بهترین روش است در غیر
-اینصورت بهتر است از EXISTS استÙ\81اده شود
- SELECT *
- FROM tab
- WHERE col IN (SELECT subcol FROM subtab);
-به:
- SELECT *
- FROM tab
- WHERE EXISTS (SELECT subcol FROM subtab WHERE subcol = col);
-برای اجرای سریع این درخواست باید برای ستون
-subcol نمایه ایجاد شده باشد.
-در نسخه های بعد از 7.4 IN برای Ø§Ù„ØØ§Ù‚ از همان
-تکنیک پیچیده مورد استÙ\81اده در دستورات معمولی
-استÙ\81اده Ù…ÛŒ کند Ùˆ بنابراین استÙ\81اده از آن نسبت
-به EXISTS ارجØÛŒØª دارد.
-4.23) چگونه مي‌توانم يك Ø§Ù„ØØ§Ù‚ خارجي (outer join)
-انجام دهم؟
-برای انجام Ø§Ù„ØØ§Ù‚ خارجی به روش زیر عمل کنید:
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);
-یا
- SELECT *
- FROM t1 LEFT OUTER JOIN t2 USING (col);
-درخواستهای بالا t1.col , t2.col را به هم Ø§Ù„ØØ§Ù‚ Ù…ÛŒ
-کند Ùˆ همچنین ردیÙ\81های t1 Ú©Ù‡ نظیر آنها در t2
-نبوده است را نیز برمی گرداند. اگر از RIGHT
-استÙ\81اده شود نتیجه بر عکس است. یعنی ردیÙ\81های t2
-که نظیر آنها در t1 نباشد را نشان می دهد و اگر
-از FULL استÙ\81اده شود نتیجه هم شامل ردیÙ\81های t1
-است Ùˆ هم شامل ردیÙ\81های t2. استÙ\81اده از کلمه OUTER
-اختیاری است چرا که این کلمه به طور ضمنی
-دستورهای LEFT, RIGHT, FULL وجود دارد.
-در نسخه های قبلی پایگاه داده Ù…ÛŒ توانیم Ø§Ù„ØØ§Ù‚
-خارجی را به کمک دستورهای UNION, NOT IN شبیه سازی
-کنیم. این کار در مثال زیر نشان داده شده است:
-
- SELECT tab1.col1, tab2.col2
- FROM tab1, tab2
- WHERE tab1.col1 = tab2.col1
- UNION ALL
- SELECT tab1.col1, NULL
- FROM tab1
- WHERE tab1.col1 NOT IN (SELECT tab2.col1 FROM tab2)
- ORDER BY col1
-4.24) چگونه مي‌توان درخواستهايي از چند پايگاه
-داده توليد كرد؟
-در ØØ§Ù„ ØØ§Ø¶Ø± این کار امکان پذیر نیست. PostgreSQL
-Ù\81قط امکان درخواست از پایگاه داده ای را Ù…ÛŒ
-دهد Ú©Ù‡ در ØØ§Ù„ ØØ§Ø¶Ø± به آن متصل باشید Ùˆ نمی
-توان به طور همزمان از دو پایگاه داده استÙ\81اده
-کرد. البته یک برنامه کاربردی خود می تواند به
-طور همزمان دو پایگاه داده را مورد استÙ\81اده
-قرار داده و نتایج را با هم ترکیب کند ولی نمی
-تواند در یک درخواست به هر دو پایگاه داده
-رجوع کند.
-4.25) چگونه خروجي يك تابع مي‌تواند چند رديÙ\81
-يا ستون باشد؟
-در نسخه 7.3 خروجی یک تابع Ù…ÛŒ تواند چند ردیÙ\81 یا
-چند ستون باشد. برای دیدن اطلاعات بیشتر به
-سایت زیر مراجعه
-کنید:http://techdocs.postgresql.org/guides/SetReturningFunctions
-4.26) در توابع PL/PgSQL چرا نمي‌توان با اطمينان
-جداول موقت را ايجاد يا ØØ°Ù\81 كرد؟
-PL/PgSQL Ù…ØØªÙˆØ§ÛŒ توابع را ذخیره (cache) Ù…ÛŒ کند. یک
-اثر بد جانبی این کار آن است که اگر در تابع از
-یک جدول موقت استÙ\81اده شود Ùˆ بعداً آن جدول ØØ°Ù\81
-و یک جدول جدید به جای آن ایجاد شود، در
-Ù\81راخوانی مجدد آن تابع، Ù…ØØªÙˆØ§ÛŒ ذخیره شده
-تابع هنوز به جدول قدیمی اشاره می کند و
-بنابراین اجرای تابع با اشکال مواجه می شود.
-راه ØÙ„ این مشکل آن است Ú©Ù‡ برای جداول موقت از
-دستور EXECUTE استÙ\81اده شود Ú©Ù‡ این کار سبب Ù…ÛŒ شود
-که درخواست برای هر بار اجرا مجدداً پیمایش و
-تÙ\81سیر شود.
-4.27) چه گزينه‌هايي براي تكرار (replication) وجود
-دارد؟
-There are several master/slave replication options available. These allow only
-the master to make database changes and the slave can only do database reads.
-The bottom of http://gborg.PostgreSQL.org/genpage?replication_research lists
-them. A multi-master replication solution is being worked on at
-http://gborg.PostgreSQL.org/project/pgreplication/projdisplay.php.
-4.28) چه گزينه‌هايي براي رمزنگاري وجود دارد؟
- contrib/pgcrypto شامل توابع رمزنگاری زیادی است که
- Ù…ÛŒ توان از آنها در دستورات SQL استÙ\81اده کرد.
- برای رمز کردن ارتباط بین client و server ، پایگاه
- داده ØØªÙ…اً گزینه SSL را بر روی پایگاه داده
- Ù\81عال کنیم.
- در نسخه 7.3 به بعد کلمات عبور کاربران به طور
- اتوماتیک به صورت رمز شده ذخیره می شود ولی
- در نسخه های قبلی باید گزینه PASSWORD_ENCRYPTION در
- Ù\81ایلpostgresql.conf Ù\81عال کنیم.
- Ù…ÛŒ توان پایگاههای داده را روی یک Ù\81ایل سیستم
- رمزشده نگاهداری کرد
-
-
-
-Extending PostgreSQL
-5.1) من يك تابع نوشته‌ام. چگونه آن را در psql
-اجرا كنم؟ چرا با اجراي آن core dump مي‌گيرم؟
-دلایل مختلÙ\81ÛŒ Ù…ÛŒ تواند باعث بروز این مشکل
-شود. اما قبل از همه تابع خود را به صورت جدا
-تست کنید.
-5.2) چگونه مي‌توانم در توليد نوع‌ها و توابع
-جديد و جالب براي PostgreSQL‌ همكاري و مشاركت
-داشته باشم؟
-کد خود را به گروه پستی pgsql-hackers ارسال کنید.
-5.3) چگونه مي‌توانم يك تابع به زبان C بنويسم
-كه خروجي آن يك ‌tuple (چند تايي) باشد؟
-در نسخه های 7.3 به بعد یک تابع می تواند یک جدول
-را به عنوان خروجی برگرداند. این ویژگی در
-توابعی که به زبانهای C و PL/PgSQL نوشته می شوند
-به طور کامل وجود دارد. راهنما برنامه نویسان
-را مطالعه کنید. یک مثال از Ù†ØÙˆÙ‡ برگرداندن یک
-جدول به عنوان خروجی در contrib/tablefunc آمده است.
-5.4) من يك Ù\81ايل منبع را عوض كرده ام چرا در
-عمليات كامپيل مجدد آن تغيير ديده نمي‌شود؟
-Makefile برای Ù\81ایلهای include شده وابستگیها را به
-درستی نشان نمی دهد. برای اطمینان از اینکه
-Ù\81ایلی Ú©Ù‡ عوض کرده اید ØØªÙ…اً دوباره کامپیل Ù…ÛŒ
-شود دستور make clean را اجرا کنید. اگر از کامپیلر
-gcc استÙ\81اده Ù…ÛŒ کنید Ù…ÛŒ توانید از گزینه
-enable-depend-- در موقع اجرای برنامه configure استÙ\81اده
-کنید این گزینه باعث می شود که وابستگیها به
-طور اتوماتیک تولید شود.
\ No newline at end of file
+++ /dev/null
-
- Foire Aux Questions (FAQ) pour PostgreSQL
-
- Dernière mise à jour : vendredi 14 novembre 2004 16:32:47
-
- Mainteneur actuel : Bruce Momjian (pgman@candle.pha.pa.us)
-
- La plus récente version de ce document est disponible sur
- http://www.PostgreSQL.org/docs/faqs/FAQ.html.
-
- Les questions spécifiques à la plateforme sont répondues sur
- http://www.PostgreSQL.org/docs/index.html.
- _________________________________________________________________
-
- Questions générales
-
- 1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ?
- 1.2) Quelle est la licence de PostgreSQL ?
- 1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ?
- 1.4) Sous quels environnements non-Unix PostgreSQL tourne-t-il ?
- 1.5) Où puis-je me procurer PostgreSQL ?
- 1.6) Où puis-je obtenir du support ?
- 1.7) Quelle est la dernière version ?
- 1.8) Quelle documentation est disponible ?
- 1.9) Comment savoir quels sont les bogues connus ou les
- fonctionnalités manquantes ?
- 1.10) Comment puis-je apprendre le SQL ?
- 1.11) PostgreSQL est-il compatible an 2000 ?
- 1.12) Comment puis-je rejoindre l'équipe de développement ?
- 1.13) Comment dois-je soumettre un rapport de bogue ?
- 1.14) Comment PostgreSQL se compare-t'il à d'autres SGBD ?
- 1.15) Comment puis-je aider financièrement PostgreSQL ?
-
- Questions sur le client utilisateur
-
- 2.1) Y a-t-il des pilotes ODBC pour PostgreSQL ?
- 2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des
- pages Web ?
- 2.3) PostgreSQL a-t-il une interface graphique ?
- 2.4) Quels langages sont disponibles pour communiquer avec
- PostgreSQL ?
-
- Questions administratives
-
- 3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ?
- 3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un
- message core dumped. Pourquoi ?
- 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate.
- Pourquoi ?
- 3.4) Quand je lance postmaster, j'obtiens des erreurs
- IpcSemaphoreCreate. Pourquoi ?
- 3.5) Comment contrôler les connexions d'autres machines ?
- 3.6) Comment règler le moteur de la base de données pour de meilleures
- performances ?
- 3.7) Quelles fonctionalités de déboguage sont disponibles ?
- 3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many
- clients quand je me connecte ?
- 3.9) Que contient le répertoire pgsql_tmp ?
- 3.10) Pourquoi ai-je besoin de faire une sauvegarde des bases et de
- restaurer pour mettre a jour les versions de PostgreSQL ?
- 3.11) Quels matériels dois-je utiliser ?
-
- Questions fonctionnelles
-
- 4.1) Quelle est la différence entre curseur binaire et curseur
- normal ?
- 4.2) Comment faire un SELECT seulement sur les premières lignes d'une
- requête ? Sur une ligne aléatoire ?
- 4.3) Comment obtenir une liste des tables ou d'autres choses que je
- vois dans psql ?
- 4.4) Comment supprime-t-on une colonne d'une table, ou comment
- change-t-on son type de données ?
- 4.5) Quelle est la taille maximale pour une ligne, une table et une
- base de données ?
- 4.6) Combien d'espace disque faut-il pour stocker les données d'un
- fichier texte typique ?
- 4.7) Comment puis-je savoir quels index, tables, bases de données et
- utilisateurs sont définis ?
- 4.8) Mes requêtes sont lentes ou ne font pas usage des index.
- Pourquoi ?
- 4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ?
- 4.10) Qu'est-ce qu'un index R-tree ?
- 4.11) Qu'est-ce que l'optimiseur génétique de requêtes ?
- 4.12) Comment puis-je réaliser des recherches par des expressions
- rationnelles ainsi que des recherches non sensibles à la casse ?
- Comment puis-je utiliser un index lors de recherches non sensibles à
- la casse ?
- 4.13) Comment puis-je détecter si un champ est NULL dans une requête ?
- 4.14) Quelle sont les différences entre les nombreux types de
- caractères ?
- 4.15.1) Comment puis-je créer un champ série, c'est-à-dire
- s'incrémentant automatiquement ?
- 4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une
- insertion ?
- 4.15.3) Est-ce que currval() et nextval() n'amènent pas des problèmes
- lorsque plusieurs utilisateurs les lancent en même temps ?
- 4.15.4) Pourquoi mes numéros de séquences ne sont pas ré-utilisés lors
- d'une annulation de transaction ? Pourquoi existe-t'il des trous dans
- la numérotation de ma colonne séquentielle (SERIAL) ?
- 4.16) Qu'est-ce qu'un OID? Qu'est-ce qu'un TID ?
- 4.17) A quoi correspond certains termes utilisés avec PostgreSQL ?
- 4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in
- AllocSetAlloc() ?
- 4.19) Comment puis-je connaître la version de PostgreSQL que
- j'utilise ?
- 4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations
- avec des gros objets ?
- 4.21) Comment puis-je créer une colonne qui aura par défaut l'heure
- actuelle comme valeur ?
- 4.22) Pourquoi mes sous-requêtes utilisant IN sont-elles si lentes ?
- 4.23) Comment puis-je réaliser une jointure externe ?
- 4.24) Comment puis-je lancer des requêtes utilisant plusieurs bases de
- données ??
- 4.25) Comment puis-je renvoyer plusieurs lignes ou colonnes à partir
- d'une fonction ?
- 4.26) Pourquoi ne puis-je pas créer/supprimer des tables temporaires
- dans les fonctions PL/PgSQL de façon stable ?
- 4.27) Quelles options de cryptage sont disponibles ?
-
- Etendre PostgreSQL
-
- 5.1) J'ai écrit une fonction utilisateur. Lorsque je l'exécute avec
- psql, pourquoi cela finit-il avec un "dump core" ?
- 5.2) Comment puis-je contribuer avec de nouveaux types et fonctions
- pour PostgreSQL ?
- 5.3) Comment puis-je écrire une fonction C pour récupérer une ligne ?
- 5.4) J'ai modifié un fichier source. Pourquoi la modification
- n'est-elle pas visible après la recompilation ?
- _________________________________________________________________
-
- Questions générales
-
- 1.1) Qu'est ce que PostgreSQL ? Comment le prononcer ?
-
- PostgreSQL se prononce Post-Gres-Q-L. Un fichier audio est disponible
- sur http://www.postgresql.org/postgresql.mp3 pour ceux souhaitant
- entendre la prononciation.
-
- PostgreSQL est une amélioration du système de gestion de bases de
- données POSTGRES (et est toujours quelque fois appelé "Postgres"), un
- prototype de recherche de SGBD de prochaine génération. PostgreSQL
- garde le puissant modèle de données et les types de données riches de
- POSTGRES, mais remplace le langage de requêtes PostQuel par un
- sous-ensemble étendu de SQL. PostgreSQL est gratuit et les sources
- complets sont disponibles.
-
- PostgreSQL est écrit par une équipe de développeurs qui sont tous
- inscrits à la liste de diffusion de développement de PostgreSQL. Le
- coordinateur actuel est Marc G. Fournier (scrappy@PostgreSQL.org et
- voir la section 1.6 pour contacter les développeurs). Cette équipe est
- responsable de tout le développement de PostgreSQL. C'est un projet
- soutenu par une communauté sans être contrôlé par une société. Pour y
- contribuer, voir la FAQ des développeurs sur
- http://www.postgresql.org/docs/faqs/FAQ_DEV.html.
-
- Les auteurs de PostgreSQL 1.01 étaient Andrew Yu et Jolly Chen.
- Beaucoup d'autres personnes ont contribué au portage, aux tests, au
- déboguage et à l'amélioration du code. Le code de Postgres original,
- duquel PostgreSQL est dérivé, était le fruit de l'effort de nombreux
- étudiants diplômés et non diplômés, et de programmeurs travaillant
- sous la direction du Professeur Michael Stonebraker à l'université de
- Californie, Berkeley.
-
- Le nom original du logiciel à Berkeley était Postgres. Quand le SQL
- fut ajouté en 1995, le nom a dû être changé en Postgres95. Fin 1996,
- le nom fut changé en PostgreSQL.
-
- 1.2) Quelle est la licence de PostgreSQL ?
-
- PostgreSQL est distribué sous la licence suivante :
-
- PostgreSQL Data Base Management System
-
- Portions Copyright (c) 1996-2009, 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.
-
- La licence ci-dessus est la licence BSD, une licence open-source
- classique.
-
- 1.3) Sous quels environnements Unix PostgreSQL tourne-t-il ?
-
- En général, tout environnement compatible Unix moderne devrait pouvoir
- faire fonctionner PostgreSQL. Les environnements qui ont été testés
- explicitement sont listés dans les instructions d'installation.
-
- 1.4) Sous quels environnements non Unix PostgreSQL fonctionne-t'il ?
-
- À partir de la version 8.0, PostgreSQL fonctionne nativement sur les
- systèmes d'exploitation Microsoft Windows à base NT comme Win2000,
- WinXP et Win2003. Un installeur est disponible sur
- http://pgfoundry.org/projects/pginstaller.
-
- Il existe aussi un port sur Novell Netware sur
- http://forge.novell.com.
-
- 1.5) Où puis-je me procurer PostgreSQL ?
-
- Le site FTP anonyme principal de PostgreSQL est
- ftp://ftp.PostgreSQL.org/pub. Pour les sites miroirs, voir notre site
- web principal.
-
- 1.6) Où puis-je obtenir du support ?
-
- La liste de diffusion principale est pgsql-general@PostgreSQL.org.
- Elle est disponible pour discuter de sujets en rapport avec
- PostgreSQL. Pour s'y inscrire, il faut envoyer un courriel avec les
- lignes suivantes dans le corps du message (pas dans la ligne du
- sujet) :
- subscribe
- end
-
- à pgsql-general-request@PostgreSQL.org.
-
- Il existe aussi un recueil de la liste. Pour s'y inscrire, envoyez un
- courriel à pgsql-general-digest-request@PostgreSQL.org avec dans le
- corps :
- subscribe
- end
-
- Les recueils sont envoyés aux membres de cette liste dès que la liste
- principale a reçu 30 Ko de messages.
-
- Une liste de diffusion de bogues est disponible. Pour s'y inscrire,
- envoyer un courriel à pgsql-bugs-request@PostgreSQL.org avec dans le
- corps :
- subscribe
- end
-
- Une liste de diffusion pour les développeurs est aussi disponible.
- Pour s'y inscrire, envoyez un courriel à
- pgsql-hackers-request@PostgreSQL.org avec dans le corps :
- subscribe
- end
-
- Vous pouvez trouver d'autres listes et informations sur PostgreSQL sur
- le site web de PostgreSQL :
-
- http://www.PostgreSQL.org
-
- Il y a aussi un canal IRC sur Freenode et EFNet, le canal #PostgreSQL.
- Vous pouvez utiliser la commande Unix irc -c '#PostgreSQL' "$USER"
- irc.phoenix.net ou irc -c '#PostgreSQL' "$USER" irc.freenode.net.
-
- Une liste de sociétés pouvant fournir un support commercial est
- disponible sur http://techdocs.postgresql.org/companies.php.
-
- 1.7) Quelle est la dernière version ?
-
- La dernière version de PostgreSQL est la version 7.4.5.
-
- Nous projetons de sortir une version majeure tous les six à huit mois.
-
- 1.8) Quelle documentation est disponible ?
-
- Plusieurs manuels, pages de manuel ainsi que des petits exemples de
- test sont inclus dans la distribution. Voir le répertoire /doc. Vous
- pouvez aussi accéder aux manuels en ligne sur
- http://www.PostgreSQL.org/docs.
-
- Deux livres sur PostgreSQL sont disponibles en ligne sur
- http://www.PostgreSQL.org/docs/awbook.html et
- http://www.commandprompt.com/ppbook/. Il y a une liste de livres sur
- PostgreSQL pouvant être achetés sur
- http://techdocs.PostgreSQL.org/techdocs/bookreviews.php. Il y a aussi
- une collection d'articles techniques sur PostgreSQL sur
- http://techdocs.PostgreSQL.org/.
-
- psql possède des commandes \d pratiques montrant des informations sur
- les types, opérateurs, fonctions, aggrégats, etc.
-
- Notre site web contient encore plus de documentations.
-
- 1.9) Comment savoir quels sont les bogues connus ou les fonctionnalités
- manquantes ?
-
- PostgreSQL supporte un sous-ensemble étendu de SQL-92. Voir notre
- liste TODO pour les bogues connus, les fonctionnalités manquantes et
- les plans pour le futur.
-
- 1.10) Comment puis-je apprendre le SQL ?
-
- Le livre PostgreSQL sur http://www.PostgreSQL.org/docs/awbook.html
- enseigne le SQL. Il existe un autre livre PostgreSQL sur
- http://www.commandprompt.com/ppbook. Il existe de bons tutoriels sur
- http://www.intermedia.net/support/sql/sqltut.shtm,
- http://ourworld.compuserve.com/homepages/graeme_birchall/HTM_COOK.HTM
- et http://sqlcourse.com.
-
- Un autre (en anglais uniquement) "Teach Yourself SQL in 21 Days,
- Second Edition" se trouve sur
- http://members.tripod.com/er4ebus/sql/index.htm
-
- Nombre de nos utilisateurs aiment The Practical SQL Handbook, Bowman,
- Judith S., et al., Addison-Wesley. D'autres aiment The Complete
- Reference SQL, Groff et al., McGraw-Hill.
-
- 1.11) PostgreSQL est-il compatible an 2000 ?
-
- Oui, nous manipulons facilement les dates après et avant l'an 2000.
-
- 1.12) Comment puis-je rejoindre l'équipe de développement ?
-
- Tout d'abord, téléchargez les derniers sources et lisez la
- documentation pour les développeurs sur notre site web ou bien dans la
- distribution. Ensuite, inscrivez-vous aux listes de diffusion
- pgsql-hackers et pgsql-patches. Et pour finir, soumettez des
- correctifs de grande qualité sur pgsql-patches.
-
- Environ une douzaine de personnes ont des droits de modification sur
- l'archive CVS de PostgreSQL. Ils ont chacun soumis tellement de
- correctifs de qualité qu'il était devenu impossible aux développeurs
- de tenir la cadence et nous avions confiance dans le qualité des
- correctifs qu'ils soumettaient.
-
- 1.13) Comment dois-je soumettre un rapport de bogue ?
-
- Merci de visiter la page PostgreSQL BugTool sur
- http://www.PostgreSQL.org/bugs/bugs.php, qui donne des indications sur
- la façon de soumettre un rapport de bogue.
-
- De même, vérifiez notre site ftp ftp://ftp.PostgreSQL.org/pub pour
- voir s'il existe une version PostgreSQL plus récente ou des
- correctifs.
-
- 1.14) Comment PostgreSQL se compare-til à d'autres SGBD ?
-
- Il y a plusieurs manières de mesurer un logiciel : les
- fonctionnalités, les performances, la fiabilité, le support, et le
- prix.
-
- Fonctionnalités
- PostgreSQL possède la plupart des fonctionnalités présentes
- dans les SGBD commerciaux, comme les transactions, les requêtes
- imbriquées, les déclencheurs, les vues, l'intégrité
- référentielle par clés étrangères, et le verrouillage
- sophistiqué. Nous avons des fonctionnalités qu'ils n'ont pas,
- comme les types définis par l'utilisateur, l'héritage, les
- règles, et le contrôle de concurrence par multi-versionnage
- pour réduire les contentions de verrouillage.
-
- Performances
- PostgreSQL a des performances similaires aux autres bases de
- données commerciales et open source. Il est plus rapide pour
- certaines opérations, plus lent pour d'autres. Par rapport à
- MySQL ou d'autres SGBD plus léger, nous sommes plus rapides
- pour de nombreux utilisateurs, des requêtes complexes et une
- charge pour les requêtes de lecture/écriture. MySQL est plus
- rapide pour des requêtes SELECT simples effectuées par quelques
- utilisateurs. Bien sûr, MySQL ne possède aucune des
- fonctionnalités de la section Fonctionnalités ci-dessus.
- PostgreSQL est construit pour la fiabilité et les
- fonctionnalités et nous continuons à améliorer les performances
- à chaque version. Il y a une page web intéressante qui compare
- PostgreSQL à MySQL sur
- http://openacs.org/philosophy/why-not-mysql.html. De plus,
- MySQL est une société qui distribue son produit via l'open
- source et requiert une licence commerciale pour les logiciels
- propriétaires, donc pas une communauté de développement open
- source comme PostgreSQL.
-
- Fiabilité
- Nous somme conscients qu'un SGBD doit être fiable ou bien il
- est inutile. Nous faisons le maximum pour sortir des versions
- bien testées, du code stable ne contenant qu'un minimum de
- bogues. Chaque version a au moins un mois de tests, et notre
- historique de versions montre que nous pouvons fournir des
- versions stables et robustes, prêtes pour une utilisation en
- environnement de production. Nous pensons que nous nous
- comparons favorablement aux autres bases de données dans ce
- domaine.
-
- Support
- Nos listes de diffusion offrent un contact avec un large groupe
- de développeurs et d'utilisateurs afin d'aider à la résolution
- des problèmes rencontrés. Nous ne pouvons garantir un correctif
- mais les SGBD commerciaux ne le garantissent pas toujours non
- plus. L'accès direct aux développeurs, à la communauté
- d'utilisateurs, aux manuels, et au code source, fait du support
- pour PostgreSQL un support supérieur aux autres SGBD. Un
- support commercial par incident est disponible pour ceux qui en
- ont le besoin (voir la section 1.6 de la FAQ).
-
- Prix
- Nous sommes gratuits pour tous les usages, commerciaux et non
- commerciaux. Vous pouvez inclure notre code dans vos produits
- sans limitation, exceptées celles citées dans notre licence de
- type BSD donnée plus haut.
-
- 1.15) Comment puis-je aider financièrement PostgreSQL ?
-
- PostgreSQL possède une infrastructure de première classe depuis le
- début en 1996. Ceci grâce à Marc Fournier, qui a créé et géré cette
- infrastructure des années durant.
-
- Une infrastructure de qualité est importante pour un projet
- open-source. Cela permet d'empêcher l'éparpillement qui ralentirait
- beaucoup l'avancement du projet.
-
- Bien sûr, cette infrastructure n'est pas donnée. Elle requiert un
- certain nombre de dépenses mensuelles ou ponctuelles. Si vous ou votre
- société peut donner de l'argent pour soutenir cet effort, merci de
- consulter la page web http://store.pgsql.com/shopping/ et de faire une
- donation.
-
- Bien que la page web mentionne PostgreSQL, Inc, les contributions sont
- exclusivement utilisées pour soutenir le projet PostgreSQL et ne
- soutiennent aucune société que ce soit. Si vous le préférez, vous
- pouvez aussi envoyer un chèque à l'adresse de contact.
- _________________________________________________________________
-
- De plus, si vous avez une histoire de succès avec PostgreSQL, merci de
- la soumettre à notre site d'évangélisation sur
- http://advocacy.postgresql.org.
-
- Questions sur le client utilisateur
-
- 2.1) Existe-t'il des pilotes ODBC pour PostgreSQL ?
-
- Il y a deux pilotes ODBC disponibles, PsqlODBC et OpenLink ODBC.
-
- Vous pouvez télécharger PsqlOBDC depuis
- http://gborg.postgresql.org/project/psqlodbc/projdisplay.php.
-
- OpenLink ODBC peut être obtenu depuis http://www.openlinksw.com. Il
- fonctionne avec leur logiciel client ODBC standard, vous aurez donc
- PostgreSQL ODBC sur toutes les plateformes client qu'ils supportent
- (Win, Mac, Unix, VMS).
-
- Ils vendront probablement ce produit aux gens qui recherchent une
- qualité de support professionnelle mais une version freeware sera
- toujours disponible. Merci d'envoyer vos questions à
- postgres95@openlink.co.uk.
-
- 2.2) Quels outils sont disponibles pour utiliser PostgreSQL avec des pages
- Web ?
-
- Une bonne introduction aux pages Web adossés à une base de données se
- trouve à http://www.webreview.com
-
- Pour l'intégration Web, PHP est une excellente interface. Elle se
- trouve à http://www.php.net.
-
- Pour les cas complexes, beaucoup utilisent l'interface Perl et CGI.pm
- ou mod_perl.
-
- 2.3) PostgreSQL a-t-il une interface graphique ?
-
- Oui, il y a plusieurs interfaces graphiques disponibles pour
- PostgreSQL, dont PgAccess http://www.pgaccess.org), PgAdmin III
- (http://www.pgadmin.org), RHDB Admin (http://sources.redhat.com/rhdb/
- et Rekall ( http://www.thekompany.com/products/rekall/, propriétaire).
- Il y a aussi PhpPgAdmin ( http://phppgadmin.sourceforge.net/ ), une
- interface Web pour PostgreSQL.
-
- Voir http://techdocs.postgresql.org/guides/GUITools pour une liste
- plus détaillée.
-
- 2.4) Quels langages sont disponibles pour communiquer avec PostgreSQL ?
-
- La plupart des langages de programmation couramment utilisés ont une
- interface pour PostgreSQL. Vérifiez la liste des modules de votre
- langage.
-
- Les interfaces ci-dessous sont incluses dans la distribution :
- * C (libpq)
- * Embedded C (ecpg)
- * Java (jdbc)
- * Python (PyGreSQL)
- * TCL (libpgtcl)
-
- Interfaces supplémentaires disponibles sur http://gborg.postgresql.org
- dans la section Drivers/Interfaces
- _________________________________________________________________
-
- Questions Administratives
-
- 3.1) Comment installer PostgreSQL ailleurs que sous /usr/local/pgsql ?
-
- Il faut spécifier l'option --prefix lors du lancement de configure.
-
- 3.2) Quand je lance postmaster, j'obtiens un Bad System Call ou un message
- core dumped . Pourquoi ?
-
- Cela peut être dû à une variété de problèmes mais vérifiez d'abord que
- vous avez les extensions System V installées pour votre noyau.
- PostgreSQL nécessite le support noyau pour la mémoire partagée et les
- sémaphores.
-
- 3.3) Quand je lance postmaster, j'obtiens des erreurs IpcMemoryCreate.
- Pourquoi ?
-
- Soit vous n'avez pas configuré correctement la mémoire partagée dans
- votre noyau, soit vous devez augmenter la mémoire partagée disponible
- dans le noyau. Le montant exact dont vous avez besoin dépend de votre
- architecture et du nombre de tampons et de processus que vous avez
- configuré pour postmaster. Pour la plupart des systèmes avec un nombre
- par défaut de tampons et de processus, vous aurez besoin d'un minimum
- d'environ 1 Mo. Voir le chapitre Administration du manuel PostgreSQL
- pour des informations plus détaillées sur la mémoire partagée et les
- sémaphores.
-
- 3.4) Quand je lance postmaster, j'obtiens des erreurs IpcSemaphoreCreate.
- Pourquoi ?
-
- Si le message d'erreur est IpcSemaphoreCreate: semget failed (No space
- left on device) alors votre noyau n'est pas configuré avec
- suffisamment de sémaphores. PostgreSQL a besoin d'un sémaphore par
- processus serveur potentiel. Une solution provisoire est de lancer
- postmaster avec une plus petite limite sur le nombre de processus
- serveur. Utilisez l'option -N avec un paramètre inférieur au choix par
- défaut de 32. Une solution permanente est d'augmenter les paramètres
- SEMMNS et SEMMNI de votre noyau.
-
- Des sémaphores inopérantes peuvent aussi provoquer des plantages
- pendant de gros accès à la base de données.
-
- Si le message d'erreur est autre chose, vous n'avez peut-être pas du
- tout le support des sémaphores dans votre noyau. Voir le chapitre
- Administration du manuel PostgreSQL pour des informations plus
- détaillées sur la mémoire partagée et les sémaphores.
-
- 3.5) Comment contrôler les connexions d'autres machines ?
-
- Par défaut, PostgreSQL autorise seulement les connexions de la machine
- locale en utilisant les sockets de domaine Unix ou les connexions
- TCP/IP. D'autres machines ne seront pas capables de se connecter sauf
- si vous modifiez listen_addresses dans postgresql.conf et activez une
- authentification basée sur l'hôte en modifiant le fichier
- $PGDATA/pg_hba.conf en accord.
-
- 3.6) Comment régler le moteur de la base de données pour de meilleures
- performances ?
-
- Des index accéléreront les requêtes. La commande EXPLAIN ANALYZE vous
- permet de voir comment PostgreSQL traite votre requête et quels index
- sont utilisés.
-
- Si vous faites beaucoup d'insertions (instruction INSERT), envisagez
- de les faire en une fois en utilisant la commande COPY. Ceci est plus
- rapide que des commandes INSERTS individuelles. Deuxièment, les
- requêtes qui ne sont pas dans des blocs de transaction BEGIN
- WORK/COMMIT sont considérés comme étant dans leur propre transaction.
- Envisagez de faire plusieurs instructions dans un seul bloc de
- transaction. Ceci réduira la surcharge apportée par les transactions.
- Aussi, envisagez d'abandonner et de recréer des index lors de grosses
- modifications de données.
-
- Il y a plusieurs options d'optimisations. Vous pouvez désactiver
- fsync() en lançant postmaster avec l'option -o -F. Ceci empêchera les
- fsync()s d'écrire sur disque après toute transaction.
-
- Vous pouvez utiliser l'option -B de postmaster pour augmenter le
- nombre de tampons de mémoire partagée utilisés par les processus
- serveurs. Si vous fixez ce paramètre trop haut, postmaster ne se
- lancera pas car vous avez dépassé la limite de votre noyau sur la
- quantité de mémoire partagée. Chaque tampon fait 8 Ko et le choix par
- défaut est de 64 tampons.
-
- Vous pouvez utiliser l'option serveur -S pour augmenter la quantité
- maximale de mémoire utilisée par les processus serveurs pour des tris
- temporaires. La valeur de -S est mesuré en kilooctets et le choix par
- défaut est de 512 (c'est-à-dire 512 Ko).
-
- Vous pouvez utiliser la commande CLUSTER pour regrouper vos données en
- tables pour correspondre à un index. Voir la page de manual CLUSTER
- pour plus de détails.
-
- 3.7) Quelles fonctionalités de déboguage sont disponibles ?
-
- PostgreSQL a plusieurs fonctionalités qui permettent de recueillir des
- informations de statut qui peuvent être utile pour des intentions de
- déboguage.
-
- D'abord, en lançant configure avec l'option --enable-cassert, beaucoup
- d'assert()s surveillent le serveur et arrêtent le programme quand
- quelque chose d'inattendu arrive.
-
- Postmaster et postgres ont tous deux plusieurs options de déboguage de
- disponible. D'abord, quand vous lancez postmaster, vérifiez que vous
- envoyez les sorties standard et d'erreur dans un fichier de traces
- comme :
- cd /usr/local/pgsql
- ./bin/postmaster >server.log 2>&1 &
-
- Ceci va créer un fichier server.log dans le répertoire racine de
- PostgreSQL. Ce fichier contient des informations utiles sur les
- problèmes ou erreurs rencontrés par le serveur. Postmaster dispose
- d'une option -d qui permet de rapporter des informations encore plus
- détaillées d'être rapportées. L'option -d prend un numéro qui spécifie
- le niveau de déboguage. Faites attention au fait que des valeurs
- élévées de niveau de déboguage génerent des fichiers de traces
- volumineux.
-
- Si postmaster ne tourne pas, vous pouvez lancer le serveur postgres de
- la ligne de commande et taper votre requête SQL directement. Ceci est
- recommandé seulement pour des fonctions de déboguage. Notez qu'un
- retour chariot termine la requête, pas un point-virgule. Si vous
- compilez avec les symboles de déboguage, vous pouvez utiliser un
- débogueur pour voir ce qui se passe. Parce que le serveur n'a pas été
- lancé par postmaster, il ne tourne pas dans un environnement identique
- et les problèmes d'interaction de verrouillage/serveur ne peuvent être
- dupliqués.
-
- Si postmaster est en train de tourner, lancez psql dans une fenêtre
- puis trouvez le PID du processus postgres utilisé par psql. Utilisez
- un débogueur pour l'attacher au PID postgres. Vous pouvez mettre un
- point d'arrêt dans le débogueur et envoyez des requêtes de psql. Si
- vous déboguez le démarrage de postgres, vous pouvez mettre
- PGOPTIONS="-W n", puis lancez psql. Ceci va retarder le démarrage de n
- secondes pour que vous puissiez attacher un débogueur au processus,
- fixer des points d'arrêt et continuer la séquence de démarrage.
-
- Le programme postgres a les options -s, -A et -t qui peuvent être
- utile pour des mesures de déboguage et de performance.
-
- Vous pouvez compiler avec les options de performance pour voir quelles
- fonctions prennent du temps d'exécution. Les fichiers de gestion du
- serveur seront déposés dans le répertoire pgsql/data/base/nom_db. Les
- fichiers de gestion clients seront mis dans le répertoire actuel du
- client. Linux requiert une compilation avec -DLINUX_PROFILE pour une
- meilleure gestion.
-
- 3.8) Pourquoi est-ce que j'obtiens des messages Sorry, too many clients
- quand je me connecte ?
-
- Vous pouvez augmenter la limite de postmaster sur le nombre de
- processus serveur concurrents qu'il peut lancer.
-
- La limite par défaut est de 32 processus. Vous pouvez l'augmenter en
- relançant postmaster avec une valeur -N appropriée ou en modifiant
- postgresql.conf.
-
- Tenez compte du fait que si vous fixez -N plus grand que 32, vous
- devez aussi augmenter -B au-dela de sa valeur par défaut 64 ; -B doit
- valoir au moins deux fois -N et probablement plus pour une meilleure
- performance. Pour de grand nombres de processus serveurs vous aurez
- probablement aussi augmenter plusieurs parametres de configuration du
- noyau Unix. Les choses a vérifier incluent la taille maximale des
- blocs de mémoire partagée, SHMMAX ; le nombre maximal de sémaphores,
- SEMMNS et SEMMNI ; le nombre maximal de processus, NPROC ; le nombre
- maximal de processus par utilisateur, MAXUPRC ; et le nombre maximal
- de fichiers ouverts, NFILE et NINODE. La raison pour laquelle
- PostgreSQL a une limite sur le nombre de processus serveurs autorisés
- est pour que votre système ne tombe pas à court de ressources.
-
- 3.9) Que contient le répertoire pgsql_tmp ?
-
- Ce répertoire contient des fichiers temporaires générés par le moteur
- de requête. Par exemple, si un tri doit être fait pour satisfaire un
- ORDER BY et que ce tri requiert plus de place que le paramètre -S du
- serveur n'autorise, alors des fichiers temporaires seront créés pour
- contenir les données nécessaires.
-
- Les fichiers temporaires sont d'habitude effacés automatiquement mais
- peuvent rester si un serveur s'arrête brutalement pendant un tri. Un
- arrêt et un redémarrage de postmaster effacera les fichiers dans ces
- répertoires.
-
- 3.10) Pourquoi est-ce que j'ai besoin de faire une sauvegarde des bases et
- de restaurer pour mettre a jour les versions de PostgreSQL ?
-
- L'équipe PostgreSQL ne fait que des changements mineurs entre des
- versions mineurs, donc mettre à jour de 7.2 vers 7.2.1 ne nécessitera
- pas de sauvegarde et de restauration. Par contre, les sorties majeures
- (c'est-à-dire de 7.2 vers 7.3) changent souvent le format interne des
- tables systèmes et des fichiers de données. Ces modifications sont
- souvent complexes alors nous ne gardons pas de compatibilité
- descendante pour les fichiers de données. Une sauvegarde exportera les
- données dans un format générique qui peut ensuite être chargé dans le
- nouveau format interne.
-
- Dans les sorties où le format sur disque ne change pas, le script
- pg_upgrade peut être utilisé pour mettre à jour sans
- sauvegarde/restauration. Les notes de sorties précisent si pg_upgrade
- est disponible pour la sortie.
-
- 3.11) Quels matériels dois-je utiliser ?
-
- Comme le matériel PC est compatible en grosse partie, les gens ont
- tendance à croire que tous les matériels PC sont de même qualité. Ce
- n'est pas le cas. La RAM ECC, le SCSI et les cartes-mère de qualité
- sont plus fiables et ont de meilleurs performances qu'un matériel
- moins coûteux. PostgreSQL fonctionnera sur à peu près tout matériel
- mais si la fiabilité et la performance sont importantes pour vous, il
- est rusé de bien considérer les options matérielles. Nos listes de
- diffusion peuvent être utilisées pour discuter des options matériels.
- _________________________________________________________________
-
- Questions fonctionnelles
-
- 4.1) Quelle est la différence entre curseur binaire et curseur normal ?
-
- Voir la page DECLARE du manuel pour une description.
-
- 4.2) Comment faire un SELECT seulement sur les premières lignes d'une
- requête ? Sur une ligne aléatoire ?
-
- Voir la page FETCH du manuel ou utiliser SELECT ... LIMIT....
-
- Il se peut que l'intégralité de la requête doive être évaluée, même si
- vous voulez seulement les premières lignes. Envisagez d'utiliser une
- requête avec une clause ORDER BY. S'il existe un index correspondant à
- l'ORDER BY, PostgreSQL peut n'évaluer que les premières lignes, sinon
- l'intégralité de la requête peut être évaluée, jusqu'à générer les
- lignes désirées.
-
- Pour faire un SELECT sur une ligne aléatoire :
- SELECT colonne
- FROM table
- ORDER BY random()
- LIMIT 1;
-
- 4.3) Comment obtenir une liste des tables ou d'autres objets que je vois
- dans psql ?
-
- Utilisez la commande \dt pour voir les tables dans psql. Pour une
- liste complète de commandes à l'intérieur de psql, vous pouvez
- utiliser \?. Autrement, vous pouvez lire le code source de psql dans
- le fichier pgsql/src/bin/psql/describe.c. Il contient des commandes
- SQL qui génèrent le contenu des commandes anti-slash de psql. Vous
- pouvez aussi lancer psql avec l'option -E, afin qu'il imprime les
- requêtes qu'il utilise pour exécuter les commandes que vous lui
- passez. PostgreSQL fournit aussi une interface d'informations sur le
- schéma compatible avec SQLi que vous pouvez interroger des
- informations sur la base de données.
-
- 4.4) Comment supprime-t-on une colonne d'une table, ou comment change-t-on
- son type de données ?
-
- La fonction DROP COLUMN a été ajoutée dans la version 7.3 avec ALTER
- TABLE DROP COLUMN. Pour les versions précédentes, vous pouvez faire :
- BEGIN;
- LOCK TABLE ancienne_table;
- SELECT ... -- sélectionnez toutes les colonnes sauf celle à supprimer
- INTO TABLE nouvelle_table
- FROM ancienne_table;
- DROP TABLE ancienne_table;
- ALTER TABLE nouvelle_table RENAME TO ancienne_table;
- COMMIT;
-
- Pour changer le type de données d'une colonne, faites :
- BEGIN;
- ALTER TABLE table ADD COLUMN nouvelle_colonne nouveau_type_de_donnees;
- UPDATE table SET nouvelle_colonne = CAST(ancienne_colonne AS nouveau_type_de_donnees);
- ALTER TABLE table DROP COLUMN ancienne_colonne;
- COMMIT;
-
- Après, vous pouvez faire VACUUM FULL tab pour récupérer l'espace
- disque utilisé par les lignes expirées.
-
- 4.5) Quelle est la taille maximale pour une ligne, une table, une base de
- données ?
-
- Les limites sont :
- Taille maximum pour une base de données illimitée (il existe des basesde 32 To)
- Taille maximum pour une table 32 To
- Taille maximum pour une ligne 1,6 To
- Taille maximum pour un champ 1 Go
- Nombre maximum de lignes dans une table illimité
- Nombre maximum de colonnes dans une table 250-1600, selon le type de colonnes
- Nombre maximum d'index sur une table illimité
-
- Bien sûr, ces valeurs ne sont pas vraiment illimitée, elles sont
- limitées par l'espace disque disponible, ainsi que par l'espace de
- mémoire et de swap. Les performances peuvent se dégrader si ces
- valeurs sont inhabituellement grandes.
-
- La taille maximum des tables (32 To) ne nécessite pas que le système
- d'exploitation supporte les grands fichiers. Les grandes tables sont
- stockées sous forme de fichiers multiples de 1 Go, donc les limites de
- taille du système de fichier ne sont pas importantes.
-
- La taille maximum des tables et le nombre maximum de colonnes peuvent
- être quadriplés, si la taille des blocs par défaut est augmentée à
- 32 Ko.
-
- 4.6) Combien d'espace disque faut-il pour stocker les données d'un fichier
- texte typique ?
-
- Une base de données PostgreSQL peut utiliser jusqu'à cinq fois
- l'espace nécessaire pour stocker les données d'un fichier texte.
-
- A titre d'exemple, considérez un fichier de 100 000 lignes, comportant
- un entier et une chaîne de description sur chaque ligne. Supposons que
- la chaîne soit longue en moyenne de 20 octets. Le fichier texte serait
- de 2,8 Mo. La taille du fichier d'une base de données PostgreSQL peut
- être estimée à 6,4 Mo :
- 32 octets: chaque ligne (approximation)
- 24 octets: un champ 'entier' et un champ 'texte'
- + 4 octets: pointeur vers le tuple sur la page
- ----------------------------------------
- 60 octets par ligne
-
- La taille des pages de données dans PostgreSQL est de 8192 octets (8 KO), donc :
-
- 8192 octets par page
- ---------------------- = 136 lignes par page de base de données (arrondi à l'entier inférieur)
- 60 octets par ligne
-
- 100000 lignes de données
- ------------------------- = 735 pages de base de données (arrondi à l'entier supérieur)
- 128 lignes par page
-
-735 pages de base de données * 8192 octets par page = 6 021 120 octets (6,4 Mo)
-
- Les index utilisent moins d'espace, mais ils contiennent les données
- indexées, ils peuvent donc également être grands.
-
- Les NULL sont stockés sous forme de bitmap, aussi utilisent-ils très
- peu d'espace.
-
- 4.7) Comment puis-je savoir quels index, tables, bases de données et
- utilisateurs sont définis ?
-
- psql dispose de plusieurs commandes commençant par un anti-slash pour
- retrouver ces informations. Utilisez \? pour les connaître. Il existe
- aussi des tables systèmes, qui commencent par pg_ et qui les décrivent
- également. Aussi, psql -l liste toutes les bases de données.
-
- Essayez également le fichier pgsql/src/tutorial/syscat.source. Il
- illustre un grand nombre de commandes SELECT nécessaires pour
- récupérer l'information des tables système de la base de données.
-
- 4.8) Mes requêtes sont lentes ou ne font pas usage des index. Pourquoi ?
-
- Les index ne sont pas automatiquement utilisés par chaque requête. Ils
- sont utilisés uniquement si la table est plus grande qu'une certaine
- taille, et si la requête sélectionne seulement un faible pourcentage
- des lignes de la table. Ceci est dû au fait qu'un accès disque
- aléatoire causé par un parcours d'index peut être plus lent qu'une
- simple lecture de la table, ou parcours séquentiel
-
- Pour déterminer si un index devrait être utilisé, PostgreSQL a besoin
- des statistiques de la table. Ces statistiques sont collectées en
- lançant VACUUM ANALYZE ou simplement ANALYZE. Avec les statistiques,
- l'optimiseur sait combien de lignes se trouvent dans la table et peut
- mieux déterminer s'il faut utiliser l'index. Les statistiques sont
- également utiles pour déterminer l'ordre optimal des opérations de
- jointure. La collecte des statistiques devrait être effectuée
- régulièrement lorsque le contenu de la table change.
-
- Les index ne sont normalement pas utilisés pour les clauses ORDER BY
- ou pour les jointures. Un parcours séquentiel suivi d'un tri explicite
- est habituellement plus rapide qu'un parcours d'index pour une table
- importante. Toutefois, LIMIT combiné avec ORDER BY utilisera souvent
- un index parce que seulement une petite partie de la table est
- renvoyée. En fait, bien que MAX() et MIN() n'utilisent pas les index,
- il est possible de retrouver ces valeurs en utilisant un index avec
- ORDER BY et LIMIT :
- SELECT colonne
- FROM table
- ORDER BY colonne [ DESC ]
- LIMIT 1;
-
- Si vous pensez que l'optimiseur choisit par erreur un parcours
- sequentiel, utilisez SET enable_seqscan TO 'off' et lancez des tests
- pour voir si le parcours d'index est effectivement plus rapide.
-
- Lorsque vous utilisez des caractères joker tels que LIKE ou ~, les
- index peuvent seulement être utilisés dans certaines circonstances :
- * Le début de la chaîne de recherche doit être ancré au départ de la
- chaîne, c'est-à-dire
- + Les modèles pour LIKE ne doivent pas commencer par %.
- + Les modèles d'expression régulière pour ~ doivent commencer
- par ^.
- * La chaîne de recherche ne peut pas commencer par une classe de
- caractères, c'est-à-dire [a-e].
- * Les recherches sans casse comme ILIKE et ~* n'utilisent pas les
- index. Utilisez plutôt les index fonctionnels, décrit dans la
- section 4.12.
- * La locale C par défaut doit être utilisée lors de initdb.
-
- 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 type de la colonne de l'index. Ceci est particulièrement
- vrai pour les index de colonnes de type int2, int8 et numeric.
-
- 4.9) Comment puis-je savoir si l'optimiseur évalue mes requêtes ?
-
- Voir la page EXPLAIN du manuel.
-
- 4.10) Qu'est-ce qu'un index R-tree ?
-
- Un index R-tree est utilisé pour l'indexation des données spatiales.
- Un index de hachage ne permet pas les recherches par plage. Un index
- B-tree peut seulement faire des recherches sur une dimension. Les
- index R-tree peuvent traiter des données multi-dimensionnelles. Par
- exemple, si un index R-tree peut être construit sur un attribut de
- type point, le système peut plus efficacement gérer les requêtes du
- type "Sélection de tous les points d'un rectangle".
-
- L'article de référence qui décrit le système R-tree original est :
-
- 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.
-
- Vous pouvez également trouver ce papier dans le livre de Stonebraker
- "Readings in Database Systems".
-
- Les index R-tree intégrés peuvent prendre en charge les polygônes et
- les boîtes. En théorie, les R-trees peuvent être étendus à un plus
- grand nombre de dimensions. En pratique, l'extension des R-trees
- requiert pas mal de travail et nous n'avons pour le moment aucune
- documentation sur la façon de procéder.
-
- 4.11) Qu'est-ce que l'optimiseur génétique de requêtes ?
-
- Le module GEQO (acronyme de GEnetic Query Optimizer) accélère
- l'optimisation des requêtes lors de jointures de nombreuses tables par
- un algorithme génétique (GA). Il permet la gestion des grosses
- requêtes de jointures en utilisant une recherche non exhaustive.
-
- 4.12) Comment puis-je réaliser des recherches sur des expressions
- rationnelles ainsi que des recherches non sensibles à la casse ? Comment
- puis-je utiliser un index lors de recherches non sensibles à la casse ?
-
- L'opérateur ~ réalise des recherches d'expressions rationnelles et ~*
- le fait sans tenir compte de la casse. La variante de LIKE non
- sensible à la casse est ILIKE.
-
- Des comparaisons d'égalité non sensibles à la casse sont
- habituellement exprimées de cette façon :
- SELECT *
- FROM table
- WHERE lower(colonne) = 'abc';
-
- Ceci n'utilisera pas un index standard. Néanmoins, si vous créez un
- index fonctionnel, celui-ci sera utilisé :
- CREATE INDEX tableindex ON table (lower(colonne));
-
- 4.13) Comment puis-je détecter si un champ est NULL dans une requête ?
-
- Il vous suffit de tester la colonne avec IS NULL ou IS NOT NULL.
-
- 4.14) Quelle sont les différences entre les nombreux types de caractères ?
-
-Type Nom interne Notes
---------------------------------------------------
-VARCHAR(n) varchar n spécifie la taille maximum, sans remplissage
-CHAR(n) bpchar des espaces sont ajoutés pour obtenir la
- longueur fixe spécifiée
-TEXT text pas de limite supérieure pour la taille
-BYTEA bytea tableau d'octets (accepte les octets nuls)
-"char" char un caractère
-
- Vous verrez le nom interne en examinant les catalogues système et dans
- quelques messages d'erreur.
-
- Les quatres premiers types du dessus sont des types "varlena"
- (c'est-à-dire que les quatre premiers octets correspondent à la
- taille, suivi des données). Donc, l'espace réellement utilisé est
- légèrement plus grand que la taille déclarée. Néanmoins, ces types de
- données sont aussi sujet à la compression ou à un enregistrement en
- dehors de la table avec TOAST, donc l'espace occupé sur disque
- pourrait aussi être moindre que ce qu'on pourrait attendre.
-
- VARCHAR(n) est bien mieux pour enregistrer des chaînes de longueurs
- variables tout en limitant la taille de cette chaîne. TEXT est utile
- pour les chaînes de longueur illimitée, avec malgré tout un maximum de
- 1 Go.
-
- CHAR(n) est intéressant pour stocker des chaînes de taille identique.
- CHAR(n) complète avec des espaces pour arriver à la taille spécifiée
- alors que VARCHAR(n) n'enregistre que les caractères donnés. BYTEA
- sert à stocker des données binaires, particulièrement les données
- incluant des octets NULL. Tous les types décrits ici ont des
- performances similaires.
-
- 4.15.1) Comment puis-je créer un champ série, c'est-à-dire s'incrémentant
- automatiquement ?
-
- PostgreSQL supporte un type de données SERIAL. Il crée automatiquement
- une séquence. Par exemple, ceci :
- CREATE TABLE personne (
- id SERIAL,
- nom TEXT
- );
-
- est automatiquement traduit en ceci :
- CREATE SEQUENCE personne_id_seq;
- CREATE TABLE personne (
- id INT4 NOT NULL DEFAULT nextval('personne_id_seq'),
- nom TEXT
- );
-
- Voir la page man de create_sequence pour plus d'informations sur les
- séquences. Vous pouvez aussi utiliser le champ OID de chaque ligne
- comme valeur unique. Néanmoins, si vous avez besoin de sauvegarder
- puis recharger la base de données, vous devrez utiliser l'option -o ou
- l'option COPY WITH OIDS de pg_dump pour conserver les OIDs.
-
- 4.15.2) Comment puis-je obtenir la valeur d'un SERIAL suite à une
- insertion ?
-
- Une approche pour récupérer la prochaine valeur SERIAL à partir de
- l'objet séquence est d'utiliser la fonction nextval() avant
- l'insertion et de l'insérer ensuite explicitement. En utilisant la
- table d'exemple de la section 4.15.1, un exemple dans un
- pseudo-langage ressemblerait à ceci :
- nouvelle_id = execute("SELECT nextval('personne_id_seq')");
- execute("INSERT INTO personne (id, nom) VALUES (nouvelle_id, 'Blaise Pascal')");
-
- Vous pourriez ensuite utiliser la nouvelle valeur stockée dans
- nouvelle_id avec d'autres requêtes (c'est-à-dire en tant que clé
- étrangère de la table personne). Notez que le nom de la SEQUENCE
- automatiquement créée sera <table>_<colonneserial>_seq, où table et
- colonneserial sont les noms respectifs de votre table et de votre
- colonne SERIAL.
-
- Autrement, vous pouvez récupérer la valeur SERIAL affectée avec la
- fonction currval() après qu'elle ait été insérée par défaut,
- c'est-à-dire,
- execute("INSERT INTO personne (nom) VALUES ('Blaise Pascal')");
- nouvelle_id = execute("SELECT currval('personne_id_seq')");
-
- Enfin, vous pouvez utiliser l'OID renvoyé par l'instruction INSERT
- pour récupérer la valeur par défaut bien que cela soit l'appoche la
- moins portable et la valeur de l'OID se réinitialisera aux environs de
- quatre milliards. En Perl, avec DBI et le module DBD:Pg d'Edmund
- Mergl, l'ancienne valeur est disponible via $sth->{pg_oid_status}
- après un $sth->execute().
-
- 4.15.3) Est-ce que currval() et nextval() n'amènent pas des problèmes
- lorsque plusieurs utilisateurs les lancent en même temps ?
-
- Non. currval() renvoie la valeur actuelle affectée par votre
- processus, et non pas par tous les utilisateurs.
-
- 4.15.4) Pourquoi mes numéros de séquences ne sont pas ré-utilisés lors
- d'une annulation de transaction ? Pourquoi existe-t'il des trous dans la
- numérotation de ma colonne séquentielle (SERIAL) ?
-
- Pour améliorer les accès concurrents, les valeurs de séquences sont
- données aux transactions qui en ont besoin et ne sont pas bloquées
- jusqu'à la fin de la transaction. Ceci crée des trous dans le
- numérotage pour les transactions annulées.
-
- 4.16) Qu'est-ce qu'un OID ? Qu'est-ce qu'un TID ?
-
- Les OID sont la réponse de PostgreSQL aux identifiants de lignes
- uniques. Chaque ligne créée dans PostgreSQL obtient un OID unique.
- Tous les OID générés pendant initdb sont inférieurs à 16384 (voir
- include/access/transam.h). Tous les OID créés par un utilisateur sont
- supérieurs ou égaux à ceci. Par défaut, tous ces OID sont uniques non
- seulement dans une table ou une base mais unique à l'intérieur d'une
- installation PostgreSQL entière.
-
- PostgreSQL utilise les OID dans ses tables système interne pour lier
- les lignes entre tables. Ces OID peuvent être utilisés pour identifier
- des lignes utilisateurs spécifiques et utilisés dans des jointures. Il
- est recommandé que vous utilisiez le type de colonne OID pour stocker
- des valeurs OID. Vous pouvez créer un index sur le champ OID pour un
- accès plus rapide.
-
- Les OID sont attribués pour toute ligne d'un endroit central qui est
- utilisé par toutes les bases de données. Si vous voulez changer l'OID
- 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 :
- CREATE TABLE nouvelle_table (macolonne int);
- SELECT oid AS ancienne_oid, macolonne INTO table_temporaire FROM ancienne_table;
- COPY table_temporaire FROM '/tmp/tablepg';
- COPY nouvelle_table WITH OIDS FROM '/tmp/tablepg';
- DROP TABLE table_temporaire;
-
- Les OID sont stockés en tant qu'entiers de quatre octets et
- déborderont à quatre milliards. Personne n'a jamais rapporté un tel
- cas et nous avons prévu de retirer la limite avant que cela ne se
- produise.
-
- Les TIDs sont utilisés pour identifier des lignes physiques
- spécifiques avec des valeurs de bloc et décalage. Les TID changent
- après que les lignes aient été modifiés ou rechargés. Ils sont
- utilisés par des entrées d'index pour pointer vers des lignes
- physiques.
-
- 4.17) A quoi correspond certains termes utilisés avec PostgreSQL ?
-
- Une partie du code source et de l'ancienne documentation utilisent des
- termes dont l'usage est plus commun. Voici quelques exemples :
- * table, relation, classe
- * ligne (row), enregistrement (record), tuple
- * colonne (column), champ (field), attribut
- * récupère, sélectionne (select)
- * remplace (replace), met à jour (update)
- * ajoute (append), insère (insert)
- * OID, valeur séquentielle (serial value)
- * portal, curseur
- * range variable, table name, table alias
-
- Une liste des termes généraux pour le domaine des bases de données est
- disponible sur :
- http://hea-www.harvard.edu/MST/simul/software/docs/pkgs/pgsql/glossary
- /glossary.html
-
- 4.18) Pourquoi ai-je l'erreur ERROR: Memory exhausted in AllocSetAlloc() ?
-
- Vous manquez probablement de mémoire virtuelle sur votre système ou
- votre noyau a une limite assez basse pour certaines ressources.
- Essayez ceci avant de lancer postmaster :
- ulimit -d 262144
- limit datasize 256m
-
- Suivant votre shell, seul un d'eux pourrait réussir mais cela
- configurera d'une façon plus importante la taille du segment de
- données de votre processus. Cette commande s'applique au processus
- actuel et à tous les processus lancé par celui-ci. Si vous avez des
- problèmes avec le client SQL parce que le processus serveur renvoie
- trop de données, essayez ça avant de lancer le client.
-
- 4.19) Comment puis-je connaître la version de PostgreSQL que j'utilise ?
-
- A partir de psql, tapez SELECT version();
-
- 4.20) Pourquoi ai-je invalid large obj descriptor lors d'opérations sur des
- gros objects ?
-
- Vous avez besoin de placer BEGIN WORK et COMMIT autour de chaque
- utilisateur de gros objets, c'est-à-dire pour entourer lo_open ...
- lo_close.
-
- Actuellement, PostgreSQL force cette règle en fermant les gros objets
- lors de la transaction. Donc, le premier essai d'opérations sur ces
- objets, fonctionnant habituellement (au moins la plupart du temps)
- aura un invalid large obj descriptor. Donc le code, auparavant
- fonctionnel (au moins la plupart du temps), génèrera maintenant un
- message d'erreur si vous n'utilisez pas de transaction.
-
- Si vous utilisez une interface client interface comme ODBC, vous aurez
- peut-être besoin de lancer auto-commit off.
-
- 4.21) Comment puis-je c