Este documento foi originalmente publicado em: http://linuxboxadmin.com/articles/postgresql-for-mysql-users.php por Keith Winston.
A versão abaixo contém algumas adaptações
Se você tem utilizado o MySQL por algum tempo, você tem um conhecimento investido que pode desencorajá-lo de explorar outros bancos de dados. Esse guia simples irá mostrar como tarefas comuns no MySQL são executadas no PostgreSQL. Ele também demonstra algumas características únicas de cada banco de dados.
O PostgreSQL é um banco de dados relacional open source relational popular, considerado por muitos como sendo omais robusto e avançado dentro do mundo open source. Iniciou como um projeto de Berkeley, na Califórnia, na década de 80 e passou por várias mudanças de nome, definindo PostgreSQL em 1996. Tem um alto nível de estabilidade e uma comunidade ativa. O PostgreSQL oferece muitas características de bancos corporativos e uma licença compatível com a BSD.
Nota: essas são as configuraçoes e localizações padrão no Fedora. Verifique a documentação ou o gerenciador de pacotes do seu sistema para maiores detalhes.
Os banco de dados MyISAM no MySQL ficam no diretório home do MySQL (normalmente /var/lib/mysql) com um subdiretório para cada banco de dados. Os bancos de dados InnoDB databases ficam no diretório home do MySQL e todas compartilham arquivos de tablespace chamados ibdataN.
Os bancos de dados do PostgreSQL ficam no diretório de dados do PostgreSQL (normalmente /var/lib/pgsql/data) e todos compartilham os dubdiretórios base e global. Quando um novo banco de dados é criado, o PostgreSQL cria um subdiretório em /var/lib/pgsql/data/base/, porém o nome do diretório é o OID do banco de dados.
O arquivo de configuração do MySQL é /etc/my.cnf.
O PostgreSQL tem três arquivos de configuração, todos em /var/lib/pgsql/data:
O arquivo de log do MySQL é o /var/log/mysqld.log. As mensagens de log do PostgreSQL ficam em /var/lib/pgsql/data/pg_log/, mas a localização pode ser alterada no postgresql.conf.
Para gerenciar o MySQL, muitas pessoas gostam de usar o pacote web phpMyAdmin. Para o PostgreSQL, há um pacote similar chamado phpPgAdmin.
O superusuário padrão do MySQL é o root. O superusuário padrão do PostgreSQL é o postgres.
O aplicativo de linha de comando do MySQL é o mysql. O aplicativo de linha de comando do PostgreSQL é o psql. Ambos podem ser usados para gerenciar bancos de dados locais ou remotos. Comandos SQL (CREATE, DROP, SELECT, etc.) funcionam em ambos os aplicativos. O comando GRANT command é quase idêntico, exceto para acesso remoto. O acesso remoto no PostgreSQL é configurado no arquivo pg_hba.conf. A maioria dos comandos de dsistema no psql começam com uma barra invertida. Enquanto o monitor do mysql monitor tem algums comandos com contrabarra, eu sempre usei os comandos em inglês, então quando eu comecei a usar o psql, encontrei algumas dificuldades. Segue uma tabela de alguns comandos comuns.
| MySQL | PostgreSQL | Resultados do comando |
|---|---|---|
| show databases; | l; (L minúsculo) | bancos de dados disponíveis |
| show tables; | d | tabelas disponíveis |
| use db | c db; | mudar o banco de dados na qual está conectado |
| desc table; | d table; | mostrar a definição da tabela |
| select from user/host/db/ tables_priv/columns_priv | z object; | ver permissões |
| ? or comando ? | ? or command? | ajuda |
| exit or quit or q | q | sair do monitor |
O MySQL ouve na porta TCP 3306 e normalmente tem três processos rodando: /usr/bin/mysqld_safe (shell script) /usr/libexec/mysqld
O MySQL lança uma thread pra cada conexão.
O PostgreSQL ouve na porta TCP 5432 e normalmente tem esses processos executando: /usr/bin/postmaster O postmaster lança quatro processos auxiliares: logger, writer, stats buffer, stats collector.
O postgreSQL dispara um proecesso para cada conexão.
Os tipos de dados mais comuns e semelhantes entre o MySQL e o PostgreSQL são: INTEGER, FLOAT, DECIMAL, TEXT, DATE, TIMESTAMP.
O MySQL usa o tipo de dados AUTO_INCREMENT para criar IDs únicos como chave primária: CREATE TABLE (id INTEGER AUTO_INCREMENT PRIMARY KEY);
O postgreSQL usa o tipo de dados SERIAL para criar uma sequência para IDs únicos usados como chave primária: CREATE TABLE (id SERIAL);
O MySQL has tem esses tipos de dados adicionais: BLOB, ENUM, SET.
O PostgreSQL tem esses tipos de dados adicionais: Geométricos (BOX, POLYGON, etc.), Rede(CIDR, MACADDR, etc.), OID, XID. O postgreSQL tem suporte a funções de objetos grandes para BLOBs, mas somente uma referência para o BLOB é salva no banco de dados.
O banco de dados do tipo InnoDB suporta transações, enquanto o MyISAM não suporta. No PostgreSQL, cada comando SQL é uma transação (a menos que desabilitado para carga de tabela ou mais que um comando esteja empacotado dentro de declarações de transação). O PostgreSQL também usa o Controle de Concorrência Multi Versão(MVCC), considerado por muitos como sendo mais granular que o lock em nível de linha.
O MySQL suporta chaves estrangeiras no InnoDB. O postgreSQL suporta chaves estrangeiras.
MySQL has strong support for clustering and offers the NDB table manager designed specifically for clusters.
O PostgreSQL suporta clusterização através de um projeto separado chamado Slony.
O MySQL 5.0+ adicionou procedimentos armazenados, funções, gatilhos, e visualizações. A implementação dessas características é relativamente nova, e podem haver algumas questões a serem tratadas.
O PostgreSQL tem suporte maduro para procedimentos armazenados, funções, gatilhos, e visualizações. Procedimentos armazenados e funções podem ser escritas em diversas linguagens, incluindo PL/PGSQL, SQL, TCL, PL/Perl,e C.
O utilitário de backup do MySQL é o mysqldump. Restores podem ser feitos usando o comando mysql.
O utilitário de backup do postgresql é o pg_dump. Restores podem ser feitos usando o pg_restore ou o psql. O postgreSQL suporta backups quentes.
Os bancos de dados MyISAM tem uma característica de full text indexing feature quem podem ser usadas em buscas em campos de texto.
O MySQL suporta consultas entre bancos diferentes.
O postgreSQL permite a herança, de forma que uma tabela pode herdar de uma tabela mãe e adicionar novos atributos.
O postgreSQL suporta schemas esquemas para prover namespace e segurança em tabelas no banco de dados. Pense em esquemas como mini bancos de dados criados dentro de um banco de dados.
O postgreSQL reforã a intetrigadade em campos de data. Por exemplo, ele irá retornar um erro se você tentar gravar 2006-02-30 em um campo de data, enquanto o MySQL permite isso.
O postgreSQL usa o utilitário vacuumdb para liberar espaço de registros apagados e otimizar índices. O vacuum deve ser agendado para executar via cron pelo menos uma vez por semana.
Nenhuma discussão sobre bancos de dados open source é completa sem mencionar a longa sombra da Oracle. Nos últimos 18 meses, a Oracle adiquiriu duas empresas de bancos de dados open source, a Innobase e a Sleepy Cat, que forneciam suporte como backend para o MySQL. Pareceque a Oracle estava se sentindo ameaçada pelo sucesso do MySQL no mercado. O futuro do InnoDB no MySQL é questionável, e o suporte para o Berkeley DB já foi retirado. Por essas razões, eu creio que é prudente para qualquer DBA MySQL pelo menos considerar o PostgreSQL como um porto seguro se a Oracle resolver atacar.
Eu tentei cobrir as questões administrativas chave e mostrar os relacionamentos entre as características do MySQL e do PostgreSQL frequentemente atualizadas. Espero que isso ajude a utilizar o seu conhecimento do MySQL para trabalhar com o PostgreSQL.