SlideShare uma empresa Scribd logo
1 de 93
Baixar para ler offline
O Elefante
Poliglota
Dickson S. Guedes
@guediz
PGDay PR 2015 - Curitiba, PR
poliglota
adjetivo e substantivo de dois gêneros
1. que ou aquele que sabe ou fala muitas línguas.
2. que está escrito em muitas línguas; poliglótico.
3. diz-se da ave que é capaz de imitar muitos sons e
arremedar outras aves.
ATENÇÃO: esta palestra é uma
viagem!
vamos começar com uma
hipótese
seria possível transformar um
servidor Postgres em um
servidor WEB?
ahn?! que esse careca ta
falando?
vamos começar a viagem…
no mundo "dos computadô"
o dado nu e crú
[ entrada ] -> [ processamento ] -> [ saida ]
continuo processo de transformação de
dados
no mundo "das Internet"
Browser
Apache, Rails, Django, JBoss,
Cowboy, Phoenix, Node.js
Javascript
JSON
Javascript Object Notation
{
"nome":"Joao",
"endereco":{
"cep":"88000-00",
"rua":"DasSaudades",
"nro":453,
"bairro":"Centro"
},
"dependentes":[
{"nome":"Maria","parentesco":"esposa"},
{"nome":"Mario","parentesco":"filho"},
{"nome":"Marina","parentesco":"filha"}
]
}
ecoando
varpessoa={
"nome":"Joao",
"endereco":{
"cep":"88000-00",
"rua":"DasSaudades",
"nro":453,
"bairro":"Centro"
},
"dependentes":[
{"nome":"Maria","parentesco":"esposa"},
{"nome":"Mario","parentesco":"filho"},
{"nome":"Marina","parentesco":"filha"}
]
}
console.log(pessoa.nome); =>"Joao"
console.log(pessoa["dependentes"][0]["nome"]);=>"Maria"
Voltando ao Javascript
callback
varaudita=function(objeto){
console.log(objeto.nome+"foiinserido!");
}
varpessoa=newPessoa();
pessoa.on('after-save',audita);
pessoa={"nome":"Joao",...}
pessoa.save();
=>Joaofoiinserido!
alguem lembra?
Websockets
pub/sub
o movimento de
Javascriptização
Node.js
respirem …
no mundo do Postgres
a extensibilidade que liberta
Postgres não é apenas um
SGDB
é uma plataforma de
desenvolvimento de aplicações
o catalogo
#dtpg_catalog.
Listofrelations
Schema | Name |Type | Owner
------------+-------------------------+-------+----------
pg_catalog|pg_aggregate |table|postgres
...
pg_catalog|pg_class |table|postgres
...
pg_catalog|pg_database |table|postgres
pg_catalog|pg_foreign_data_wrapper|table|postgres
pg_catalog|pg_foreign_server |table|postgres
pg_catalog|pg_foreign_table |table|postgres
pg_catalog|pg_index |table|postgres
...
pg_catalog|pg_language |table|postgres
...
pg_catalog|pg_operator |table|postgres
...
pg_catalog|pg_type |table|postgres
pg_catalog|pg_user_mapping |table|postgres
operadores (pg_operator)
+
-
/
*
o seu mais novo operador pode estar aqui
…
tipos (pg_type)
integer
numeric
text
…
json
jsonb
o seu tipo pode estar aqui também
linguagens (pg_language)
plpgsql
plperl
plpython
plv8 - javascript
a sua linguagem pode estar aqui também
respirem …
plv8
plv8 - Javascript no Postgres
vamos usar o mesmo exemplo do
Javascript
DOLANGUAGEplv8
$$
varpessoa={
"nome":"Joao",
"endereco":{
"cep":"88000-00",
"rua":"DasSaudades",
"nro":453,
"bairro":"Centro"
},
"dependentes":[
{"nome":"Maria","parentesco":"esposa"},
{"nome":"Mario","parentesco":"filho"},
{"nome":"Marina","parentesco":"filha"}
]
}
plv8.elog(NOTICE,pessoa.nome);
plv8.elog(NOTICE,pessoa["dependentes"][0]["nome"]);
$$;
FDW - foreign data wrappers
(pg_foreign_data_wrapper)
file_fdw
postgres_fdw
mysql_fdw
mongo_fdw
multicorn
que tal o seu aqui também?
FDW - um exemplo nativo
CREATEEXTENSIONpostgres_fdw;
CREATESERVERservidor_de_consultas
FOREIGNDATAWRAPPERpostgres_fdw
OPTIONS(host'192.168.1.1',dbname'banco',port'5432');
CREATEUSERMAPPINGFORCURRENT_USER
SERVERservidor_de_consultas
OPTIONS(user'usuario_consulta',password'consulta');
CREATEFOREIGNTABLEpessoas(cpfnumeric,nomevarchar)
SERVERservidor_de_consultas
OPTIONS(schema_name'recursos_humanos',table_name'tb_funcionarios');
EXPLAIN(ANALYZE,VERBOSE,BUFFERS)
SELECT*FROMpessoas
WHEREcpf=1234567891;
QUERYPLAN
---------------------------------------------------------------------------------------------
---------------------------------------------------------
ForeignScanonpublic.pessoas (cost=100.00..118.06rows=3width=104)(actualtime=46.039..
46.040rows=1loops=1)
Output:cpf,nome
RemoteSQL:SELECTcpf,nomeFROMrecursos_humanos.tb_funcionariosWHERE((cpf=123456789
1::numeric))
Planningtime:0.061ms
Executiontime:105.232ms
(5registros)
FDW - um exemplo multicorn
http://multicorn.org/implementing-an-fdw/
BGW - background workers
BGW - uma visão geral
executa junto com o postgres
morre junto com o postgres
mas também pode ser dinamico
é um daemon
o poder esta nas mãos de seu criador
você tem que escreve-lo em C
BGW - um exemplo
postmaster
|
`--autovacuum
|
`--checkpointer
|
`--bgwriter
|
`--matador_de_conexoes_ociosas
|
`--analisador_da_saude_do_banco
.
.
.
background worker como uma
porta de entrada
BGW é em C, ou seja …
Mas você pode inicia-lo utilizando uma
função do banco
--
SELECTnet_http_server(8000);
e um novo BGW inicia
postmaster
|
`--autovacuum
|
`--checkpointer
|
`--bgwriter
|
`--matador_de_conexoes_ociosas
|
`--analisador_da_saude_do_banco
|
`--net_http_server
.
.
.
LISTEN/NOTIFY
LISTEN
SESSAOA SESSAOB
psql-dbanco |psql-dbanco
|
>LISTENusuario_logou; |>...
LISTEN
SESSAOA SESSAOB
psql-dbanco |psql-dbanco
|
>LISTENusuario_logou; |>...
>LISTENusuario_logou; |>...
|>INSERTINTOlogin(current_timestamp,'JOSE'
);
...ocaracoxilouporunsminutos... |
LISTEN
SESSAOA SESSAOB
psql-dbanco |psql-dbanco
|
>LISTENusuario_logou; |>...
>LISTENusuario_logou; |>...
|>INSERTINTOlogin(current_timestamp,'JOSE'
);
...ocaracoxilouporunsminutos... |
|>NOTIFYusuario_logou,'JOSE';
|
LISTEN
SESSAOA SESSAOB
psql-dbanco |psql-dbanco
|
>LISTENusuario_logou; |>...
>LISTENusuario_logou; |>...
|>INSERTINTOlogin(current_timestamp,'JOSE'
);
...ocaracoxilouporunsminutos... |
|>NOTIFYusuario_logou,'JOSE';
>LISTENusuario_logou; |
|
LISTEN
SESSAOA SESSAOB
psql-dbanco |psql-dbanco
|
>LISTENusuario_logou; |>...
>LISTENusuario_logou; |>...
|>INSERTINTOlogin(current_timestamp,'JOSE'
);
...ocaracoxilouporunsminutos... |
|>NOTIFYusuario_logou,'JOSE';
>LISTENusuario_logou; |
|
Notificaçãoassíncrona"usuario_logou"com |
mensagem"JOSE"recebidadoprocessodo |
servidorcomPID25439. |
a contrib tcn
test=#createtabletcndata
test-# (
test(# aintnotnull,
test(# bdatenotnull,
test(# ctext,
test(# primarykey(a,b)
test(# );
CREATETABLE
test=#createtriggertcndata_tcn_trigger
test-# afterinsertorupdateordeleteontcndata
test-# foreachrowexecuteproceduretriggered_change_notification();
CREATETRIGGER
vendo o resultado da tcn
test=#listentcn;
LISTEN
test=#insertintotcndatavalues(1,date'2012-12-22','one'),
test-# (1,date'2012-12-23','another'),
test-# (2,date'2012-12-23','two');
INSERT03
Asynchronousnotification"tcn"withpayload""tcndata",I,"a"='1',"b"='2012-12-22'"received
fromserverprocesswithPID22770.
Asynchronousnotification"tcn"withpayload""tcndata",I,"a"='1',"b"='2012-12-23'"received
fromserverprocesswithPID22770.
Asynchronousnotification"tcn"withpayload""tcndata",I,"a"='2',"b"='2012-12-23'"received
fromserverprocesswithPID22770.
test=#updatetcndatasetc='uno'wherea=1;
UPDATE2
Asynchronousnotification"tcn"withpayload""tcndata",U,"a"='1',"b"='2012-12-22'"received
fromserverprocesswithPID22770.
Asynchronousnotification"tcn"withpayload""tcndata",U,"a"='1',"b"='2012-12-23'"received
fromserverprocesswithPID22770.
test=#deletefromtcndatawherea=1andb=date'2012-12-22';
DELETE1
Asynchronousnotification"tcn"withpayload""tcndata",D,"a"='1',"b"='2012-12-22'"received
fromserverprocesswithPID22770.
respirem …
finalizando …
(quase)
hipoteticamente pensando …
como poderia ser um servidor web no
Postgres?
iniciando a aplicação
CREATESCHEMAtodo_list;
CREATETABLEtodo_list.itens(conteudojsonb);
CREATEINDEXix_itens_idONtodo_list.itensUSINGGIN((conteudo->'id'));
SELECTpg_web_app_start('todo_list',8000);
guedes@betelgeuse ~$
curl-XPUThttp://ip.servidor:8000/item/-d'{"id":1,"descricao":"compartilharconhecime
nto"}'
{"response":"created"}
curl-XGEThttp://ip.servidor:8000/item/1
{"id":1,"descricao":"compartilharconhecimento"}
curl-XDELETEhttp://ip.servidor:8000/item/1
{"response":"deleted"}
curl-XGEThttp://ip.servidor:8000/item/1
qual é a magica do
pg_web_app_start('todo_list',8000)?
todo_list.app()
CREATEFUNCTIONtodo_list.app()RETURNSjsonbLANGUAGEplv8AS$$
varTodoListApp=PgWebApp();
TodoListApp.get('/',function(req,res){
res.send('<html>....</html>');
});
TodoListApp.get('/item/:id',function(req,res){
plv8.execute('SELECT*FROMtodo_list.itensWHEREid=$1',[req.params.id]);
});
TodoListApp.put('/item',function(req,res){
plv8.execute('INSERTINTOtodo_list.itensVALUES($1)',[req.body]);
});
TodoListApp.post('/item',function(req,res){
plv8.execute('UPDATEtodo_list.itensSETconteudo=$1WHEREid=$2',[req.body,req.para
ms.id]);
});
TodoListApp.delete('/item',function(req,res){
plv8.execute('DELETEFROMtodo_list.itensWHEREid=$1',[req.params.id]);
});
TodoListApp.on('usuario_logado',function(payload){
plv8.elog(NOTICE,'Ousuario'+payload+'logou!');
});
RETURNTodoListApp;
$$;
é como se eu publicasse meu
esquema todo_listna porta
8000
mas …
você pode esquecer tudo isto …
e dar uma olhada no pg_rest
no fim das contas você vai
perceber que ..
não há limites para o que você
pode fazer com o Postgres …
e que não há limite para a sua
imaginação …
mas tenha a certeza de que o
caminho seja divertido
compartilhem conhecimento
inspirem
e é isso, obrigado! :)
Conferencia Brasileira de PostgreSQL
18 a 20 de Novembro
email: guedes@guedesoft.net
github:
twitter:
http://pgbr.postgresql.org.br/
http://github.com/guedes
http://twitter.com/guediz
O Elefante Poliglota - Como transformar um servidor Postgres em um servidor WEB

Mais conteúdo relacionado

Destaque

PostgreSQL Conceitos e aplicações - FSA
PostgreSQL  Conceitos e aplicações - FSAPostgreSQL  Conceitos e aplicações - FSA
PostgreSQL Conceitos e aplicações - FSAFabio Telles Rodriguez
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto AdapterMatheus Andrade
 
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)Fabrízio Mello
 
Overview Sobre Varnish
Overview Sobre VarnishOverview Sobre Varnish
Overview Sobre VarnishLocaweb
 
Comercio eletronico - Dicas práticas
Comercio eletronico - Dicas práticasComercio eletronico - Dicas práticas
Comercio eletronico - Dicas práticasLocaweb
 
Debian no limite - como ter um desktop atualizado
Debian no limite - como ter um desktop atualizadoDebian no limite - como ter um desktop atualizado
Debian no limite - como ter um desktop atualizadoClaudio Ferreira Filho
 
Se eu fosse a Microsoft
Se eu fosse a MicrosoftSe eu fosse a Microsoft
Se eu fosse a MicrosoftCesar Brod
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Dickson S. Guedes
 
API Do Email Marketing Locaweb
API Do Email Marketing LocawebAPI Do Email Marketing Locaweb
API Do Email Marketing LocawebLocaweb
 
Celery for SysAdmins
Celery for SysAdminsCelery for SysAdmins
Celery for SysAdminsLocaweb
 
Tech talkrubocop
Tech talkrubocopTech talkrubocop
Tech talkrubocopLocaweb
 
Soluções para sua empresa vender na Internet
Soluções para sua empresa vender na InternetSoluções para sua empresa vender na Internet
Soluções para sua empresa vender na InternetLocaweb
 
Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)Fabrízio Mello
 
Princípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémPrincípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémLocaweb
 
Isolamento e mvcc
Isolamento e mvccIsolamento e mvcc
Isolamento e mvccLocaweb
 
Sistemas Distribuidos
Sistemas DistribuidosSistemas Distribuidos
Sistemas DistribuidosLocaweb
 

Destaque (20)

PostgreSQL Conceitos e aplicações - FSA
PostgreSQL  Conceitos e aplicações - FSAPostgreSQL  Conceitos e aplicações - FSA
PostgreSQL Conceitos e aplicações - FSA
 
Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto Adapter
 
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
NoSQL + SQL = PostgreSQL (TDC2014 - Porto Alegre/RS)
 
Overview Sobre Varnish
Overview Sobre VarnishOverview Sobre Varnish
Overview Sobre Varnish
 
Storage em Oracle RAC
Storage em Oracle RACStorage em Oracle RAC
Storage em Oracle RAC
 
Comercio eletronico - Dicas práticas
Comercio eletronico - Dicas práticasComercio eletronico - Dicas práticas
Comercio eletronico - Dicas práticas
 
Debian no limite - como ter um desktop atualizado
Debian no limite - como ter um desktop atualizadoDebian no limite - como ter um desktop atualizado
Debian no limite - como ter um desktop atualizado
 
Se eu fosse a Microsoft
Se eu fosse a MicrosoftSe eu fosse a Microsoft
Se eu fosse a Microsoft
 
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
Estripando o Elefante - (Trabalhando com extensões no PostgreSQL)
 
Postgres Big data
Postgres Big dataPostgres Big data
Postgres Big data
 
API Do Email Marketing Locaweb
API Do Email Marketing LocawebAPI Do Email Marketing Locaweb
API Do Email Marketing Locaweb
 
Celery for SysAdmins
Celery for SysAdminsCelery for SysAdmins
Celery for SysAdmins
 
Revisão do postgresql.conf
Revisão do postgresql.confRevisão do postgresql.conf
Revisão do postgresql.conf
 
Tech talkrubocop
Tech talkrubocopTech talkrubocop
Tech talkrubocop
 
Soluções para sua empresa vender na Internet
Soluções para sua empresa vender na InternetSoluções para sua empresa vender na Internet
Soluções para sua empresa vender na Internet
 
Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)Dojo PHP (treinanto programação orientada a objetos em PHP)
Dojo PHP (treinanto programação orientada a objetos em PHP)
 
Trabalhando com Logs no PostgreSQL
Trabalhando com Logs no PostgreSQLTrabalhando com Logs no PostgreSQL
Trabalhando com Logs no PostgreSQL
 
Princípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e AlémPrincípios de Concorrência em Ruby e Além
Princípios de Concorrência em Ruby e Além
 
Isolamento e mvcc
Isolamento e mvccIsolamento e mvcc
Isolamento e mvcc
 
Sistemas Distribuidos
Sistemas DistribuidosSistemas Distribuidos
Sistemas Distribuidos
 

Semelhante a O Elefante Poliglota - Como transformar um servidor Postgres em um servidor WEB

Skytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxySkytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxyFernando Ike
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyGilson Filho
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Emerson Macedo
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Cristiano Rafael Steffens
 
Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroMichael Castillo Granados
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSEmerson Macedo
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Rafael Ponte
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessRafael Farias Silva
 
Trabalho Remoto - Remote Job - #devitz2013
Trabalho Remoto - Remote Job - #devitz2013Trabalho Remoto - Remote Job - #devitz2013
Trabalho Remoto - Remote Job - #devitz2013Herson Leite
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )João Moura
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valorKinn Julião
 
Supervisão e Monitorização
Supervisão e MonitorizaçãoSupervisão e Monitorização
Supervisão e MonitorizaçãoSAPO Sessions
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformanceFelipe Ribeiro
 
Falhando miseralvelmente com PHP
Falhando miseralvelmente com PHPFalhando miseralvelmente com PHP
Falhando miseralvelmente com PHPAugusto Pascutti
 
15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrerMichele Silva
 
Introdução a robótica
Introdução a robóticaIntrodução a robótica
Introdução a robóticaCharles Fortes
 

Semelhante a O Elefante Poliglota - Como transformar um servidor Postgres em um servidor WEB (20)

Skytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxySkytools, pgbouncer e plproxy
Skytools, pgbouncer e plproxy
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010Beyond Ruby with NodeJS - RubyConf Brasil 2010
Beyond Ruby with NodeJS - RubyConf Brasil 2010
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)Simpósio Unicruz: OpenCV + Python (parte 1)
Simpósio Unicruz: OpenCV + Python (parte 1)
 
Vagrant + Puppet
Vagrant + PuppetVagrant + Puppet
Vagrant + Puppet
 
Da argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguroDa argila ao forte: como desenvolver uma loja com PagSeguro
Da argila ao forte: como desenvolver uma loja com PagSeguro
 
RubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJSRubyMasters 2011 - Beyond Ruby with NodeJS
RubyMasters 2011 - Beyond Ruby with NodeJS
 
Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)Hibernate efetivo (IA-2014 / Disturbing the Mind)
Hibernate efetivo (IA-2014 / Disturbing the Mind)
 
Groovy para javeiros - Migração Painless
Groovy para javeiros - Migração PainlessGroovy para javeiros - Migração Painless
Groovy para javeiros - Migração Painless
 
Trabalho Remoto - Remote Job - #devitz2013
Trabalho Remoto - Remote Job - #devitz2013Trabalho Remoto - Remote Job - #devitz2013
Trabalho Remoto - Remote Job - #devitz2013
 
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
WebSocket com Node.js ( socketstream && coffeescript ) X RoR ( Juggernaut )
 
Redis um banco chave valor
Redis um banco chave valorRedis um banco chave valor
Redis um banco chave valor
 
Supervisão e Monitorização
Supervisão e MonitorizaçãoSupervisão e Monitorização
Supervisão e Monitorização
 
PHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta PerformancePHP Jedi - Boas Práticas e Alta Performance
PHP Jedi - Boas Práticas e Alta Performance
 
Falhando miseralvelmente com PHP
Falhando miseralvelmente com PHPFalhando miseralvelmente com PHP
Falhando miseralvelmente com PHP
 
15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer15 coisas sobre php para saber antes de morrer
15 coisas sobre php para saber antes de morrer
 
Ajax em java
Ajax em javaAjax em java
Ajax em java
 
Introdução a robótica
Introdução a robóticaIntrodução a robótica
Introdução a robótica
 
Vivendo de hacking
Vivendo de hackingVivendo de hacking
Vivendo de hacking
 

Mais de Dickson S. Guedes

Ganhando tempo automatizando com SQL
Ganhando tempo automatizando com SQLGanhando tempo automatizando com SQL
Ganhando tempo automatizando com SQLDickson S. Guedes
 
O mínimo necessário que você precisa conhecer sobre computação quântica
O mínimo necessário que você precisa conhecer sobre computação quânticaO mínimo necessário que você precisa conhecer sobre computação quântica
O mínimo necessário que você precisa conhecer sobre computação quânticaDickson S. Guedes
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorDickson S. Guedes
 
Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?
Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?
Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?Dickson S. Guedes
 
Primeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLPrimeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLDickson S. Guedes
 
Dicas de sobrevivência de um DBA sem mouse
Dicas de sobrevivência de um DBA sem mouseDicas de sobrevivência de um DBA sem mouse
Dicas de sobrevivência de um DBA sem mouseDickson S. Guedes
 
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrar
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrarCuriosidades que você (talvez) não sabia e se sabia vale a pena lembrar
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrarDickson S. Guedes
 
Como encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logsComo encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logsDickson S. Guedes
 
Como encontrar uma agulha no palheiro de logs do PostgreSQL
Como encontrar uma agulha no palheiro de logs do PostgreSQLComo encontrar uma agulha no palheiro de logs do PostgreSQL
Como encontrar uma agulha no palheiro de logs do PostgreSQLDickson S. Guedes
 
Gerenciando múltiplas versões do PostgreSQL com pgvm
Gerenciando múltiplas versões do PostgreSQL com pgvmGerenciando múltiplas versões do PostgreSQL com pgvm
Gerenciando múltiplas versões do PostgreSQL com pgvmDickson S. Guedes
 
PGXN - Como distribuir suas extensões com o PostgreSQL
PGXN - Como distribuir suas extensões com o PostgreSQLPGXN - Como distribuir suas extensões com o PostgreSQL
PGXN - Como distribuir suas extensões com o PostgreSQLDickson S. Guedes
 
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...Dickson S. Guedes
 
Conhecendo Postgresql.- ENECOMP 2009
Conhecendo Postgresql.- ENECOMP 2009Conhecendo Postgresql.- ENECOMP 2009
Conhecendo Postgresql.- ENECOMP 2009Dickson S. Guedes
 
Minicurso Postgresql - Enecomp 2009
Minicurso Postgresql - Enecomp 2009Minicurso Postgresql - Enecomp 2009
Minicurso Postgresql - Enecomp 2009Dickson S. Guedes
 
Testes unitarios no PostgreSQL com pgTAP
Testes unitarios no PostgreSQL com pgTAPTestes unitarios no PostgreSQL com pgTAP
Testes unitarios no PostgreSQL com pgTAPDickson S. Guedes
 
pgScript: um Elefante de barriga cheia
pgScript: um Elefante de barriga cheiapgScript: um Elefante de barriga cheia
pgScript: um Elefante de barriga cheiaDickson S. Guedes
 

Mais de Dickson S. Guedes (20)

Ganhando tempo automatizando com SQL
Ganhando tempo automatizando com SQLGanhando tempo automatizando com SQL
Ganhando tempo automatizando com SQL
 
O mínimo necessário que você precisa conhecer sobre computação quântica
O mínimo necessário que você precisa conhecer sobre computação quânticaO mínimo necessário que você precisa conhecer sobre computação quântica
O mínimo necessário que você precisa conhecer sobre computação quântica
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
 
Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?
Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?
Pattern matching - O que é? Onde vive? Do que se alimenta? Como se reproduz?
 
Primeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQLPrimeiros passos machine learning PostgreSQL
Primeiros passos machine learning PostgreSQL
 
Dicas de sobrevivência de um DBA sem mouse
Dicas de sobrevivência de um DBA sem mouseDicas de sobrevivência de um DBA sem mouse
Dicas de sobrevivência de um DBA sem mouse
 
Destistificando o EXPLAIN
Destistificando o EXPLAIN Destistificando o EXPLAIN
Destistificando o EXPLAIN
 
Falando "Postgrês"
Falando "Postgrês"Falando "Postgrês"
Falando "Postgrês"
 
Se meu elefante falasse
Se meu elefante falasseSe meu elefante falasse
Se meu elefante falasse
 
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrar
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrarCuriosidades que você (talvez) não sabia e se sabia vale a pena lembrar
Curiosidades que você (talvez) não sabia e se sabia vale a pena lembrar
 
Como encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logsComo encontrar uma agulha num palheiro de logs
Como encontrar uma agulha num palheiro de logs
 
Como encontrar uma agulha no palheiro de logs do PostgreSQL
Como encontrar uma agulha no palheiro de logs do PostgreSQLComo encontrar uma agulha no palheiro de logs do PostgreSQL
Como encontrar uma agulha no palheiro de logs do PostgreSQL
 
Gerenciando múltiplas versões do PostgreSQL com pgvm
Gerenciando múltiplas versões do PostgreSQL com pgvmGerenciando múltiplas versões do PostgreSQL com pgvm
Gerenciando múltiplas versões do PostgreSQL com pgvm
 
PGXN - Como distribuir suas extensões com o PostgreSQL
PGXN - Como distribuir suas extensões com o PostgreSQLPGXN - Como distribuir suas extensões com o PostgreSQL
PGXN - Como distribuir suas extensões com o PostgreSQL
 
Pgxn.pgday
Pgxn.pgdayPgxn.pgday
Pgxn.pgday
 
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...
Plante uma árvore, escreva um livro, tenha um filho e contribua com software ...
 
Conhecendo Postgresql.- ENECOMP 2009
Conhecendo Postgresql.- ENECOMP 2009Conhecendo Postgresql.- ENECOMP 2009
Conhecendo Postgresql.- ENECOMP 2009
 
Minicurso Postgresql - Enecomp 2009
Minicurso Postgresql - Enecomp 2009Minicurso Postgresql - Enecomp 2009
Minicurso Postgresql - Enecomp 2009
 
Testes unitarios no PostgreSQL com pgTAP
Testes unitarios no PostgreSQL com pgTAPTestes unitarios no PostgreSQL com pgTAP
Testes unitarios no PostgreSQL com pgTAP
 
pgScript: um Elefante de barriga cheia
pgScript: um Elefante de barriga cheiapgScript: um Elefante de barriga cheia
pgScript: um Elefante de barriga cheia
 

O Elefante Poliglota - Como transformar um servidor Postgres em um servidor WEB