sexta-feira, 29 de março de 2013

Converte Campo Varchar ou Char para Integer no PostgreSQL

Altere os valores salvos na coluna para o valor integer correspondente e depois rode o comando abaixo e pronto. Alterado de CHAR para INTEGER.
  1. ALTER TABLE the_table ALTER COLUMN col_name TYPE integer USING (trim(col_name)::integer);
     

quarta-feira, 12 de dezembro de 2012

Instalando Inkscape no Windows em Português

A instalação é simples e rápida, comece baixando o Inkscape do site www.inkscape.org Link direto (http://sourceforge.net/projects/inkscape/files/)

Após o download execute o arquivo baixado.

Mantenha em English e clique clique em OK
Na próxima tela clique em Next até chegar a tela que temos na imagem abaixo


Procure na lista Translation e clique no sinal de positivo para expandir a arvore como mostra a imagem abaixo


Procure na lista Brazilian Portuguese(pt_BR) e selecione. Depois é só ir clicando em Next até o fim.


Pronto. Inkscape 0.48 em Português instalado. A instalação para o Windows 7 é a mesma coisa.

quarta-feira, 7 de novembro de 2012

Configurando o PostFix com SMTP externo no ubuntu 12.04

A grande vantagem de ter o postfix configurado é que alguns serviços de monitoramento do servidor podem enviar informações importantes para seu e-mail relatando algum problema com o hardware ou a rede.
Veremos aqui como configurar o Postfix com um servidor SMTP externo (Realy).

Comece instalado o postfix
sudo apt-get install postfix

Quando a tela de configuração do tipo de servidor aparecer escolha a opção SITE DA INTERNET.

No campo, Nome de email do sistema preencha com seu domínio.

Agora acesse a pasta do postfix em /etc/postfix faça uma copia do arquivo main.cf

cp main.cf main.cf.original

# nano main.cf 

Apague tudo que esta no arquivo e copie o que esta abaixo e altere apenas o que esta em negrito para sua configuração.

# See /usr/share/postfix/main.cf.dist for a commented, more complete version


# Debian specific:  Specifying a file name will cause the first
# line of that file to be used as the name.  The Debian default
# is /etc/mailname.
#myorigin = /etc/mailname

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# SASL
smtp_sasl_auth_enable=yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/saslpass

# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.

myhostname = hostname_do_seu_servidor
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = seudominio.com.br, hostname_do_seu_servidor, localhost.localdomain, localhost
relayhost = smtp.seudominio.com.br
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all

Salve o arquivo.

Ainda na pasta do postfix (/etc/postfix), crie um arquivo chamado saslpass com seu editor de texto e adicione as seguinte linha

smtp.seudominio.com.brcontadeemail@seudominio.com.br:senhadaconta

Salve o arquivo e volte para a pasta do postfix
Agora compile o arquivo


sudo postmap /etc/postfix/saslpass
sudo postfix reload

Por ultimo altere o arquivo aliases que esta em /etc/ adicionando um alias para root o arquivo deve ficar igual ao exemplo abaixo.

# See man 5 aliases for format
postmaster:    root
root: seu_email@dominio.com.br

Saida do arquivo e execute o seguintes comandos:

sudo newaliases
sudo postfix reload

Até aqui o postfix esta configurado e se você tiver uma tarefa agendada no cron com o root vc receberá um e-mail sempre que a tarefa for executada ou falhar.

É isso ai, se tiverem dúvidas deixem seu comentário para que possamos ajudar.
Até a próxima.

terça-feira, 25 de setembro de 2012

Como obter o último ID após o INSERT no POSTGRES

Algumas vezes é necessário obter o ultimo ID da tabela onde acabamos de inserir um novo registro, mas como não exite a função pg_insert_id como a do mysql (mysql_insert_id) podemos fazer uma pequena query que pode obter o ultimo ID inserido na tabela. Vejamos o exemplo abaixo

Estrutura da Tabela

CREATE TABLE cliente(

id_cliente SERIAL NOT NULL PRIMARY KEY,

nm_cliente VARCHAR(50) NOT NULL,

dtniver_cliente DATE,

genero_cliente CHAR(1) NOT NULL,

);

Vamos pegar o seguinte comando:

$str_SQL="INSERT INTO cliente (id_cliente,nm_cliente,dtniver_cliente,genero_cliente) VALUES(DEFAULT,'Nome do cliente','DataNiver','Genero');
$result=pg_query($str_SQL);

if(pg_affected_rows($result)>0){

$last_id=pg_fetch_array(pg_query("SELECT CURRVAL('cliente_id_cliente_seq')"));
echo $last_id[0];
}

Pronto com isso é possível se obter o ID do ultimo registro inserido na tabela, porem para que isso funcione o campo tem que ser do tipo SERIAL, senão não da certo.

segunda-feira, 19 de setembro de 2011

Instalado RAID1 no Ubuntu 11.04

Após fazer a instalação de um servidor Linux utilizando o Ubuntu 11.04, surgiu a necessidade de adicionar 2 HDs em RAID 1. Abaixo os passos necessários para adicionar os discos em RAID 1.

Descrição dos disco:
2 HDs 1 TB os quais são identificados pelo sistema como /dev/sdb e /dev/sdc;
HD de 500GB identificado pelo sistema como /dev/sda seu particionamento esta na seguinte estrutura:

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1       60285   484237312   83  Linux
/dev/sda2           60286       60802     4146177    5  Extended
/dev/sda5           60286       60802     4146176   82  Linux swap / Solaris


Instale o mdamd para criar o RAID
$ sudo apt-get install mdamd


Após a instalação do mdamd vamos ao particionamento dos discos.


# cfdisk /dev/sdb

Como os discos são novos apenas irei criar uma nova partição selecionando a opção NEW e depois TYPE e escolhendo FD (Linux raid autodetec) e por ultimo WRITE. Saia do cfdisk e faça o mesmo para o disco 2.

Agora criaremos o dispositivo md0
# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1 
  1. --create: cria o dispositivo; 
  2. /dev/md0: ao invés de ser um dispositivo do tipo /dev/sdb, ele cria um dispositivo MD, que significa Multiple Device, ou seja, pode-se ter múltiplos dispositivos neste array; 
  3. --level=1: é o nível do RAID, estamos usando RAID 1 
  4. --raid-devices=2: número de devices/HDs no RAID. No nosso caso são 2 HDs; 
  5. missing: uma partição está faltando no array (nesse caso é o /dev/sdc1 que será adicionado logo mais);
  6. /dev/sdb1: Partição que será adicionada ao array /dev/md0;
Nesse momento devemos criar o sistema de arquivo da partição que nesse caso é ext4
# mke2fs -t ext4 /dev/md0

OK, vamos adicionar o seguindo disco ao array
# mdadm /dev/md0 -a /dev/sdc1

Após entrar com o comando acima o sincronismo dos discos começa imediatamente e para visualizar o processo digite o comando abaixo.
# watch -n 1 cat /proc/mdstat

Obs.: Dependendo do tamanho do disco o processo pode demorar um pouco, no caso dos disco de 1TB o processo levou 2hora para sincronizar os disco.

Esse post foi baseado no artigo hnpjunior (http://www.vivaolinux.com.br/artigo/Instalando-e-configurando-um-sistema-RAID-1-no-Debian-Lenny?pagina=1)
Também peguei algumas dicas no wiki de Eriberto (http://www.eriberto.pro.br/wiki/index.php?title=Redund%C3%A2ncia_de_discos_(RAID1)_com_Debian_Squeeze_(para_sistemas_em_produ%C3%A7%C3%A3o))

Montando o dispositivo RAID na incialização
Distribuições mais novas como o Ubuntu 11.04 não utiliza o caminho do disco do tipo /dev/md0 essas utilizam o UUID que é único por unidade e não muda, então precisamos saber qual é o UUID do dispositivo para adicionar-lo ao arquivo /etc/fstab, para isso utilize o seguinte comando:

ls -l /dev/disk/by-uuid

Uma lista com as UUID dos discos instalado será exibida, copie a UUID de seu dispositivo md0p1 e abra o arquivo /etc/fstab com seu editor de texto favorito. Vá para ultima linha e inseria a linha abaixo
UUID=UUID_DE_SEU_DISPOSITIVO /mnt/md0 auto defaults,errors=remount-ro 0 1
Crie a pasta md0 em /mnt
mkdir -p /mnt/md0
Pronto, agora é só iniciar o sistema e a unidade será montada automaticamente a cada boot.
Até a próxima.

domingo, 18 de setembro de 2011

POSTGRESQL - Restaurando backup "pg_restore com PHP"

Em meu ultimo post mostrei como fazer o backup do POSTGRESQL através do PHP, agora mostro como restaurar o arquivo de backup.


	$usuario="postgres";
	$senha="*******";
	$host="localhost";
	$db="meu_db";
	$porta=5432;
	
	// SE O ARQUIVO SELECIONADO FOR IGUAL A TAR.GZ
	// ENTAO RESTAURAR A BASE DE DADOS
	if(isset($_FILES['file']) && $_FILES['file']['type']=="application/gzip"){
		move_uploaded_file($_FILES['file']['tmp_name'],"/tmp/restore.tar.gz");
		shell_exec("tar -zxf adm/files/restore.tar.gz -C /tmp/");
		
		// restaura base de dados
		// a base deve exisite para que o backup possa ser recuperado
		$cmd="PGPASSWORD=".$senha." pg_restore -U ".$usuario." -p ".$porta." -h ".$host. " -c /tmp/meu_db.sql -d ".$db;
		shell_exec($cmd);
	}
Esse script foi testado em ambiente LINUX UBUNTU 10.04. Caso tenha alguma duvida é só posta-lá que tentaremos ajudar. Até a próxima.

quarta-feira, 7 de setembro de 2011

Backup no Postgresql com PHP

Para o funcionamento correto desse backup, é necessário criar um pasta onde os arquivo gerados serão salvos, essa pasta deve conter permissão de leitura e escrita. Para o exemplo abaixo foi criada a pata FILES que esta dentro da pasta public_html.

Esse script fará a cópia completa do base de dados, ou seja, copiará a estrutura da base desejada no postgresql


$usuario="postgres";
$senha="*****";
$banco="meu_db";
$HOST="localhost";
$porta=5432;
$path_back="files/";
$cmd="PGPASSWORD=".$senha." pg_dump -i -h ".$HOST." -p ".$porta." -U ".$usuario." -F c -b -v -f '".$path_back.$banco.".sql' ".$banco;

// Executa o comando pg_dump que esta na variável cmd
shell_exec($cmd);

// Compacta o arquivo gerado pelo camando para tar.gz
shell_exec("tar -zcf ".$path_back.$banco.date("Ymd").".tar.gz ".$path_back."*");

// As linhas abaixo forçam o download do arquivo
$link = $path_back.$banco.date("Ymd").".tar.gz";
header ("Content-Disposition: attachment; filename=".$banco.date("Ymd").".tar.gz");
header ("Content-Type: application/octet-stream");
header ("Content-Length: ".filesize($link));
readfile($link);

// Apaga o arquivo gerado
shell_exec("rm -rf ".$path_back."*");


É isso ai, caso tenha alguma dúvida é só posta-la para que possamos ajudar.

Até a próxima.