[pgbr-geral] locale
Olá para todos... Quando eu executo o comando \l tenho o seguinte resultado: Lista dos bancos de dados Nome | Dono | Codificação | Collation |Ctype| Privilégios de acesso --+--+-+-+-+--- biblivre3| biblivre | UTF8| pt_BR.UTF-8 | pt_BR.UTF-8 | jasperserver | jasperdb | UTF8| pt_BR.UTF-8 | pt_BR.UTF-8 | postgres | postgres | UTF8| pt_BR.UTF-8 | pt_BR.UTF-8 | template0| postgres | UTF8| pt_BR.UTF-8 | pt_BR.UTF-8 | =c/postgres : postgres=CTc/postgres template1| postgres | UTF8| pt_BR.UTF-8 | pt_BR.UTF-8 | =c/postgres : postgres=CTc/postgres (5 registros) Quando instalei o Postgresql, baixei o arquivo da página e instalei no meu Ubuntu 10.10, da forma mais automática possível. Em momento nenhum tive que fazer qualquer coisa como initdb, como tenho lido no manual. Também, esses parâmetros Collation e Ctype, surgiram de forma automática. Na hora de criar um banco só vou no menu do PGAdmin e crio o banco. Os valores acima, aparecem depois. Esses valores estão corretos? Por que até agora, tenho apenas estudado o Postgres, ainda não experimentei nenhum tipo de acesso fora do PGAdmin. Mais cedo ou mais tarde vou começar a escrever algum código php para acessar uma base de dados do Postgres, e fico preocupado, vocês sabem: com a grafia e ordenação de acentos e ç's. Tem um techo do manual que eu gostaria de algum comentário, sobre tudo com relação a questão dos acentos e ç's, que é o seguinte: *A desvantagem de utilizar idiomas diferentes de C e POSIX no PostgreSQL é o impacto no desempenho. Torna a* *manipulação de caracteres mais lenta, e impede a utilização de índices comuns na cláusula LIKE. Por estes motivos, a* *utilização de idioma deve ser feita somente quando for realmente necessária .* Muito obrigado. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] locale
Em 25 de novembro de 2011 14:14, Guimarães Faria Corcete DUTRA, Leandro l...@dutras.org escreveu: 2011/11/25 Marllos marl...@emater.mg.gov.br: biblivre3| biblivre | UTF8| pt_BR.UTF-8 | pt_BR.UTF-8 | Quando instalei o Postgresql, baixei o arquivo da página Que arquivo de que página? postgresql-9.1-1-linux-x64.bin http://www.enterprisedb.com/products-services-training/pgdownload instalei no meu Ubuntu 10.10, da forma mais automática possível. O mais automático possível seria ‘aptitude install postgresql’… na base do next esses parâmetros Collation e Ctype, surgiram de forma automática. São herdados do sistema operacional. Esses valores estão corretos? Sim. A desvantagem de utilizar idiomas diferentes de C e POSIX no PostgreSQL é o impacto no desempenho. Torna a manipulação de caracteres mais lenta O que geralmente é irrelevante… e impede a utilização de índices comuns na cláusula LIKE. Basta aprender a usar os índices adequados… Por estes motivos, a utilização de idioma deve ser feita somente quando for realmente necessária. E, em qualquer lugar onde não se fale inglês, ela geralmente é ‘realmente necessária’. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] locale
Obrigado Jota e Faria. Queria saber, se vocês que usam o Postgresql, usam esses parametros que aparecem no meu. E se os meus parametros podem me dar dor de cabeça depois, na hora de usar o banco de dados. Em 25 de novembro de 2011 14:11, JotaComm jota.c...@gmail.com escreveu: Opa, Em 25 de novembro de 2011 14:06, Marllos marl...@emater.mg.gov.brescreveu: Olá para todos... Quando eu executo o comando \l tenho o seguinte resultado: Lista dos bancos de dados Nome | Dono | Codificação | Collation |Ctype| Privilégios de acesso --+--+-+-+-+--- biblivre3| biblivre | UTF8| pt_BR.UTF-8 | pt_BR.UTF-8 | jasperserver | jasperdb | UTF8| pt_BR.UTF-8 | pt_BR.UTF-8 | postgres | postgres | UTF8| pt_BR.UTF-8 | pt_BR.UTF-8 | template0| postgres | UTF8| pt_BR.UTF-8 | pt_BR.UTF-8 | =c/postgres : postgres=CTc/postgres template1| postgres | UTF8| pt_BR.UTF-8 | pt_BR.UTF-8 | =c/postgres : postgres=CTc/postgres (5 registros) Quando instalei o Postgresql, baixei o arquivo da página e instalei no meu Ubuntu 10.10, da forma mais automática possível. Em momento nenhum tive que fazer qualquer coisa como initdb, como tenho lido no manual. Também, esses parâmetros Collation e Ctype, surgiram de forma automática. Na hora de criar um banco só vou no menu do PGAdmin e crio o banco. Os valores acima, aparecem depois. Esses valores estão corretos? Por que até agora, tenho apenas estudado o Postgres, ainda não experimentei nenhum tipo de acesso fora do PGAdmin. Mais cedo ou mais tarde vou começar a escrever algum código php para acessar uma base de dados do Postgres, e fico preocupado, vocês sabem: com a grafia e ordenação de acentos e ç's. Tem um techo do manual que eu gostaria de algum comentário, sobre tudo com relação a questão dos acentos e ç's, que é o seguinte: *A desvantagem de utilizar idiomas diferentes de C e POSIX no PostgreSQL é o impacto no desempenho. Torna a* *manipulação de caracteres mais lenta, e impede a utilização de índices comuns na cláusula LIKE. Por estes motivos, a* *utilização de idioma deve ser feita somente quando for realmente necessária.* Não entendi sua dúvida. Muito obrigado. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Abraços -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] locale
O apt (apt-get, aptitude) é ainda mais simples, e instala uma versão específica da distribuição. Mas ai eu caio na versão 8.4.9 e os meu colegas aqui da Lista ficam que perguntando por que eu estou usando uma versão antiga!!! (rsss) . Ok, tem como usar o apt-get e pegar a versão 9.1.1? Obrigado. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] pgpass
Com relação ao export que vc sugeriu, eu fiz o teste, mas com outra variável ambiente: PGPASSWORD='senha'; export PGPASSWORD Deu certo, mas o manual diz que essa variável está em obsolescência. Então não vou usá-la. Eu fiz vários testes, o que eu pudi concluir foi o seguinte: O usuário tem que fazer o backup do seu próprio banco, só assim o .pgpass funciona. Por exemplo: se o usuário postgres fizer o backup do seu banco postgres: bkp.sh (com o conteudo -) ... pg_dump -U postgres -Ft postgres arquivo /var/lib/postgresql/.pgpass (com o conteudo -) localhost:5432:postgres:postgres:senha_do_postgres Funciona, mas se o usuário postgres tentar fazer o backup de outro banco, por exemplo: bkp.sh (com o conteudo -) ... pg_dump -U postgres -Ft outro_banco arquivo /var/lib/postgresql/.pgpass (com o conteudo -) localhost:5432:postgres:outro_banco:senha_do_postgres ou /var/lib/postgresql/.pgpass (com o conteudo -) localhost:5432:postgres:postgres:senha_do_postgres Nesse caso o .pgpass não funciona, sendo a senha solicitada para o usuário postgres. Eu entendo que se o comando no script for: pg_dump -U postgres -Ft outro_banco arquivo então o .pgpass deveria funcionar com uma linha do tipo: localhost:5432:postgres:outro_banco:senha_do_postgres É isso, ou estou redondamente enganado (espero que sim)? Marllos. Em 23 de novembro de 2011 23:01, Flavio Henrique Araque Gurgel fha...@gmail.com escreveu: Em 23 de novembro de 2011 09:49, Marllos marl...@emater.mg.gov.br escreveu: Obrigado Flávio. Na verdade estou estudando um pouco o Postgresql, e no momento estou tentando entender o uso do arquivo .pgpass. No manual diz: Ótimo, mais pessoas estudando PostgreSQL sempre é bom. é um arquivo que contém senhas a serem utilizadas se a conexão requisitar uma senha (e a senha não tiver sido especificada de outra maneira). Mas não está funcionando comigo. Eu tenho que fornecer a senha quando eu ou o cron(root) executa o scritp. Depois, concerteza quero experimentar também pelo método do ident. E colocando o export no começo do script deu certo? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] pgpass
Jota, estão assim sim... # local is for Unix domain socket connections only local all all md5 mas tem outra entrada antes: # Database administrative login by UNIX sockets local all postgres md5 Em 24 de novembro de 2011 10:47, JotaComm jota.c...@gmail.com escreveu: Em 23 de novembro de 2011 09:49, Marllos marl...@emater.mg.gov.brescreveu: Obrigado Flávio. Na verdade estou estudando um pouco o Postgresql, e no momento estou tentando entender o uso do arquivo .pgpass. No manual diz: *é um arquivo que contém senhas a serem utilizadas se a conexão requisitar uma senha (e a senha não tiver sido especificada de outra maneira).* Mas não está funcionando comigo. Eu tenho que fornecer a senha quando eu ou o cron(root) executa o scritp. Depois, concerteza quero experimentar também pelo método do ident. Qual a linha do psql que você está usando para tentar conectar? Veja um exemplo: -rw--- 1 joaopaulo joaopaulo 41 Nov 24 10:44 .pgpass O conteúdo do meu arquivo .pgpass localhost:5432:postgres:meusuario:$senha Simulação de conexão: psql postgres -U meusuario Welcome to psql 8.3.8, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit postgres= SELECT current_user; current_user -- meusuario (1 row) E o meu arquivo pg_hba.conf está assim: # local is for Unix domain socket connections only local all all md5 Suas configurações estão assim também? Em 22 de novembro de 2011 23:45, Flavio Henrique Araque Gurgel fha...@gmail.com escreveu: local foi só um dos teste de desespero. estou colocando mesmo é localhost. Mas o que vc falou acho que não testei no linux, o windows para que não funcionou. Amanha vou testar no trabalho... Obrigado. Observações úteis: 1) Você está em Linux, porque não esquece esse negócio de .pgpass e coloca ident no pg_hba.conf? O efeito é o mesmo (acho até mais seguro). 2) O cron *não* lê variáveis de ambiente ao inicializar scripts. Exporte a variável $HOME no início do seu script que deve resolver, assim (se o .pgpass estiver em /home/postgres: export HOME=/home/postgres []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Abraços -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] pgpass
O Jota, muito obrigado. O meu raciocínio estava invertido: Em vez de digitar nome_do_hospedeiro:porta:nome_do_banco_de_dados:nome_do_usuário:senha eu digitei nome_do_hospedeiro:porta:nome_do_usuário:nome_do_banco_de_dados:senha Em 24 de novembro de 2011 11:32, JotaComm jota.c...@gmail.com escreveu: Olá, Em 24 de novembro de 2011 11:12, Marllos marl...@emater.mg.gov.brescreveu: Com relação ao export que vc sugeriu, eu fiz o teste, mas com outra variável ambiente: PGPASSWORD='senha'; export PGPASSWORD Deu certo, mas o manual diz que essa variável está em obsolescência. Então não vou usá-la. Eu fiz vários testes, o que eu pudi concluir foi o seguinte: O usuário tem que fazer o backup do seu próprio banco, só assim o .pgpass funciona. Por exemplo: se o usuário postgres fizer o backup do seu banco postgres: Como assim fazer o backup do seu próprio banco? Isso não faz nenhum sentido. bkp.sh (com o conteudo -) ... pg_dump -U postgres -Ft postgres arquivo /var/lib/postgresql/.pgpass (com o conteudo -) localhost:5432:postgres:postgres:senha_do_postgres Neste caso o usuário postgres só se conecta ao banco postgres sem pedir a senha. Funciona, mas se o usuário postgres tentar fazer o backup de outro banco, por exemplo: bkp.sh (com o conteudo -) ... pg_dump -U postgres -Ft outro_banco arquivo /var/lib/postgresql/.pgpass (com o conteudo -) localhost:5432:postgres:outro_banco:senha_do_postgres ou /var/lib/postgresql/.pgpass (com o conteudo -) localhost:5432:postgres:postgres:senha_do_postgres Nesse caso o .pgpass não funciona, sendo a senha solicitada para o usuário postgres. Sim, porque você tem que liberar no arquivo .pgpass para outros bancos, por exemplo: localhost:5432:postgres:postgres:senha_do_postgres localhost:5432:outro_banco:postgres:senha_do_postgres Só com o arquivo .pgpass neste formato é que vai funcionar como você deseja. Eu entendo que se o comando no script for: pg_dump -U postgres -Ft outro_banco arquivo então o .pgpass deveria funcionar com uma linha do tipo: localhost:5432:postgres:outro_banco:senha_do_postgres É isso, ou estou redondamente enganado (espero que sim)? Marllos. Em 23 de novembro de 2011 23:01, Flavio Henrique Araque Gurgel fha...@gmail.com escreveu: Em 23 de novembro de 2011 09:49, Marllos marl...@emater.mg.gov.br escreveu: Obrigado Flávio. Na verdade estou estudando um pouco o Postgresql, e no momento estou tentando entender o uso do arquivo .pgpass. No manual diz: Ótimo, mais pessoas estudando PostgreSQL sempre é bom. é um arquivo que contém senhas a serem utilizadas se a conexão requisitar uma senha (e a senha não tiver sido especificada de outra maneira). Mas não está funcionando comigo. Eu tenho que fornecer a senha quando eu ou o cron(root) executa o scritp. Depois, concerteza quero experimentar também pelo método do ident. E colocando o export no começo do script deu certo? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Abraços -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] pgpass
Nos testes estavam dando certo, por que eu estava usando bancos onde o nome do usuario era o mesmo do que o nome dos bancos, e eu realmente achei muito sem sentido Em 24 de novembro de 2011 12:21, Marllos marl...@emater.mg.gov.brescreveu: O Jota, muito obrigado. O meu raciocínio estava invertido: Em vez de digitar nome_do_hospedeiro:porta:nome_do_banco_de_dados:nome_do_usuário:senha eu digitei nome_do_hospedeiro:porta:nome_do_usuário:nome_do_banco_de_dados:senha Em 24 de novembro de 2011 11:32, JotaComm jota.c...@gmail.com escreveu: Olá, Em 24 de novembro de 2011 11:12, Marllos marl...@emater.mg.gov.brescreveu: Com relação ao export que vc sugeriu, eu fiz o teste, mas com outra variável ambiente: PGPASSWORD='senha'; export PGPASSWORD Deu certo, mas o manual diz que essa variável está em obsolescência. Então não vou usá-la. Eu fiz vários testes, o que eu pudi concluir foi o seguinte: O usuário tem que fazer o backup do seu próprio banco, só assim o .pgpass funciona. Por exemplo: se o usuário postgres fizer o backup do seu banco postgres: Como assim fazer o backup do seu próprio banco? Isso não faz nenhum sentido. bkp.sh (com o conteudo -) ... pg_dump -U postgres -Ft postgres arquivo /var/lib/postgresql/.pgpass (com o conteudo -) localhost:5432:postgres:postgres:senha_do_postgres Neste caso o usuário postgres só se conecta ao banco postgres sem pedir a senha. Funciona, mas se o usuário postgres tentar fazer o backup de outro banco, por exemplo: bkp.sh (com o conteudo -) ... pg_dump -U postgres -Ft outro_banco arquivo /var/lib/postgresql/.pgpass (com o conteudo -) localhost:5432:postgres:outro_banco:senha_do_postgres ou /var/lib/postgresql/.pgpass (com o conteudo -) localhost:5432:postgres:postgres:senha_do_postgres Nesse caso o .pgpass não funciona, sendo a senha solicitada para o usuário postgres. Sim, porque você tem que liberar no arquivo .pgpass para outros bancos, por exemplo: localhost:5432:postgres:postgres:senha_do_postgres localhost:5432:outro_banco:postgres:senha_do_postgres Só com o arquivo .pgpass neste formato é que vai funcionar como você deseja. Eu entendo que se o comando no script for: pg_dump -U postgres -Ft outro_banco arquivo então o .pgpass deveria funcionar com uma linha do tipo: localhost:5432:postgres:outro_banco:senha_do_postgres É isso, ou estou redondamente enganado (espero que sim)? Marllos. Em 23 de novembro de 2011 23:01, Flavio Henrique Araque Gurgel fha...@gmail.com escreveu: Em 23 de novembro de 2011 09:49, Marllos marl...@emater.mg.gov.br escreveu: Obrigado Flávio. Na verdade estou estudando um pouco o Postgresql, e no momento estou tentando entender o uso do arquivo .pgpass. No manual diz: Ótimo, mais pessoas estudando PostgreSQL sempre é bom. é um arquivo que contém senhas a serem utilizadas se a conexão requisitar uma senha (e a senha não tiver sido especificada de outra maneira). Mas não está funcionando comigo. Eu tenho que fornecer a senha quando eu ou o cron(root) executa o scritp. Depois, concerteza quero experimentar também pelo método do ident. E colocando o export no começo do script deu certo? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Abraços -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] pgpass
Sim, muito importante concluir. Funcionou exatamente como eu queria! Com a ajuda de todos, e principalmente Jota e Euler: o resumo O arquivo .pgpass é um arquivo que fornece a senha de acordo com os parâmetros da conexão presentes no comando, por exemplo: psql, pg_dump, pg_restore, etc 1) Deve estar localizado na pasta home do usário (so) que executa o comando, por exemplo: root - /root/.pgpass postgres - /var/lib/postgresql/.pgpass (na minha instalação Postgresql 9.1.1/Ubuntu 10.10) fulano - /home/fulano/.pgpass 2) Precisa ter permissões 0600 e pertencer ao usário que executa o comando 3) cada linha do .pgpass deve ter o formato nome_do_hospedeiro:porta:nome_do_banco_de_dados:nome_do_usuário:senha localhost:5432:meu_banco:usuario:senha localhost:5432:*:postgres:senha_postgres Muito obrigado. Em 24 de novembro de 2011 12:57, Dickson S. Guedes lis...@guedesoft.netescreveu: Em 24-11-2011 12:36, Marllos escreveu: Nos testes estavam dando certo, por que eu estava usando bancos onde o nome do usuario era o mesmo do que o nome dos bancos, e eu realmente achei muito sem sentido Por questões de histórico, funcionou então? -- Dickson S. Guedes mail/xmpp: gue...@guedesoft.net - skype: guediz http://guedesoft.net - http://www.postgresql.org.br http://github.net/guedes - twitter: @guediz ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] pgpass
Logo depois que eu enviei o último email, lembrei que eu não tinha testado o crontab Fui testar e nada funcionou, olhei a questão do export e não resolveu. Pensei, vou verificar tudo antes de escrever de novo Depois de umas três horas testando isso e aquilo, eu descobri o erro... misericórdia! Olha só: estou acessando o meu servidor linux, que tem o postgresql, via Putty e o cron é dele, mas no momento olhar a hora para testar o cron, eu olhava no relogio do meu Windows 7, que está uns 10 minutos atrasado. Então, quando passava o horario certinho programado no cron, eu ia verificar se tinha arquivo e nada... Quando a ficha caiu, passei a olhar a hora do servidor e tá tudo funcionandoo cron inclusive Já pensou? Em 24 de novembro de 2011 13:53, Marllos marl...@emater.mg.gov.brescreveu: Sim, muito importante concluir. Funcionou exatamente como eu queria! Com a ajuda de todos, e principalmente Jota e Euler: o resumo O arquivo .pgpass é um arquivo que fornece a senha de acordo com os parâmetros da conexão presentes no comando, por exemplo: psql, pg_dump, pg_restore, etc 1) Deve estar localizado na pasta home do usário (so) que executa o comando, por exemplo: root - /root/.pgpass postgres - /var/lib/postgresql/.pgpass (na minha instalação Postgresql 9.1.1/Ubuntu 10.10) fulano - /home/fulano/.pgpass 2) Precisa ter permissões 0600 e pertencer ao usário que executa o comando 3) cada linha do .pgpass deve ter o formato nome_do_hospedeiro:porta:nome_do_banco_de_dados:nome_do_usuário:senha localhost:5432:meu_banco:usuario:senha localhost:5432:*:postgres:senha_postgres Muito obrigado. Em 24 de novembro de 2011 12:57, Dickson S. Guedes lis...@guedesoft.netescreveu: Em 24-11-2011 12:36, Marllos escreveu: Nos testes estavam dando certo, por que eu estava usando bancos onde o nome do usuario era o mesmo do que o nome dos bancos, e eu realmente achei muito sem sentido Por questões de histórico, funcionou então? -- Dickson S. Guedes mail/xmpp: gue...@guedesoft.net - skype: guediz http://guedesoft.net - http://www.postgresql.org.br http://github.net/guedes - twitter: @guediz ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] pgpass
Obrigado Flávio. Na verdade estou estudando um pouco o Postgresql, e no momento estou tentando entender o uso do arquivo .pgpass. No manual diz: *é um arquivo que contém senhas a serem utilizadas se a conexão requisitar uma senha (e a senha não tiver sido especificada de outra maneira).* Mas não está funcionando comigo. Eu tenho que fornecer a senha quando eu ou o cron(root) executa o scritp. Depois, concerteza quero experimentar também pelo método do ident. Em 22 de novembro de 2011 23:45, Flavio Henrique Araque Gurgel fha...@gmail.com escreveu: local foi só um dos teste de desespero. estou colocando mesmo é localhost. Mas o que vc falou acho que não testei no linux, o windows para que não funcionou. Amanha vou testar no trabalho... Obrigado. Observações úteis: 1) Você está em Linux, porque não esquece esse negócio de .pgpass e coloca ident no pg_hba.conf? O efeito é o mesmo (acho até mais seguro). 2) O cron *não* lê variáveis de ambiente ao inicializar scripts. Exporte a variável $HOME no início do seu script que deve resolver, assim (se o .pgpass estiver em /home/postgres: export HOME=/home/postgres []s Flavio Gurgel ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] backup/restore
Obrigado a todos. Vou procurar nos arquivos Em 21 de novembro de 2011 23:24, Leandro DUTRA, Guimarães Faria Corcete l...@dutras.org escreveu: Le 2011-21-11 22h24, Marllos a écrit : Obrigado Jota. Estou usando PG 9.1.1. Pois é, ainda não entendi bem como é essa questão de tamplate 0 e template 1. Marlos, isso foi explicado recentemente. Podes procurar nos arquivos? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] backup/restore
Dei uma olhada. mas ta difícil procurar ... alguém sabe o texto do assunto? ou o mês? Em 22 de novembro de 2011 08:37, Marllos marl...@emater.mg.gov.brescreveu: Obrigado a todos. Vou procurar nos arquivos Em 21 de novembro de 2011 23:24, Leandro DUTRA, Guimarães Faria Corcete l...@dutras.org escreveu: Le 2011-21-11 22h24, Marllos a écrit : Obrigado Jota. Estou usando PG 9.1.1. Pois é, ainda não entendi bem como é essa questão de tamplate 0 e template 1. Marlos, isso foi explicado recentemente. Podes procurar nos arquivos? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] backup/restore
valeu Em 22 de novembro de 2011 12:53, Osvaldo Kussama osvaldo.kuss...@gmail.comescreveu: Em 22 de novembro de 2011 10:54, Marllos marl...@emater.mg.gov.br escreveu: Dei uma olhada. mas ta difícil procurar ... alguém sabe o texto do assunto? ou o mês? Em 22 de novembro de 2011 08:37, Marllos marl...@emater.mg.gov.br escreveu: Obrigado a todos. Vou procurar nos arquivos Em 21 de novembro de 2011 23:24, Leandro DUTRA, Guimarães Faria Corcete l...@dutras.org escreveu: Le 2011-21-11 22h24, Marllos a écrit : Obrigado Jota. Estou usando PG 9.1.1. Pois é, ainda não entendi bem como é essa questão de tamplate 0 e template 1. Marlos, isso foi explicado recentemente. Podes procurar nos arquivos? http://listas.postgresql.org.br/pipermail/pgbr-geral/2011-November/028025.html http://www.postgresql.org/docs/current/interactive/manage-ag-templatedbs.html Osvaldo ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] pgpass
Olá para todos Mais uma vez preciso de ajuda! Não estou conseguindo usar o .pgpass! com o usuário postgres no terminal dei o comando cd ~ e cai na pasta /var/lib/postgresql Nessa pasta crie o arquivo .pgpass com a permissão 0600 veja: postgres@st100:~$ ls -lha total 24K drwxr-xr-x 3 postgres postgres 4,0K 2011-11-22 16:48 . drwxr-xr-x 70 root root 4,0K 2011-10-26 19:06 .. drwxr-xr-x 3 postgres postgres 4,0K 2010-11-16 13:59 8.4 -rw--- 1 postgres postgres 2,0K 2011-11-22 16:34 .bash_history -rw--- 1 postgres postgres 43 2011-11-22 16:58 .pgpass -rw--- 1 postgres postgres 653 2011-11-17 17:23 .psql_history postgres@omega:~$ pwd /var/lib/postgresql O conteudo do arquivo .pgpass é local:5433:postgres:postgres:$enha (a senha tem um $) também tentei localhost:5433:postgres:postgres:\$enha Também criei a pasta /home/postgres e copiei esse arquivo nela também O meu arquivo pg_hba.conf está como local all postgres md5 Faço um reload no servidor posgresql e sempre que eu rodo o script de backup, é pedido a senha. Não sei mais o que fazer! Alguem pode me ajudar? Esse arquivo .pgpass funciona com essa finalidade de informar a senha quando um script e rodado? Alguma coisa eu to fazendo de muito errado... Obrigado. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] pgpass
O comando é para ser executado no cron, mas estou executando o comando do terminal para fazer o teste. Estou em casa agora, mas é mais ou menos assim: scrip está na pasta /var/bancos/script/bkp-meubanco.sh o conteúdo do script #formo o nome do arquivo com a data pg_dump -U postgres -Ft banco /var/bancos/bkp/arquivo-bkp.tar /var/lib/postgresql/.pgpass (proprietario postgres, permissão rw- --- ---) e também em /home/postgres/.pgpass (essa pasta não exitia, eu criei: proprietario postgres, permissão rw- --- ---) local:5433:postgres:postgres:$enha Então o root executa o comando: root@maq:# /var/bancos/script/bkp-meubanco.sh Meu raciocínio é que que chama o script tem que ter permissão na pasta onde o arquivo-bkp.tar vai ser gravado, a senha que é solicitada é do usuário declarado em -U postgres, parece que o arquivo .pgpass é ignorado e se eu forneço a senha, o script termina com sucesso. Em 22 de novembro de 2011 16:18, Dickson S. Guedes lis...@guedesoft.netescreveu: Em 22-11-2011 18:14, Marllos escreveu: ... Faço um reload no servidor posgresql e sempre que eu rodo o script de backup, é pedido a senha. E como você está executando este script? Pela linha de comando com o usuário postgres? Você pode colar a linha de comando que você está utilizando para executar o script? []s -- Dickson S. Guedes mail/xmpp: gue...@guedesoft.net - skype: guediz http://guedesoft.net - http://www.postgresql.org.br http://github.net/guedes - twitter: @guediz ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] pgpass
O Windows está até mais fácil de testar e estou com o mesmo problema. Pede a senha quando eu rodo o arquivo bat na mão. Quando eu agendo, o prompt do dos aparece solicitando a senha. Se eu informo, o backp procede com sucesso. Então o script bat e sh estão corretos. O que eu acho que está errado é o arquivo .pgpass no linux e pgpass.conf no windows. Como eu disse estou editando esses arquivos com o seguinte conteudo: localhost:5433:postgres:postgres:agora_senha_so_de_numero No windows, esse arquivo já vem instalado, eu só editei. Em 22 de novembro de 2011 21:27, Marllos marl...@emater.mg.gov.brescreveu: O comando é para ser executado no cron, mas estou executando o comando do terminal para fazer o teste. Estou em casa agora, mas é mais ou menos assim: scrip está na pasta /var/bancos/script/bkp-meubanco.sh o conteúdo do script #formo o nome do arquivo com a data pg_dump -U postgres -Ft banco /var/bancos/bkp/arquivo-bkp.tar /var/lib/postgresql/.pgpass (proprietario postgres, permissão rw- --- ---) e também em /home/postgres/.pgpass (essa pasta não exitia, eu criei: proprietario postgres, permissão rw- --- ---) local:5433:postgres:postgres:$enha Então o root executa o comando: root@maq:# /var/bancos/script/bkp-meubanco.sh Meu raciocínio é que que chama o script tem que ter permissão na pasta onde o arquivo-bkp.tar vai ser gravado, a senha que é solicitada é do usuário declarado em -U postgres, parece que o arquivo .pgpass é ignorado e se eu forneço a senha, o script termina com sucesso. Em 22 de novembro de 2011 16:18, Dickson S. Guedes lis...@guedesoft.netescreveu: Em 22-11-2011 18:14, Marllos escreveu: ... Faço um reload no servidor posgresql e sempre que eu rodo o script de backup, é pedido a senha. E como você está executando este script? Pela linha de comando com o usuário postgres? Você pode colar a linha de comando que você está utilizando para executar o script? []s -- Dickson S. Guedes mail/xmpp: gue...@guedesoft.net - skype: guediz http://guedesoft.net - http://www.postgresql.org.br http://github.net/guedes - twitter: @guediz ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] pgpass
local foi só um dos teste de desespero. estou colocando mesmo é localhost. Mas o que vc falou acho que não testei no linux, o windows para que não funcionou. Amanha vou testar no trabalho... Obrigado. Em 22 de novembro de 2011 22:05, Euler Taveira de Oliveira eu...@timbira.com escreveu: On 22-11-2011 20:27, Marllos wrote: /var/lib/postgresql/.pgpass (proprietario postgres, permissão rw- --- ---) e também em /home/postgres/.pgpass (essa pasta não exitia, eu criei: proprietario postgres, permissão rw- --- ---) local:5433:postgres:postgres:$enha O arquivo .pgpass deve ficar na diretório $HOME do usuário do sistema operacional que executa o script, ou seja, o caminho indicado pelo comando 'echo $HOME'. Quanto ao conteúdo do arquivo, ele deve ser: maquina:porta:bancodedados:usuario:senha A não ser que exista uma máquina chamada 'local' mas acho que você quer dizer 'localhost'. -- Euler Taveira de Oliveira - Timbira http://www.timbira.com.br/ PostgreSQL: Consultoria, Desenvolvimento, Suporte 24x7 e Treinamento ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] backup/restore
Olá pessoal! Estou em fase de estudo do PostgreSQL, dai tenho experimentado vários comandos. Um deles é o backup/restore, onde estou usando o seguinte formato: $ pg_dump -U postgres -Ft banco arquivo.tar e depois $ pg_restore -U postgres -d banco arquivo.tar ou $ pg_restore -U postgres -c -d banco arquivo.tar As vezes o dump é num servidor, e o restore é em outro, etc. Mas eu sempre recebo a msg informando que a linguagem plpgsql já está instalada. Eu sei que isto não está sendo problema, mas como eu faço para evitar essa mensagem? Obrigado. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] backup/restore
Obrigado Jota. Estou usando PG 9.1.1. Pois é, ainda não entendi bem como é essa questão de tamplate 0 e template 1. Eu realmente não sei qual template estou usando. Como faço para saber? Marllos Em 21 de novembro de 2011 22:19, JotaComm jota.c...@gmail.com escreveu: Olá, Em 21 de novembro de 2011 21:40, Marllos marl...@emater.mg.gov.brescreveu: Olá pessoal! Estou em fase de estudo do PostgreSQL, dai tenho experimentado vários comandos. Um deles é o backup/restore, onde estou usando o seguinte formato: $ pg_dump -U postgres -Ft banco arquivo.tar e depois $ pg_restore -U postgres -d banco arquivo.tar ou $ pg_restore -U postgres -c -d banco arquivo.tar As vezes o dump é num servidor, e o restore é em outro, etc. Mas eu sempre recebo a msg informando que a linguagem plpgsql já está instalada. Eu sei que isto não está sendo problema, mas como eu faço para evitar essa mensagem? Qual a versão do seu PostgreSQL? Isso acontece porque você deve estar usando como template o banco tamplate1 na hora de criação do banco para o pg_restore. Se você quer que isso não aconteça mais, basta se conectar no banco template1 e deleter a linguagem plpgsql. Obrigado. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Abraços -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Script está demorando muito no PostgreSQL
Independente do COPY ou dos INSERTS. COPY é mais rápido que INSERTS? Sim. Com COPY vai ficar mais rápido que no Firebird? Depende. Depende do hardware todo, máquina, CPU, memória, discos, índices, etc. Depende do tuning. O Firebird por padrão é inseguro, não faz os fsyncs. Precisa montar discos com noasync para garantir. Já perdi bancos Firebird por isso, e os desenvolvedores dizem que a culpa é do kernel do Linux. Pra comparar (injustamente) o PostgreSQL com o Firebird, tem que botar o PostgreSQL em modo inseguro, desligando o fsync. Outra coisa, o MVCC do PostgreSQL é diferente do Firebird. O principal (além do fsync), o Firebird *NÃO* faz logs de transação. PostgreSQL faz. Isso causa um overhead na escrita do PostgreSQL, mas o aumento da segurança dos seus dados é BRUTAL. Então, não compare mais Firebird com PostgreSQL numa carga de dados de 2 minutos. É pura e absoluta perda de seu precioso tempo. Os 60 minutos estavam errados, com certeza, coisa do PgAdmin ou da sua rede. Agora, 2 minutos contra 1, isso é absolutamente normal, aceitável e indigno de qualquer nota especial. []s Flavio Gurgel Muito obrigado a todos. pelas dicas e sugestões. Só um detalhe eu não queria comparar Postgresql e Firebird, para saber que é o melhor ou o mais rápido, como eu disse no primeiro post. Nem entendo muito de banco de dados para isso. O problema era um script, executado num servidor (local) que estava demorando muito... O Firebird era apenas uma comparação (como diz a Concessa). Quero incentivar o pessoal daqui da empresa a mudar para o Postgresql. O grande problema são as mais de duzentas procedures para 2 ou 3 pessoas converterem... ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Script está demorando muito no PostgreSQL
Marlos, Diga quais são os valores dos parâmetros shared_buffers e checkpoint_segments. att. Danilo shared_buffers = 24MB #checkpoint_segments = 3# in logfile segments, min 1, 16MB each #checkpoint_timeout = 5min# range 30s-1h #checkpoint_completion_target = 0.5# checkpoint target duration, 0.0 - 1.0 #checkpoint_warning = 30s# 0 disables ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Script está demorando muito no PostgreSQL
Marllos, sugiro a leitura desta parte do manual do PostgreSQL, que trata justamente sobre grande quantidade de INSERTS para popular um banco de dados: http://www.postgresql.org/docs/8.4/static/populate.html ainda, segue abaixo o link para uma página mostrando como montar os INSERTS para serem mais rápidos, caso não consiga usar o comando COPY: http://kaiv.wordpress.com/2007/07/19/faster-insert-for-multiple-rows/ Marçal de Lima Hokama -- Fica um pouco dificil para mim, por que eu teria que gerar as linhas do script mas é bom saber dessa possibilidade e comparar com o script sem o copy ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Script está demorando muito no PostgreSQL
Usei agora o psql na minha máquina mais simples psql -U postgres -q banco arquivo.sql E o resultado foi muito mais rápido: *1 min e 49 s* na minha máquina HP Eu só não gostei foi que o Firebird continua na frente: 0 min e 41 s na minha máquina HP. O resultado do PGAdminIII era *66 min* na máquina +parruda e 2 horas numa maquina mais simples que tenho em casa. No HP não testei o PGAdminIII Muito obrigado a todos ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Script está demorando muito no PostgreSQL
Marlos, Diga quais são os valores dos parâmetros shared_buffers e checkpoint_segments. att. Danilo shared_buffers = 24MB #checkpoint_segments = 3# in logfile segments, min 1, 16MB each #checkpoint_timeout = 5min# range 30s-1h #checkpoint_completion_target = 0.5# checkpoint target duration, 0.0 - 1.0 #checkpoint_warning = 30s# 0 disables Esses valores estão bons? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Script está demorando muito no PostgreSQL
com certeza compesa, vou arrumar um tempinho e fazer Em 17 de novembro de 2011 17:52, Flávio Alves Granato flavio.gran...@gmail.com escreveu: Em 17 de novembro de 2011 17:48, Marllos marl...@emater.mg.gov.brescreveu: Eu não fiz com o copy por que eu teria que gerar o scritp, a partir do firebird, com o copy Para questão de testes compensa, não? Pois é mais uma possibilidade que você elimina. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] Script está demorando muito no PostgreSQL
Boa tarde a todos. Não quero entrar naquela velha discussão: quem é melhor? Mas eu quero entender. Tenho um banco de dados Firebird, com 54 tabelas com tamanho total de 30 MB. Migrei esse banco todo para o PostgreSQL 8.4.9. No PostgreSQL o tamanho do banco ficou em torno dos 30 MB também. Só que o script de criação do banco, que cria tudo: tabelas, índices, trigger, etc, quando executado para o Firbird, gasta 133 segundos (2 min), enquanto que no PostgreSQL, com uma máquina muito superior, gasta 4003055 ms = 66 min. Por que existe toda essa diferença? O Postgresql levou um tempo 30 vezes maior! O que pode estar errado? Alguma sugestão? Obrigado. Marllos. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Script está demorando muito no PostgreSQL
Eu vou instalar uma versão mais nova, quando eu fiz o apt-get ele caiu automaticamente nessa versao. Pus um start transaction o inicio e um commit no final geral, isso só já resolveria? Por que parece que vai gastar o mesmo tempo... Sobre as configurações do servidor, ainda náo aprendi sobre elas. estou no começando agora. O primeiro exercicio que me propus foi converter uma base antiga em postgresql. Isto para aprender a sintaxe e o plgpsql. E toda a minha fonte de consulta é o manual oficial e esta lista. Em 16 de novembro de 2011 14:53, Daniel Cristian Cruz danielcrist...@gmail.com escreveu: Marllos, A primeira coisa, na carga por SQL deve ser verificado se os dados estão dentro de transações (você pode adicionar START TRANSACTION; antes do primeiro INSERT e COMMIT; depois do último INSERT de cada tabela). A segunda coisa a ser verificada é se a configuração está adequada para o servidor novo. O arquivo de configuração pode estar padrão, e isso pode limitar um pouco o desempenho. A terceira coisa a verificar é a versão. Por quê a versão antiga? Não é o caso, mas nas versões 9.0 em diante, uma carga de um dump através do comando pg_restore do PostgreSQL, pode ter a opção -j, que indica o número de tarefas paralelas de restore, que pode usar o processamento ocioso de sistemas com vários processadores. Atenciosamente, Em 16 de novembro de 2011 14:43, Marllos marl...@emater.mg.gov.br escreveu: Boa tarde a todos. Não quero entrar naquela velha discussão: quem é melhor? Mas eu quero entender. Tenho um banco de dados Firebird, com 54 tabelas com tamanho total de 30 MB. Migrei esse banco todo para o PostgreSQL 8.4.9. No PostgreSQL o tamanho do banco ficou em torno dos 30 MB também. Só que o script de criação do banco, que cria tudo: tabelas, índices, trigger, etc, quando executado para o Firbird, gasta 133 segundos (2 min), enquanto que no PostgreSQL, com uma máquina muito superior, gasta 4003055 ms = 66 min. Por que existe toda essa diferença? O Postgresql levou um tempo 30 vezes maior! O que pode estar errado? Alguma sugestão? Obrigado. Marllos. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Daniel Cristian Cruz クルズ クリスチアン ダニエル ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Script está demorando muito no PostgreSQL
Tentei o script com o start transaction na primeira linha e um commit na útima. O script demorou 3995947 ms que dá 66 min novamente. Ainda teve uma msg de erro no últimos inserts informando que a transação atual foi interrompida. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Script está demorando muito no PostgreSQL
É o seguinte: primeiro eu crio o banco vazio, então rodo o script no PgAdminIII que: 1) cria os sequences 2) cria as tabelas 3) crias as views 4) insere os dados 5) cria as constrainsts, 6) cria as functions e triggers O banco é criado normalmente. Inclusive eu consigo fazer bacup e restore do banco. O problema é que o firebird faz isso em 2 min e o Postgresql está fazendo em 66 min. Estou fazendo o processo novamente e vou verificar o log para ver se tem alguma dica nele, então eu posto. Obrigado pelas ajudas Marllos. Em 16 de novembro de 2011 17:01, Daniel Cristian Cruz danielcrist...@gmail.com creveu: Em 16 de novembro de 2011 16:53, Marllos marllos@emater.marl...@emater.mg.gov.br Tentei o script com o start transaction na primeira linha e um commit na útima. O script demorou 3995947 ms que dá 66 min novamente. Ainda teve uma msg de erro no últimos inserts informando que a transação atual foi interrompida. Provavelmente devido a algum comando SQL não compatível. Conforme o Bruno falou, confira no log do banco os erros que ocorreram. Podem estar faltando índices em chaves estrangeiras também... -- Daniel Cristian Cruz クルズ クリスチアン ダニエル ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Script está demorando muito no PostgreSQL
Em 16 de novembro de 2011 17:32, Marllos marl...@emater.mg.gov.brescreveu: Sim, depois de inserir os dados, eu crio os indices e as outras constraints Mas, o que está demorando 66 min é a estapa de inserir os dados, nesse momente não existe indice 1) cria os sequences -- rapido 2) cria as tabelas -- rapido 3) crias as views -- rapido 4) insere os dados -- 66 min 5) cria as constrainsts, -- rapidor 6) cria as functions e triggers -- rapido No firebird, eu sigo essa mesma ordem e tudo termina com menos de 2 min Em 16 de novembro de 2011 17:23, Leandro DUTRA, Guimarães Faria Corcete l...@dutras.org escreveu: Le 2011-16-11 17h19, Marllos a écrit : É o seguinte: primeiro eu crio o banco vazio, então rodo o script no PgAdminIII que: 1) cria os sequences 2) cria as tabelas 3) crias as views 4) insere os dados E quando são criados os índices? ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] Script está demorando muito no PostgreSQL
Eu rodo o firebird no computador hp, processador amd dual core 64 bits; 2,59 GHZ 1,75 MB ram com o xp O Postgresql está num Dell 64 bits 4 nucleos 2,5 GHz; 32 MB de ram com o Ubuntu 10.10 Em 16 de novembro de 2011 17:25, Bruno Silva bemanuel...@gmail.comescreveu: O banco é criado normalmente. Inclusive eu consigo fazer bacup e restore do banco. O problema é que o firebird faz isso em 2 min e o Postgresql está fazendo em 66 min. O hardware é o mesmo? Qual o SO? É o seguinte: primeiro eu crio o banco vazio, então rodo o script no PgAdminIII que: 1) cria os sequences 2) cria as tabelas 3) crias as views 4) insere os dados 5) cria as constrainsts, 6) cria as functions e triggers E os indices, são criados em que momento? Bruno E. A. Silva. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] chave primária numa trigger
Oi Daniel, muito grato pela sua boa vontade. É isso mesmo que eu preciso, só que eu não estou conseguindo dar o comando: CREATE LANGUAGE plpythonu; Sem esse comando recebo a msg que a linguagem python nao existe, mas ao der esse comando recebo a msg: [WARNING ] CREATE LANGUAGE plpythonu ERRO: não pôde carregar biblioteca C:/Arquivos de programas/PostgreSQL/8.4/lib/plpython.dll: unknown error 126 So que a dll está presente no local indicado na msg Em 10 de novembro de 2011 19:23, Daniel Cristian Cruz danielcrist...@gmail.com escreveu: Marllos, Não resisti, montei a função em plpython: CREATE EXTENSION plpythonu; CREATE OR REPLACE FUNCTION trigger_bala() RETURNS trigger LANGUAGE plpythonu AS $$ import random rv = plpy.execute(SELECT attname FROM pg_attribute JOIN pg_constraint ON pg_constraint.conrelid = pg_attribute.attrelid WHERE conkey = ARRAY[attnum] AND contype = 'p' AND pg_attribute.attrelid = '%s'::regclass % TD[table_name], 1) TD[new][rv[0][attname]] = random.random() return MODIFY $$; CREATE TABLE teste ( a float primary key ); CREATE TRIGGER teste_bala BEFORE INSERT ON teste FOR EACH ROW EXECUTE PROCEDURE trigger_bala(); INSERT INTO teste (a) VALUES (DEFAULT) RETURNING *; a 0.345787825955 (1 row) Em 10 de novembro de 2011 17:43, Marllos marl...@emater.mg.gov.brescreveu: Deixa eu explicar melhor, tenho um sistema asp+firebird, que estou convertendo para php + firebird. Com o objetos pdo do php, o mesmo codigo pode acessar uma base equivalente em qualquer outro banco de dados (que o pdo dá suporte e são muitos bancos, incluindo o postgresql). Então estou tentando reproduzir fielmente a minha base de dados do firebird para o postgresql e isso é mais um exercicio de aprendizado com o postgresql. Já a conversão de asp+firebird para php não é aprendizado, é trabalho mesmo. Em 10 de novembro de 2011 16:57, Danilo Silva danilo.dsg.go...@gmail.com escreveu: Por curiosidade, vc quer gerar um valor aleatório ( ou outro valor qualquer) para cada pk das tabelas? Se for isso, não seria mais fácil utilizar uma sequence e atribuir esta sequence como valor default das pks? Danilo Em 10 de novembro de 2011 16:29, Juliano Benvenuto Piovezan juli...@sinersoft.com.br escreveu: 2011/11/10 Marllos marl...@emater.mg.gov.br Foi mal amigo Na verdade eu quero é atribuir um valor a chave primária, mas fazendo refencia dinamica a chave. Uma coisa que posso ter passado na discussão, mas sua chave é simples ou composta? Em plpgsql você realmente não conseguirá isso, a não ser que você utilize o mesmo nome do campo em todas as tabelas. Como os nomes são diferentes, como você especificou, apenas com alguma outra pl mesmo, como pltcl. Segue exemplo: CREATE OR REPLACE FUNCTION fun_trg ( ) RETURNS trigger AS $body$ spi_exec -count 1 SELECT a.attname as col FROM pg_class c, pg_attribute a, pg_index i WHERE c.oid = i.indrelid AND a.attrelid = i.indexrelid AND not a.attisdropped AND a.attnum 0 AND i.indisprimary AND c.oid = '$TG_relid' spi_exec -count 1 SELECT uuid_generate_v4() as c set NEW($col) $c return [array get NEW] $body$ LANGUAGE 'pltcl' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER COST 100; ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Daniel Cristian Cruz クルズ クリスチアン ダニエル ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] chave primária numa trigger
obrigado Juliano, depois que vc falou eu procurei e instalei uma dll foi chamando outra, outra, outra, ... mas antes eu tive que colocar o bin do postgresql no path eu fiz os downloads de todas dlls, mesmo do Dependency nao acusando mais as dependencias, as dlls davam erro na hora de registrar com o comando regsrv32 com msg do tipo: nao foi possivel encontral o procedimento especificado, procurei fazer o registro na ordem certa, nao consegui registrar nenhuma, mesmo assim reiniciei o postgresql e tentei criar a pltcl, nao dei. talvez tenha que compilar, ms eu nao tenho o visual c++ no final das contas nda funcionou me parece que tem que compilar o tcl Em 11 de novembro de 2011 13:08, Juliano Benvenuto Piovezan juli...@sinersoft.com.br escreveu: 2011/11/11 Juliano Benvenuto Piovezan juli...@sinersoft.com.br: Faça o download do Dependency Walker [1] e com ele abra a dll a plpython.dll. Ele vai listar as dependências que estão faltando, não permitindo que o Postgres carregue a dll corretamente. Esqueci o link. [1] http://www.dependencywalker.com/ ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] chave primária numa trigger
eu to usando no windows a 8.4.9. estava me incomodando baixar um tanto de dll, que eu nem sei qual é. bom instalei um tal de ActiveStateTCL, e deu certo, agora vou testar as sugestões que todos deram obrigado. Em 11 de novembro de 2011 15:30, Guimarães Faria Corcete DUTRA, Leandro l...@dutras.org escreveu: 2011/11/11 Marllos marl...@emater.mg.gov.br: me parece que tem que compilar o tcl Isso seria muito estranho. Repare nos detalhes informados pelo DW, pode ser simples conflito de versões, principalmente se instalas uma versão antiga como a 8.4 ou se tens várias versões seja do PostgrSQL, seja do TCL instaladas. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] chave primária numa trigger
Foi mal amigo Na verdade eu quero é atribuir um valor a chave primária, mas fazendo refencia dinamica a chave. No Firebird, eu sou obrigado a ter uma função de trigger para cada tabela Em 10 de novembro de 2011 08:21, JotaComm jota.c...@gmail.com escreveu: Olá, Em 9 de novembro de 2011 18:44, Marllos marl...@emater.mg.gov.brescreveu: Obrigado Volak, mas eu preciso mudar a chave primaria na funçao da trigger O que você considera mudar a chave primaria? Executar um ALTER TABLE na coluna que tem a chave primária? Mudar o valor do atributo da chave primária? Meu exemplo foi para dar uma idéia do que você pode fazer, não conclui o exemplo porque de fato não consegui entender o que de fato você deseja. Em 9 de novembro de 2011 11:52, Wolak wo...@wolaksistemas.com.brescreveu: Em 09/11/2011 11:17, Marllos escreveu: Obrigado JotaComm No firebird, eu tenho que fazer uma trigger para cada tabela. No Postgresql eu percebi (se não estou enganado) que eu posso usar a mesma função de trigger em várias tabelas e é isso que estou tentando fazer. a minha função de trigger seria create or replace function *gerar_id()* returns trigger as $$ begin --essa trigger define a chave primária --as tabelas que vão disparar essa trigger são tabela1, tabela2, tabela3, ... (muitas) --essas tabelas já existem e cada uma tem uma chave primária, do mesmo tipo, mas com nomes diferentes new.(nome da chave primária da tabela que está disparando essa trigger) = uuid_generate_v4() end $$ language plpgsql; Agora eu quero usar essa trigger em várias tabelas: create tigger tabela1_tg before insert on tabela1 for each row execute *gerar_id()*; create tigger tabela2_tg before insert on tabela2 for each row execute *gerar_id()*; create tigger tabela3_tg before insert on tabela3 for each row execute *gerar_id()*; Etc... Em 9 de novembro de 2011 10:17, JotaComm jota.c...@gmail.com escreveu: Olá, Marllos Em 9 de novembro de 2011 10:15, Daniel Cristian Cruz danielcrist...@gmail.com escreveu: Acredito que uma forma seja usando PL/Python: http://www.postgresql.org/docs/9.1/interactive/plpython-trigger.html Já procurei como fazer com PL/pgSQL, mas não encontrei como referenciar dinamicamente o nome do atributo de chave primária. Você precisará consultar o catálogo, através da pg_attribute (attname) e da pg_constraint (contype='p'). Em 9 de novembro de 2011 10:02, Marllos marl...@emater.mg.gov.brescreveu: Por favor, preciso de ajuda para revolver um problema. E se for possível gostaria de um exemplo. Em uma trigger, eu quero alterar a chave primária da tabela que dispara essa trigger, mas de forma dinâmica, por exemplo: new.(referencia dinâmica a chave primária da tebela) = valor. Não entendi o que você deseja. Poderia colocar um exemplo prático da situação. Obrigado. Marllos. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Daniel Cristian Cruz クルズ クリスチアン ダニエル ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Abraços -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing listpgbr-ge...@listas.postgresql.org.brhttps://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral __ Information from ESET NOD32 Antivirus, version of virus signature database 6615 (2009) __ The message was checked by ESET NOD32 Antivirus. http://www.eset.com eu fiz isso de outra maneira, veja se é isso que precisa, isso é um exemplo que fiz para um colega que usava Firebird. --postgresql.conf --custom_variable_classes = 'sistema'# list of custom variable class names --sistema.fkempresa = 0 --sistema.fkfilial = 0 --SELECT SET_CONFIG('sistema.fkempresa', '1', FALSE); -- FALSE para sessão atual, TRUE para transação atual --SELECT SET_CONFIG('sistema.fkfilial', '2', FALSE); CREATE OR REPLACE FUNCTION codigonovo(pnometabela VARCHAR,ptipo VARCHAR) RETURNS VARCHAR AS $$ DECLARE nFkempresa INTEGER; nFkfilial INTEGER; rRetorno RECORD; BEGIN SELECT INTO nFkempresa CURRENT_SETTING('sistema.fkempresa'); SELECT INTO nFkfilial CURRENT_SETTING('sistema.fkfilial'); IF COALESCE(nFkempresa,0) = 0 THEN RAISE EXCEPTION 'Empresa não setada para a sessão corrente!'; END IF; IF COALESCE(nFkfilial,0) = 0 THEN RAISE EXCEPTION 'Filial não setada para a sessão corrente!'; END IF; IF LOWER(pTipo) = 'empresa' THEN RETURN nFkempresa; END
Re: [pgbr-geral] chave primária numa trigger
obrigado jota. a sua sujestão de código que eu vi foi plpgsql. Agora estou tentando usar a sua sugestão de pltcl, mas quando tento instalar a linguagem estou tendo problemas. não sei extamente qual é o procedimento para instalar a linguagem pltcl. o que eu estou fazendo é: create language pltcl; (clico no botão PGS na janela da query) e então recebo a msg: [WARNING ] create language pltcl ERRO: não pôde carregar biblioteca C:/Arquivos de programas/PostgreSQL/8.4/lib/pltcl.dll: unknown error 126 Em 10 de novembro de 2011 14:01, JotaComm jota.c...@gmail.com escreveu: Olá, Em 10 de novembro de 2011 11:38, Marllos marl...@emater.mg.gov.brescreveu: Foi mal amigo Na verdade eu quero é atribuir um valor a chave primária, mas fazendo refencia dinamica a chave. Então o código que enviei aqui ajuda bastante, ele não contém tudo, mas é o caminho das pedras :) No Firebird, eu sou obrigado a ter uma função de trigger para cada tabela Em 10 de novembro de 2011 08:21, JotaComm jota.c...@gmail.comescreveu: Olá, Em 9 de novembro de 2011 18:44, Marllos marl...@emater.mg.gov.brescreveu: Obrigado Volak, mas eu preciso mudar a chave primaria na funçao da trigger O que você considera mudar a chave primaria? Executar um ALTER TABLE na coluna que tem a chave primária? Mudar o valor do atributo da chave primária? Meu exemplo foi para dar uma idéia do que você pode fazer, não conclui o exemplo porque de fato não consegui entender o que de fato você deseja. Em 9 de novembro de 2011 11:52, Wolak wo...@wolaksistemas.com.brescreveu: Em 09/11/2011 11:17, Marllos escreveu: Obrigado JotaComm No firebird, eu tenho que fazer uma trigger para cada tabela. No Postgresql eu percebi (se não estou enganado) que eu posso usar a mesma função de trigger em várias tabelas e é isso que estou tentando fazer. a minha função de trigger seria create or replace function *gerar_id()* returns trigger as $$ begin --essa trigger define a chave primária --as tabelas que vão disparar essa trigger são tabela1, tabela2, tabela3, ... (muitas) --essas tabelas já existem e cada uma tem uma chave primária, do mesmo tipo, mas com nomes diferentes new.(nome da chave primária da tabela que está disparando essa trigger) = uuid_generate_v4() end $$ language plpgsql; Agora eu quero usar essa trigger em várias tabelas: create tigger tabela1_tg before insert on tabela1 for each row execute *gerar_id()*; create tigger tabela2_tg before insert on tabela2 for each row execute *gerar_id()*; create tigger tabela3_tg before insert on tabela3 for each row execute *gerar_id()*; Etc... Em 9 de novembro de 2011 10:17, JotaComm jota.c...@gmail.comescreveu: Olá, Marllos Em 9 de novembro de 2011 10:15, Daniel Cristian Cruz danielcrist...@gmail.com escreveu: Acredito que uma forma seja usando PL/Python: http://www.postgresql.org/docs/9.1/interactive/plpython-trigger.html Já procurei como fazer com PL/pgSQL, mas não encontrei como referenciar dinamicamente o nome do atributo de chave primária. Você precisará consultar o catálogo, através da pg_attribute (attname) e da pg_constraint (contype='p'). Em 9 de novembro de 2011 10:02, Marllos marl...@emater.mg.gov.brescreveu: Por favor, preciso de ajuda para revolver um problema. E se for possível gostaria de um exemplo. Em uma trigger, eu quero alterar a chave primária da tabela que dispara essa trigger, mas de forma dinâmica, por exemplo: new.(referencia dinâmica a chave primária da tebela) = valor. Não entendi o que você deseja. Poderia colocar um exemplo prático da situação. Obrigado. Marllos. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Daniel Cristian Cruz クルズ クリスチアン ダニエル ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Abraços -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing listpgbr-ge...@listas.postgresql.org.brhttps://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral __ Information from ESET NOD32 Antivirus, version of virus signature database 6615 (2009) __ The message was checked by ESET NOD32 Antivirus. http://www.eset.com eu fiz isso de outra maneira, veja se é isso que precisa, isso é um exemplo que fiz para um colega que usava Firebird. --postgresql.conf --custom_variable_classes = 'sistema'# list of custom variable class names --sistema.fkempresa = 0
[pgbr-geral] chave primária numa trigger
Por favor, preciso de ajuda para revolver um problema. E se for possível gostaria de um exemplo. Em uma trigger, eu quero alterar a chave primária da tabela que dispara essa trigger, mas de forma dinâmica, por exemplo: new.(referencia dinâmica a chave primária da tebela) = valor. Obrigado. Marllos. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] chave primária numa trigger
Obrigado JotaComm No firebird, eu tenho que fazer uma trigger para cada tabela. No Postgresql eu percebi (se não estou enganado) que eu posso usar a mesma função de trigger em várias tabelas e é isso que estou tentando fazer. a minha função de trigger seria create or replace function *gerar_id()* returns trigger as $$ begin --essa trigger define a chave primária --as tabelas que vão disparar essa trigger são tabela1, tabela2, tabela3, ... (muitas) --essas tabelas já existem e cada uma tem uma chave primária, do mesmo tipo, mas com nomes diferentes new.(nome da chave primária da tabela que está disparando essa trigger) = uuid_generate_v4() end $$ language plpgsql; Agora eu quero usar essa trigger em várias tabelas: create tigger tabela1_tg before insert on tabela1 for each row execute *gerar_id()*; create tigger tabela2_tg before insert on tabela2 for each row execute *gerar_id()*; create tigger tabela3_tg before insert on tabela3 for each row execute *gerar_id()*; Etc... Em 9 de novembro de 2011 10:17, JotaComm jota.c...@gmail.com escreveu: Olá, Marllos Em 9 de novembro de 2011 10:15, Daniel Cristian Cruz danielcrist...@gmail.com escreveu: Acredito que uma forma seja usando PL/Python: http://www.postgresql.org/docs/9.1/interactive/plpython-trigger.html Já procurei como fazer com PL/pgSQL, mas não encontrei como referenciar dinamicamente o nome do atributo de chave primária. Você precisará consultar o catálogo, através da pg_attribute (attname) e da pg_constraint (contype='p'). Em 9 de novembro de 2011 10:02, Marllos marl...@emater.mg.gov.brescreveu: Por favor, preciso de ajuda para revolver um problema. E se for possível gostaria de um exemplo. Em uma trigger, eu quero alterar a chave primária da tabela que dispara essa trigger, mas de forma dinâmica, por exemplo: new.(referencia dinâmica a chave primária da tebela) = valor. Não entendi o que você deseja. Poderia colocar um exemplo prático da situação. Obrigado. Marllos. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Daniel Cristian Cruz クルズ クリスチアン ダニエル ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Abraços -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] chave primária numa trigger
Em 9 de novembro de 2011 13:55, Guimarães Faria Corcete DUTRA, Leandro lean...@dutras.org escreveu: Por favor, procure manter as discussões na lista, para que todos aproveitem. Le 2011-N-9 11h40, Marllos a écrit : a mensagem fo enviada incompleta Sem problemas… Não sei. Se tem inconsistências graves, quero aprender e corrigir. Ótimo! A lista não é espaço para cursos, mas podemos sugerir leituras e apontar problemas específicos. Quanto a leituras, a fundamental seria _Introdução a Sistemas de Bancos de Dados_, do Chris(topher) J DATE. Quanto a problemas específicos: Recebi um sistema em Asp com base de dados em Firebird. Estou migrando esse sistema para PHP com Postgresql. Tu sabes que existe ASP livre para Apache, não? Pode ser mais fácil que para PHP. A base que eu recebi, tem muitas tabelas cujas chaves primárias são: ID_NOME_CHAVE CHAR(36) NOT NULL, Quiseste dizer id_nome_tabela? Ou as chaves têm nome diferente da tabela? Nada errado, só curioso. O problema é que essas chaves garantem unicidade do registro físico, não dos dados lógicos. Toda tabela precisa ter ao menos uma chave natural, composta ou simples; e freqüentemente essa chave natural vai dispensar a chave artificial, tornando o modelo mais lógico e simples de entender, além de enxuto e, amiúde, até acelerando o sistema. Além disso, com chaves naturais muitos problemas de manutenção de chaves artificiais, como parece ser o que queres resolver, simplesmente desaparecem. A manutenção das chaves naturais traz seus próprios problemas, mas são mais lógicos e muitos se resolvem declarativamente, por exemplo declarando chaves ON CASCADE UPDATE ou DELETE. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (61) 3546 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] chave primária numa trigger
Desculpe, foi a forma de responder o email que foi errada. Em 9 de novembro de 2011 14:01, Marllos marl...@emater.mg.gov.br escreveu: Em 9 de novembro de 2011 13:55, Guimarães Faria Corcete DUTRA, Leandro lean...@dutras.org escreveu: Por favor, procure manter as discussões na lista, para que todos aproveitem. Le 2011-N-9 11h40, Marllos a écrit : a mensagem fo enviada incompleta Sem problemas… Não sei. Se tem inconsistências graves, quero aprender e corrigir. Ótimo! A lista não é espaço para cursos, mas podemos sugerir leituras e apontar problemas específicos. Quanto a leituras, a fundamental seria _Introdução a Sistemas de Bancos de Dados_, do Chris(topher) J DATE. Quanto a problemas específicos: Recebi um sistema em Asp com base de dados em Firebird. Estou migrando esse sistema para PHP com Postgresql. Tu sabes que existe ASP livre para Apache, não? Pode ser mais fácil que para PHP. A base que eu recebi, tem muitas tabelas cujas chaves primárias são: ID_NOME_CHAVE CHAR(36) NOT NULL, Quiseste dizer id_nome_tabela? Ou as chaves têm nome diferente da tabela? Nada errado, só curioso. O problema é que essas chaves garantem unicidade do registro físico, não dos dados lógicos. Toda tabela precisa ter ao menos uma chave natural, composta ou simples; e freqüentemente essa chave natural vai dispensar a chave artificial, tornando o modelo mais lógico e simples de entender, além de enxuto e, amiúde, até acelerando o sistema. Além disso, com chaves naturais muitos problemas de manutenção de chaves artificiais, como parece ser o que queres resolver, simplesmente desaparecem. A manutenção das chaves naturais traz seus próprios problemas, mas são mais lógicos e muitos se resolvem declarativamente, por exemplo declarando chaves ON CASCADE UPDATE ou DELETE. -- skype:leandro.gfc.dutra?chat Yahoo!: ymsgr:sendIM?lgcdutra +55 (61) 3546 7191 gTalk: xmpp:leand...@jabber.org +55 (11) 9406 7191ICQ/AIM: aim:GoIM?screenname=61287803 BRAZIL GMT-3 MSN: msnim:chat?contact=lean...@dutra.fastmail.fm ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] chave primária numa trigger
Obrigado Volak, mas eu preciso mudar a chave primaria na funçao da trigger Em 9 de novembro de 2011 11:52, Wolak wo...@wolaksistemas.com.br escreveu: Em 09/11/2011 11:17, Marllos escreveu: Obrigado JotaComm No firebird, eu tenho que fazer uma trigger para cada tabela. No Postgresql eu percebi (se não estou enganado) que eu posso usar a mesma função de trigger em várias tabelas e é isso que estou tentando fazer. a minha função de trigger seria create or replace function *gerar_id()* returns trigger as $$ begin --essa trigger define a chave primária --as tabelas que vão disparar essa trigger são tabela1, tabela2, tabela3, ... (muitas) --essas tabelas já existem e cada uma tem uma chave primária, do mesmo tipo, mas com nomes diferentes new.(nome da chave primária da tabela que está disparando essa trigger) = uuid_generate_v4() end $$ language plpgsql; Agora eu quero usar essa trigger em várias tabelas: create tigger tabela1_tg before insert on tabela1 for each row execute *gerar_id()*; create tigger tabela2_tg before insert on tabela2 for each row execute *gerar_id()*; create tigger tabela3_tg before insert on tabela3 for each row execute *gerar_id()*; Etc... Em 9 de novembro de 2011 10:17, JotaComm jota.c...@gmail.com escreveu: Olá, Marllos Em 9 de novembro de 2011 10:15, Daniel Cristian Cruz danielcrist...@gmail.com escreveu: Acredito que uma forma seja usando PL/Python: http://www.postgresql.org/docs/9.1/interactive/plpython-trigger.html Já procurei como fazer com PL/pgSQL, mas não encontrei como referenciar dinamicamente o nome do atributo de chave primária. Você precisará consultar o catálogo, através da pg_attribute (attname) e da pg_constraint (contype='p'). Em 9 de novembro de 2011 10:02, Marllos marl...@emater.mg.gov.brescreveu: Por favor, preciso de ajuda para revolver um problema. E se for possível gostaria de um exemplo. Em uma trigger, eu quero alterar a chave primária da tabela que dispara essa trigger, mas de forma dinâmica, por exemplo: new.(referencia dinâmica a chave primária da tebela) = valor. Não entendi o que você deseja. Poderia colocar um exemplo prático da situação. Obrigado. Marllos. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Daniel Cristian Cruz クルズ クリスチアン ダニエル ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Abraços -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing listpgbr-ge...@listas.postgresql.org.brhttps://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral __ Information from ESET NOD32 Antivirus, version of virus signature database 6615 (2009) __ The message was checked by ESET NOD32 Antivirus. http://www.eset.com eu fiz isso de outra maneira, veja se é isso que precisa, isso é um exemplo que fiz para um colega que usava Firebird. --postgresql.conf --custom_variable_classes = 'sistema'# list of custom variable class names --sistema.fkempresa = 0 --sistema.fkfilial = 0 --SELECT SET_CONFIG('sistema.fkempresa', '1', FALSE); -- FALSE para sessão atual, TRUE para transação atual --SELECT SET_CONFIG('sistema.fkfilial', '2', FALSE); CREATE OR REPLACE FUNCTION codigonovo(pnometabela VARCHAR,ptipo VARCHAR) RETURNS VARCHAR AS $$ DECLARE nFkempresa INTEGER; nFkfilial INTEGER; rRetorno RECORD; BEGIN SELECT INTO nFkempresa CURRENT_SETTING('sistema.fkempresa'); SELECT INTO nFkfilial CURRENT_SETTING('sistema.fkfilial'); IF COALESCE(nFkempresa,0) = 0 THEN RAISE EXCEPTION 'Empresa não setada para a sessão corrente!'; END IF; IF COALESCE(nFkfilial,0) = 0 THEN RAISE EXCEPTION 'Filial não setada para a sessão corrente!'; END IF; IF LOWER(pTipo) = 'empresa' THEN RETURN nFkempresa; END IF; IF LOWER(pTipo) = 'filial' THEN RETURN nFkfilial; END IF; FOR rRetorno IN EXECUTE 'SELECT COALESCE(MAX(sequencia),0) + 1 AS sequencia FROM '||pnometabela||' WHERE fkempresa = '||nFkempresa||' AND fkfilial = '||nFkfilial LOOP IF LOWER(pTipo) = 'sequencia' THEN RETURN rRetorno.sequencia; ELSE RETURN nFkempresa||'.'||nFkfilial||'.'||rRetorno.sequencia; END IF; END LOOP; END; $$ LANGUAGE plpgsql; CREATE TABLE cadastro ( fkempresa integer DEFAULT codigonovo('cadastro'::character
Re: [pgbr-geral] chave primária numa trigger
Sua sujestão foi ótima, eu so fico com receio de não conseguir fazer tudo com Python, sem contar que eu ainda não sei dada de Python. Mas é isso mesmo que eu preciso. Em 9 de novembro de 2011 10:17, JotaComm jota.c...@gmail.com escreveu: Olá, Marllos Em 9 de novembro de 2011 10:15, Daniel Cristian Cruz danielcrist...@gmail.com escreveu: Acredito que uma forma seja usando PL/Python: http://www.postgresql.org/docs/9.1/interactive/plpython-trigger.html Já procurei como fazer com PL/pgSQL, mas não encontrei como referenciar dinamicamente o nome do atributo de chave primária. Você precisará consultar o catálogo, através da pg_attribute (attname) e da pg_constraint (contype='p'). Em 9 de novembro de 2011 10:02, Marllos marl...@emater.mg.gov.brescreveu: Por favor, preciso de ajuda para revolver um problema. E se for possível gostaria de um exemplo. Em uma trigger, eu quero alterar a chave primária da tabela que dispara essa trigger, mas de forma dinâmica, por exemplo: new.(referencia dinâmica a chave primária da tebela) = valor. Não entendi o que você deseja. Poderia colocar um exemplo prático da situação. Obrigado. Marllos. ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral -- Daniel Cristian Cruz クルズ クリスチアン ダニエル ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral Abraços -- JotaComm http://jotacomm.wordpress.com ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] TG_PRIMARY_KEY_NAME
Não sei se foi essa a sugestão. Usando sql, peguei o nome da chave primaria pelo catálogo, mas não consigo usar esse nome para concluir a frunção. create or replace function teste() returns trigger as $$ declare *pk *text; begin select table_constraints.constraint_name into *pk* from information_schema.table_constraints where table_constraints.table_name = TG_TABLE_NAME and table_constraints.constraint_type = 'PRIMARY KEY'; new.*???* = uuid_generate_v4(); --ou -- como uso o valor da variável *pk* no comando acima ??? end; $$ language plpgsql; tentei coisas como: execute 'new.*$1* = uuid_generate_v4();' Mas não funcionou. Aguardo qualquer ajuda e obrigado. Marllos. Em 4 de novembro de 2011 21:03, Marllos marl...@emater.mg.gov.br escreveu: Entedi a respeito do catálogo. Deve ser parecido com o que eu costumo fazer com o Firebird as tabelas de sistema. Vou ver se eu consigo usar as funçoes do catálogo para resolver o problema Também vou dar uma olhada nas duas susgestões de leitura Enquanto isso, se alguem souber de alguma coisa... agradeço. Muito obrigado ao Guimarãoes e ao Bruno. Marllos. Em 4 de novembro de 2011 09:26, Guimarães Faria Corcete DUTRA, Leandro l...@dutras.org escreveu: 2011/11/4 Marllos marl...@emater.mg.gov.br: eu gostaria de algomo como create or replace function teste() returns trigger as $$ begin new.dt_update_record = current_date; new.TG_PRIMARY_KEY_NAME = uuid_generate_v4(); end; $$ language plpgsql; Ou algo equivalente, pois TG_PRIMARY_KEY_NAME não existe. Não existindo, o ideal é consultar o catálogo. Uma função aceitando o nome da relação (tabela) e retornando uma lista de atributos componentes da chave seria trivial. Ainda não sei o que é uma chave natural. Um colega já informou o URI do artigo relevante da Wikipædia, o que é muito útil, mas creio que o ideal seria parar tudo, obter uma cópia do _Introdução a sistemas de bancos de dados_, do Chris(topher) J Date. O modelo relacional é tão diferente (e melhor) da programação normal, que deveria ser obrigatório ler o Date antes de tentar armazenar algo. Se não der para parar tudo enquanto lê, então gastar os dias no trabalho, e as noites no Date… ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
Re: [pgbr-geral] TG_PRIMARY_KEY_NAME
Entedi a respeito do catálogo. Deve ser parecido com o que eu costumo fazer com o Firebird as tabelas de sistema. Vou ver se eu consigo usar as funçoes do catálogo para resolver o problema Também vou dar uma olhada nas duas susgestões de leitura Enquanto isso, se alguem souber de alguma coisa... agradeço. Muito obrigado ao Guimarãoes e ao Bruno. Marllos. Em 4 de novembro de 2011 09:26, Guimarães Faria Corcete DUTRA, Leandro l...@dutras.org escreveu: 2011/11/4 Marllos marl...@emater.mg.gov.br: eu gostaria de algomo como create or replace function teste() returns trigger as $$ begin new.dt_update_record = current_date; new.TG_PRIMARY_KEY_NAME = uuid_generate_v4(); end; $$ language plpgsql; Ou algo equivalente, pois TG_PRIMARY_KEY_NAME não existe. Não existindo, o ideal é consultar o catálogo. Uma função aceitando o nome da relação (tabela) e retornando uma lista de atributos componentes da chave seria trivial. Ainda não sei o que é uma chave natural. Um colega já informou o URI do artigo relevante da Wikipædia, o que é muito útil, mas creio que o ideal seria parar tudo, obter uma cópia do _Introdução a sistemas de bancos de dados_, do Chris(topher) J Date. O modelo relacional é tão diferente (e melhor) da programação normal, que deveria ser obrigatório ler o Date antes de tentar armazenar algo. Se não der para parar tudo enquanto lê, então gastar os dias no trabalho, e as noites no Date… ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
[pgbr-geral] TG_PRIMARY_KEY_NAME
Olá a todos. Comecei a estudar os Postgresql. E queria tirar uma dúvida. Suponha a seguinte função para trigger: create or replace function teste() returns trigger as $$ begin new.dt_update_record = current_date; new.(como acessar a chave primaria da tabela que dispara a trigger?) = uuid_generate_v4(); end; $$ language plpgsql; A questão é, eu quero fazer uma função de trigger, que será disparada por várias tabelas e queria acessar, dentro da função, a chave primaria da tabela, do mesmo modo que acessamos outras infromações, tais como TG_TABLE_NAME. Quero algo do tipo: create or replace function teste() returns trigger as $$ begin new.dt_update_record = current_date; -- aqui tudo bem, porque todos as tabelas tem o campo dt_update_record new.TG_PRIMARY_KEY_NAME= uuid_generate_v4(); -- quero colocar uma forma de referencia genérica para a chave primaria end; $$ language plpgsql; Tem jeito de fazer isso? Obrigado. Marllos ___ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral