PostgreSQL 8
De Wiki.Softwell
O PostgreSQL é suportado a partir da versão 8.0, em ambiente Windows ou Linux (Unix-Like).
Tabela de conteúdo |
Configurando a acesso externo ao PostgreSQL
Por padrão o PostgreSQL somente aceitas conexões locais 127.0.0.0 para permitir que outros computadores acessem a base de dados é necessário editar os arquivos postgresql.conf e o arquivo pg_hba.conf, ambos localizados dentro do diretório data do postgres. Edite-os com um editor de texto simples como o Bloco de Notas fazendo as seguintes alterações:
- No arquivo postgresql.conf edite o parâmetro listen_addresses definindo-o para '*', que por padrão vem comentado (prefixado por #):
listen_addresses='*'
- No arquivo pg_hba.conf substitua o 127.0.0.1/32 (loopback) por 0.0.0.0/0 (todas as redes):
host all all 127.0.0.1/32 md5
para:
host all all 0.0.0.0/0 md5
Feito isto basta reiniciar o PostgreSQL para que outros computadores possam acessar o PostgreSQL.
Trabalhando com diferentes Charsets
Para alguns conjuntos de caracteres é necessário a definição do charset utilizado dentro do Maker, para tal siga os seguintes procedimentos:
Adicione o parâmetro ServerCharset ao projeto e defina a codificação utilizada no cliente e no servidor separados por "/" (e.g. "UTF8/LATIN1").
Charset suportados
Estes são os charsets que são utilizados para o trabalho com PostgreSQL:
- LATIN1
- WIN1252
- UTF-8
Charset NÃO suportados
Há alguns charsets que sabidamente não oferecem suprote a recursos que são necessários pelo Maker e não são suportados, sendo assim não use os charsets abaixo:
- SQL_ASCII
Trabalhando com UTF-8
Crie o banco de dados previamente definindo o charset em UTF-8 através de um gerenciador do PostgreSQL como o pgAdmin III.
Na tela de criação de projetos preencha as configurações de servidor, banco de dados, usuário e senha de seu servidor, e antes de "Conectar >>" utilize o link de "Configurações Avançadas" onde será aberto uma tela de configuração onde se pode definir um CharSet personalizado. Para definir o Charset adicione um novo parâmetro com o botão "+" no canto inferior esquerdo da tela, você será questionado sobre o nome do parâmetro, neste momento informe "ServerCharset", e confirme. Com o novo parâmetro criado defina o seu valor para "UTF8/LATIN1" que obrigará o cliente a trabalhar em LATIN1 e o servidor com o charset UTF-8.
ServerCharset=UTF8/LATIN1
Observação para versão 2.5.0.0 a 2.5.0.17
Nestas versões você deve trocar a codificação do cliente diretamente no servidor Postgres, para tal faça o seguinte:
- Abra o arquivo postgresql.conf na pasta data do PostgreSQL, o caminho padrão é: c:\Arquivos de programas\Softwell Solutions\Maker 2.5\PostgreSQL\data\ mas pode variar de acordo o idioma do S.O. ou ter sido instalado em outro ponto no computador;
- Procure por client_encoding;
- Defina o valor desta variável para LATIN1 e remova o comentário (#) no início da linha;
client_encoding=LATIN1
- Salve o arquivo e reinicie o servidor PostgreSQL;
Pesquisa Case Insensitive
Origem do texto: PostgreSQL: função TO_ASCII em banco UTF-8
PostgreSQL: função TO_ASCII em banco UTF-8
a função TO_ASCII no postgresql é muito util principalmente para buscas onde se quer ignorar acentos em string. Ela funciona bem quando o banco de dados estiver em LATIN1 por exemplo.
SELECT TO_ASCII('tchê'); -- retorna 'tche'
mas quando usamos ela em um banco UTF8 retorna o erro “conversão de condificação de UTF8 para ASCII não é suportada”.
Para contornar isso criei uma função SEM_ACENTO para usar no lugar da TO_ASCII.
CREATE OR REPLACE FUNCTION sem_acento(text) RETURNS text AS $BODY$ select translate($1,'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC'); $BODY$ LANGUAGE 'sql' IMMUTABLE STRICT;
Configurando o Database.xml
Após criar a função acima será necessário editar o Database.xml para utilizar a função sem acento no lugar do TO_ASCII. Para tal localize o seguinte trecho do XML:
<item>
<item-name>UpperFunctionStart</item-name>
<item-param>UPPER(to_ascii(</item-param>
</item>
e substitua to_ascii por sem_acento fincando igual ao trecho abaixo:
<item>
<item-name>UpperFunctionStart</item-name>
<item-param>UPPER(sem_acento(</item-param>
</item>
Extra:
É possível usar a função to_ascii em bancos codificados em UTF-8, mas é necessário executar o
seguinte comando (apenas uma vez para cada bd):
CREATE FUNCTION to_ascii(bytea, name) RETURNS text AS 'to_ascii_encname' LANGUAGE internal;
Após isso você poderá fazer a conversão com a sintaxe:
select to_ascii(convert_to(<sua string>,'LATIN1'), 'LATIN1');
Como no exemplo:
select to_ascii(convert_to('áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇ','LATIN1'), 'LATIN1');
--retorna: "aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcC"
PostgreSQL: migrando de LATIN1 para UTF-8
Origem do texto: PostgreSQL: migrando de LATIN1 pra UTF-8
Pra padronizar meus sistemas, resolvi migrar as bases de LATIN1 pra UTF8. Sei que alguns não vão concordar com minha escolha mas enfim. Segue os passos que eu fiz em um servidor RedHat5 (testei com Debian e funcionou também) com a versão 8.1 do PostgreSQL. Fiz com uma base de em torno de 800Mb. Recomendo que teste em um ambiente separado antes de aplicar na produção. Use por conta e risco.
Primeiro pare todos os serviços que utilizam o banco (ex. stop no apache, tomcat, jboss) para ninguém (usuários) alterar o banco durante o processo. Nos comandos abaixo, substitua: usuario_banco = usuário dono do banco, com permissões de apagar e criar bancos meu_banco = o banco que vc quer fazer a migração
fazer um backup em texto plano
/usr/bin/pg_dump -i -h localhost -U usuario_banco -F p -D -v -f bancoL.sql meu_banco
aqui está o segredo. Use o software iconv para conversão
iconv -f iso-8859-1 -t utf-8 bancoL.sql > bancoU.sql
abra o arquivo bancoL.sql (de preferencia use o vim pra editar) e no inicio aí pela linha 7, onde tem “SET client_encoding = ‘LATIN1′;” troque LATIN1 por UTF8
Com banco fazer:
faça um backup é claro
pg_dump -U usuario_banco -i -F c -b -f banco.backup meu_banco
agora apague o banco inteiro
dropdb -h localhost -U usuario_banco meu_banco
crie-o com UTF8
createdb -h localhost -E UTF8 -U usuario_banco meu_banco
e agora restaure o banco “uteéfeoitoado” :)
psql -h localhost -U usuario_banco -d meu_banco < bancoU.sql
Nota:
O utilitário pg_dump oferece um recurso para exportar um banco de dados em outro encoding,
basta acrescentar --encoding= à sua linha de comando.
Para exportar um banco, recomendo a seguinte sintaxe:
pg_dump -h localhost --no-owner -d -Upostgres -f backup.sql --encoding=LATIN1 <seu bd>
Para restaurar esse banco de dados o comando será:
psql -Upostgres -f backup.sql <seu bd vazio>
