Contenu connexe Similaire à O Elefante Poliglota (20) Plus de Dickson S. Guedes (20) O Elefante Poliglota2. 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.
21. 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"}
]
}
22. 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"
40. 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
49. 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"]);
$$;
50. FDW - foreign data wrappers
(pg_foreign_data_wrapper)
file_fdw
postgres_fdw
mysql_fdw
mongo_fdw
multicorn
que tal o seu aqui também?
51. 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)
52. FDW - um exemplo multicorn
http://multicorn.org/implementing-an-fdw/
54. 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
55. BGW - um exemplo
postmaster
|
`--autovacuum
|
`--checkpointer
|
`--bgwriter
|
`--matador_de_conexoes_ociosas
|
`--analisador_da_saude_do_banco
.
.
.
58. Mas você pode inicia-lo utilizando uma
função do banco
--
SELECTnet_http_server(8000);
59. e um novo BGW inicia
postmaster
|
`--autovacuum
|
`--checkpointer
|
`--bgwriter
|
`--matador_de_conexoes_ociosas
|
`--analisador_da_saude_do_banco
|
`--net_http_server
.
.
.
66. 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
67. 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.
76. qual é a magica do
pg_web_app_start('todo_list',8000)?
77. 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;
$$;
78. é como se eu publicasse meu
esquema todo_listna porta
8000
86. e que não há limite para a sua
imaginação …
87. mas tenha a certeza de que o
caminho seja divertido
92. 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