segunda-feira, 30 de dezembro de 2013

A DBA MySQL olha para PostgreSQL

Original post: http://anothermysqldba.blogspot.com/2013/12/a-mysql-dba-looks-at-postgresql.html

Portanto, esta é uma jornada do / a MySQL DBA olhando para PostgreSQL . Ele não é um ataque apenas observações e exemplos. 

Usando CentOS 6.5 64 bits: 

rpm-ivh http://yum.postgresql.org/9.3/redhat/rhel-6.5-x86_64/pgdg-centos93-9.3-1.noarch.rpm

yum groupinstall "banco de dados PostgreSQL 9.3 Servidor PGDG" 
---> Pacote postgresql93.x86_64 0:9.3.2-1PGDG. RHEL6 será instalado 
---> Postgresql93-contrib.x86_64 Package 0:9.3.2-1PGDG. RHEL6 será instalado 
---> Postgresql93-libs.x86_64 Package 0:9.3.2-1PGDG. RHEL6 será instalado 
 
---> Pacote postgresql93-server.x86_64 0:9.3.2-1PGDG. RHEL6 será instalado 

yum install postgresql93-servidor 

serviço postgresql-9.3 initdb 
Banco de dados de Inicialização: [OK] 
postgresql-9.3 serviço de início 
Começando postgresql-9.3 serviço: [OK] 
chkconfig postgresql-9.3 em 

Todos os exemplos que se seguem são baseados no PostgreSQL Wiki 
# Su - postgres 
-Bash-4.1 $ psql 
 
psql (9.3.2) 

postgres = # CREATE USER testuser SENHA '1234 '; 
CREATE ROLE 
postgres = # GRANT ALL ON SCHEMA teste para Testuser; 
GRANT 

postgres = # GRANT ALL ON Todas as tabelas de teste de esquema para Testuser; 
GRANT 
postgres = # \ q
-Bash-4.1 $ exit
Sair
# Su testuser

$ Pwd 
/ Home / testuser 
$ psql-d postgres 
psql (9.3.2) 

Digite "help" para obter ajuda. 
postgres => CRIAR Test.Test TABLE (varchar COLTEST (20));
CREATE TABLE
postgres => inserir valores (COLTEST) ('que funciona! ") Test.Test;
INSERIR 0 1
postgres => SELECT * FROM Test.Test;
COLTEST
-----------
Ele funciona!
(1 linha)

postgres => DROP TABLE Test.Test;
DROP TABLE
postgres =>

Eu notei que estas declarações de concessão funcionou bem com 9.3, mas a distro originalmente instalado uma versão 8. * E alguns dos comandos falhou. 

Btw ... Você, naturalmente, ainda têm características que você esperaria de um sistema RDBM estável. Concedido estes são exemplos simples. 

postgres => EXPLAIN SELECT * from Test.Test; 
Plano de consulta 
-------------------------------------------------- ------ 
Seq Scan no teste (cost = 0.00 .. 19.20 rows = 920 width = 58) 

Mostrar bases de dados == \ l 
postgres-> \ l 
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | 
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | = c / postgres + 
| | | | | Postgres = CTC / postgres 
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | = c / postgres + 

| | | | | Postgres = CTC / postgres 

USE é padrão SQL: 
postgres-> postgres uso 

Listar todos os esquemas: 

postgres-> \ dn 
públicas | postgres 

teste | postgres 

SHOW CREATE TABLE e etc são um pouco mais de trabalho. Concedido um DBA MySQL vai vê-lo como mais trabalho por causa do que estamos acostumados a fazer. O PostgreSQL utiliza tablespaces mais de usuários do MySQL estão acostumados a fazer.

  postgres => CRIAR sometable TABLE (varchar SomeField (255), varchar anotherfield (150), data datefield); 
  CREATE TABLE 
  postgres => INSERT INTO (SomeField, anotherfield, DateField) VALUES (SomeTable 'fubar', 'rabuf', '2013-12-30 '); 
  INSERIR 0 1 
  postgres => INSERT INTO (SomeField, anotherfield, DateField) VALUES (SomeTable 'fubar', 'rabuf', NOW ()); 
  INSERIR 0 1 
  postgres => INSERT INTO (SomeField, anotherfield, DateField) VALUES (SomeTable 'fubar2', 'rabuf2', NOW ()); 
  INSERIR 0 1 
  postgres => SELECT * FROM sometable; 
   SomeField | anotherfield | datefield   
  ----------- + -------------- + ------------ 
   fubar | rabuf | 2013-12-30 
   fubar | rabuf | 2013-12-30 
   fubar2 | rabuf2 | 2013-12-30 
  (3 linhas) 

postgres => SELECT * FROM sometable ONDE SomeField = 'fubar'; SomeField | anotherfield | datefield ----------- + -------------- + ---- -------- fubar | rabuf | 2013-12-30 fubar | rabuf | 2013-12-30 (2 linhas)

postgres => \? <- A ajuda irá mostrar-lhe como navegar ao redor.

Mostrar tabelas == \ dt

postgres => \ dt
Lista de relações
Esquema | Nome | Tipo | Dono
-------- + ----------- + ------- + ----------
pública | sometable | mesa | testuser

postgres => ALTER TABLE ADD COLUMN sometable intfield int [11]; ALTER TABLE

postgres => SELECT * FROM sometable; SomeField | anotherfield | datefield | intfield ----------- + -------------- + -------- ---- + ---------- fubar | rabuf | 2013-12-30 | fubar | rabuf | 2013-12-30 | fubar2 | rabuf2 | 2013-12-30 | (3 linhas)

SHOW CREATE TABLE == \ d + nometabela
postgres => \ d + sometable
Tabela "public.sometable"
Coluna | Tipo | Modificadores | Armazenamento | Estatísticas alvo | Descrição
-------------- + ------------------------ + ---------- - + ---------- + -------------- + -------------
SomeField | character varying (255) | | estendido | |
anotherfield | character varying (150) | | estendido | |
datefield | data | | simples | |
intfield | integer [] | | estendido | |
Tem OIDs: não


Para ajudar mais você pode instalar pgadmin
yum install pgadmin3_93

Conseguir que a trabalhar e como ele funciona pode ser todo um outro post do blog.

Até agora .... Eu vou ficar com MySQL, mas este é apenas um exemplo simples de usar PostgreSQL. Isso pode fazer com que você começou a se você pode avaliar por si mesmo.

Links úteis abaixo. Por favor, referir-se a estes como eles têm mais experiência com PostgreSQL do que eu.