<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Tas Blog: Tiago Silva</title>
	<atom:link href="http://tas.eti.br/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://tas.eti.br/blog</link>
	<description>PHP, PostgreSQL, Linux, jQuery, JavaScript e Carreira</description>
	<lastBuildDate>Wed, 15 Feb 2012 12:42:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Vídeo Aulas: Gramáticas, Autômatos, Expressões Regulares e Máquina de Turing</title>
		<link>http://tas.eti.br/blog/2012/02/video-aulas-gramaticas-automatos-expressoes-regulares-e-maquina-de-turing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=video-aulas-gramaticas-automatos-expressoes-regulares-e-maquina-de-turing</link>
		<comments>http://tas.eti.br/blog/2012/02/video-aulas-gramaticas-automatos-expressoes-regulares-e-maquina-de-turing/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 05:17:25 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Mestrado]]></category>
		<category><![CDATA[Estudo]]></category>
		<category><![CDATA[UFSCar]]></category>

		<guid isPermaLink="false">http://tas.eti.br/blog/?p=979</guid>
		<description><![CDATA[Olá novamente meus amigos! Sei que estou um pouco sumido das postagens, mas é por uma boa causa, depois que ingressei no mestrado da UFSCar estou tendo que estudar para alguns temas que serão abordados nas disciplinas do programa, e sendo assim hoje estou trazendo alguns assuntos que estou estudando, e hoje trago para vocês [...]]]></description>
			<content:encoded><![CDATA[<p>Olá novamente meus amigos!</p>
<p>Sei que estou um pouco sumido das postagens, mas é por uma boa causa, depois que ingressei no<a href="http://tas.eti.br/blog/2011/12/mestrado-na-ufscar-to-dentro/" target="_blank"> mestrado da UFSCar</a> estou tendo que estudar para alguns temas que serão abordados nas disciplinas do programa, e sendo assim hoje estou trazendo alguns assuntos que estou estudando, e hoje trago para vocês os assuntos da disciplina de <a href="http://ppgcc.dc.ufscar.br/disciplinas/obrigatorias/CCO-410%20-%20Aspectos%20Formais%20da%20Computacao.docx/view" target="_blank">Aspectos Formais da Computação</a>.</p>
<p style="text-align: center;"><a href="http://tas.eti.br/blog/wp-content/uploads/2011/12/ufscar.jpg"><img class="aligncenter  wp-image-879" title="ufscar" src="http://tas.eti.br/blog/wp-content/uploads/2011/12/ufscar.jpg" alt="" width="240" height="167" /></a></p>
<p>Além de estudar com alguns livros (achei esse livro disponível: <a href="http://www.ebah.com.br/content/ABAAAAtNMAL/introducao-a-teoria-computacao" target="_blank">Introdução a Teoria da Computação</a>, muito didático, vale a pena dar uma olhada),  apostilas e apresentações (<a href="http://www.slideshare.net/marcoarthur/teoria-da-computacao-cap-1-presentation" target="_blank">Slides Teoria da Computação &#8211; USP</a> e <a href="http://www.slideshare.net/wab030/aula-5-linguagens-regularese-automatosfinitosnodeterministico" target="_blank">Teoria da Computação</a> (mais simplificada), estou me utilizando de vídeo aulas, que estão sendo bem esclarecedoras. E assim como fiz no <a href="http://tas.eti.br/blog/2011/12/vamos-aprender-sobre-a-zend-framework/" target="_blank">post sobre a Zend Framework</a> eu separei as vídeo aulas que estão me ajudando a compreender os assuntos da disciplina, em destaque para as aulas do <a href="https://sites.google.com/site/eaoufpe/" target="_blank">Prof. Eduardo</a>, no seu <a href="http://www.youtube.com/user/eaoufpe/videos" target="_blank">canal do YouTube</a> encontrei 8 vídeos publicados que tratam desde os conceitos básicos de conjuntos, alfabetos e cadeias, até Máquina de Estados Finitos com Expressões Regulares, veja:</p>
<ul>
<li><a href="http://www.youtube.com/watch?v=6djUgfpa5-E&amp;feature=plcp&amp;context=C3989e7fUDOEgsToPDskLlgi02kFflwK6-P94yVm-y" target="_blank">Vídeo Aula 1 &#8211; Formalismos, Classes de Linguagens e Autômato Finito Determinístico</a></li>
<li><a href="http://www.youtube.com/watch?v=4LjtgA64RXU&amp;feature=plcp&amp;context=C3e409ffUDOEgsToPDskIZCWRgvkm8zppC_22vKxO6" target="_blank">Vídeo Aula 2 &#8211; Máquina de Estados Finitos</a></li>
<li><a href="http://www.youtube.com/watch?v=ijbR_irWzGY&amp;feature=plcp&amp;context=C32c548cUDOEgsToPDskJEsmjYUjB0Atc7cvCkiEaf" target="_blank">Vídeo Aula 3 &#8211; Autômato Finito Determinístico (continuação)</a></li>
<li><a href="http://www.youtube.com/watch?v=LGApONHq8LI&amp;feature=plcp&amp;context=C384d324UDOEgsToPDskIsDHakGPdOS03uN0mr7_CL" target="_blank">Vídeo Aula 4 &#8211; Autômato Finito Determinístico vs. Autômato Finito Não Determinístico</a></li>
<li><a href="http://www.youtube.com/watch?v=V4I7EBrMYmY&amp;feature=plcp&amp;context=C371db71UDOEgsToPDskIbnl5GD7vmY6nFKza2AbRS" target="_blank">Vídeo Aula 5 &#8211; Equivalência Autômato Finito Determinístico e Não Determinístico</a></li>
<li><a href="http://www.youtube.com/watch?v=H3oBiwQFKbs&amp;feature=plcp&amp;context=C3ea2d30UDOEgsToPDskJCxkrJsApmyIsf2zMgnotm" target="_blank">Vídeo Aula 6 &#8211; Autômato Finito Não Determinístico com transições ε</a></li>
<li><a href="http://www.youtube.com/watch?v=49KheYbQ_RQ&amp;feature=plcp&amp;context=C3b63ad9UDOEgsToPDskJyZT_czrtTSHwMjonRs-YZ" target="_blank">Vídeo Aula 7 &#8211; Linguagens e Expressões Regulares</a></li>
<li><a href="http://www.youtube.com/watch?v=6Bm-JGhRw_w&amp;feature=plcp&amp;context=C33b41efUDOEgsToPDskIowcj5skbgPbcgwEUK1VxU" target="_blank">Vídeo Aula 8 &#8211; Autômatos Finitos e Expressões Regulares</a></li>
</ul>
<p>Veja aqui outros vídeos interessantes que estou estudando:</p>
<ul>
<li><a href="http://www.youtube.com/watch?v=zqUU-fXdfos" target="_blank">Máquina de Turing, UFAL</a> (a explicação no vídeo não é muito didática, mas a animação ajuda no entendimento)</li>
<li><a href="http://www.youtube.com/watch?v=phEBQ-tyLGs&amp;feature=player_embedded" target="_blank">Autômatos com pilhas</a>, 1:35 hrs de aula, em espanhol (<strong>!!!</strong>)</li>
<li><a href="http://www.youtube.com/watch?v=e8tdtnDmUpE" target="_blank">Curso de Estrutura de Dados (USP)</a>, vale a pena dar uma olhada no<a href="http://www.youtube.com/user/labpib/videos" target="_blank"> canal do YouTube</a></li>
</ul>
<p>Então é isso ai galera, conforme eu for tendo tempo, vou postando algo para vocês!</p>
<p>Abração,</p>
<p><a title="Quem mantem este blog?" href="http://tas.eti.br/blog/sobre/" target="_blank">Tiago</a>.</p>
<div style="float: left; margin-left: 10px;"><a href="http://twitter.com/share?url=http://tas.eti.br/blog/2012/02/video-aulas-gramaticas-automatos-expressoes-regulares-e-maquina-de-turing/&via=tiagotas&text=Vídeo Aulas: Gramáticas, Autômatos, Expressões Regulares e Máquina de Turing&related=:&lang=en&count=horizontal" class="twitter-share-button" onclick="javascript:_gaq.push(['_trackSocial", "twitter", "tweet"]);">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="AWD_like_button "><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftas.eti.br%2Fblog%2F2012%2F02%2Fvideo-aulas-gramaticas-automatos-expressoes-regulares-e-maquina-de-turing%2F&amp;send=false&amp;layout=standard&amp;width=200&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font=arial&amp;height=40" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:40px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://tas.eti.br/blog/2012/02/video-aulas-gramaticas-automatos-expressoes-regulares-e-maquina-de-turing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calculando previsão de vendas com PHP e PostgreSQL</title>
		<link>http://tas.eti.br/blog/2012/01/calculando-previsao-de-vendas-com-php-e-postgresql/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=calculando-previsao-de-vendas-com-php-e-postgresql</link>
		<comments>http://tas.eti.br/blog/2012/01/calculando-previsao-de-vendas-com-php-e-postgresql/#comments</comments>
		<pubDate>Fri, 13 Jan 2012 03:44:49 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://tas.eti.br/blog/?p=676</guid>
		<description><![CDATA[Olá Amigos! Hoje eu vou tratar de um assunto da época da faculdade, o cálculo da previsão de vendas de um determinado produto, com base nas vendas anteriores, para tal iremos utilizar o PostgreSQL e PHP. Mas antes de mais nada, estou disponibilizando um documento do Excel com os mesmos dados da figura abaixo, juntamente com [...]]]></description>
			<content:encoded><![CDATA[<p>Olá Amigos!</p>
<p>Hoje eu vou tratar de um assunto da época da <a title="Veja o post sobre a Fatec Mococa" href="http://tas.eti.br/blog/2011/11/fatec-mococa-12-melhor-faculdade-publica-do-pais/" target="_blank">faculdade</a>, o cálculo da previsão de vendas de um determinado produto, com base nas vendas anteriores, para tal iremos utilizar o <a title="Mais posts sobre PostgreSQL" href="http://tas.eti.br/blog/category/postgresql/" target="_blank">PostgreSQL</a> e <a title="Mais posts sobre PHP" href="http://tas.eti.br/blog/category/php/" target="_blank">PHP</a>.</p>
<p style="text-align: center;"><a style="text-align: center;" href="http://tas.eti.br/blog/wp-content/uploads/2012/01/postgres-php.jpg"><img class="size-full wp-image-956 aligncenter" style="border-style: initial; border-color: initial;" title="postgres-php" src="http://tas.eti.br/blog/wp-content/uploads/2012/01/postgres-php.jpg" alt="" width="254" height="147" /></a></p>
<p>Mas antes de mais nada, estou disponibilizando um <a title="Faça o donwload do exemplo aqui!" href="http://tas.eti.br/blog/wp-content/uploads/2012/01/Modelo-de-Previsão-de-Vendas.xls" target="_blank">documento do Excel</a> com os mesmos dados da figura abaixo, juntamente com um gráfico contendo os resultados e informações importantes como o valor do r² e a equação do nosso modelo. Também achei importante disponibilizar os <a title="Download dos slides" href="http://tas.eti.br/blog/wp-content/uploads/2012/01/Análise-de-Regressão-aplicação-a-custos.ppt" target="_blank">slides utilizados</a> pelo Prof. Darlan quando este assunto foi ministrado, lá você irá encontrar mais conteúdo e uma bagagem teórica solida e enxuta.</p>
<p>Primeiramente vamos ao nosso problema:</p>
<blockquote><p><em>Quanto eu devo investir em publicidade para ter um determinado ganho em vendas?</em></p></blockquote>
<p>Quando nós chegarmos ao ponto de extrair os dados do Postgres perceberemos que na modelagem do banco estes dados (investimento e vendas) não tem nenhuma correlação, veja bem, do ponto de vista da modelagem. Por isso é muito importante que você compreenda bem nosso problema, e para simplificar na tabela abaixo temos os investimentos (ou gastos) com publicidade representado pela<strong> variável x</strong>, e as vendas representadas pela <strong>variável y</strong>. Note que além desses dados temos outros como <strong>x²</strong>, <strong>y²</strong> e<strong> xy</strong>, que iremos utilizar posteriormente.</p>
<p><a href="http://tas.eti.br/blog/wp-content/uploads/2012/01/previsao_vendas_formula_tabela.jpg"><img class="aligncenter size-full wp-image-943" title="previsao_vendas_formula_tabela" src="http://tas.eti.br/blog/wp-content/uploads/2012/01/previsao_vendas_formula_tabela.jpg" alt="" width="439" height="136" /></a></p>
<p>Veremos estes mesmos dados a seguir quando estivermos trabalhando no banco de dados, coloquei a tabela de ante-mão para abstrair melhor nosso trabalho, e  na seção seguinte do post iremos abordar os conceitos matemáticos envolvidos e os nomes das colunas (as variáveis) irão aparecer nas fórmulas, e como já vimos estruturadamente, ficará mais fácil.</p>
<p>O objetivo então é que possamos construir uma aplicação que nos informe qual será o valor que iremos vender, baseando-se no valor que iremos investir em publicidade.</p>
<p>Ahh, antes que os mais críticos se envolvam, gostaria de dizer que este é um exemplo simples, se você quiser pode melhora-lo de acordo com a sua necessidade <img src='http://tas.eti.br/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p><strong>A matemática por traz do cálculo</strong></p>
<p>Antes que muitos torçam o nariz ou pulem essa parte, já vou adiantando que nossa matemática será breve e simples. É fundamental que você entenda essas fórmulas (além de ler os slides que falei acima) para entender como funciona o nosso modelo.</p>
<p>E por falar em modelo, aqui temos um estatístico probabilístico, de <strong>regressão linear simples</strong>. Veja a representação do nosso modelo de equação abaixo:</p>
<p style="text-align: center;"><a style="text-align: center;" href="http://tas.eti.br/blog/wp-content/uploads/2012/01/previsao_vendas_modelo_regressao_simples.jpg"><img class="size-full wp-image-944 aligncenter" style="border-style: initial; border-color: initial;" title="previsao_vendas_modelo_regressao_simples" src="http://tas.eti.br/blog/wp-content/uploads/2012/01/previsao_vendas_modelo_regressao_simples.jpg" alt="" width="221" height="64" /></a></p>
<p>Aqui temos que a variável y é <strong>explicada</strong> pela variável x, que por sua vez é <strong>explicativa</strong>. Então veja que, se estamos representando os gastos com publicidade por x, e as vendas por y, temos que os gastos com publicidade é que vão <strong>determinar</strong> o valor das vendas.</p>
<p>Note também que temos dois coeficientes, chamados de <strong>a</strong> e <strong>b</strong>. As duas fórmulas a seguir irão utilizar os nossos dados que estão na tabela (conforme a figura da primeira seção), que na  verdade iremos regastar do Postgres. Veja que abaixo temos a representação da fórmula onde iremos encontrar o <strong>valor de a</strong>:</p>
<p style="text-align: center;"><a href="http://tas.eti.br/blog/wp-content/uploads/2012/01/previsao_vendas_formula_a.jpg"><img class="size-full wp-image-941 aligncenter" title="previsao_vendas_formula_a" src="http://tas.eti.br/blog/wp-content/uploads/2012/01/previsao_vendas_formula_a.jpg" alt="" width="166" height="70" /></a><a href="http://tas.eti.br/blog/wp-content/uploads/2012/01/previsao_vendas_formula_b.jpg"><br />
</a></p>
<p>Você deve ter percebido que para calcular o valor de a, antes é necessário obter o valor de b, pois bem, abaixo está a fórmula para o cálculo, veja um detalhe importante: o valor de <strong>n</strong> é exatamente o número de linhas da nossa tabela (ou o número de registros no banco de dados).</p>
<p style="text-align: center;"><a href="http://tas.eti.br/blog/wp-content/uploads/2012/01/previsao_vendas_formula_b.jpg"><img class="size-full wp-image-942 aligncenter" style="border-style: initial; border-color: initial;" title="previsao_vendas_formula_b" src="http://tas.eti.br/blog/wp-content/uploads/2012/01/previsao_vendas_formula_b.jpg" alt="" width="252" height="76" /></a></p>
<div></div>
<p>Agora que você já tem as duas fórmulas poderá chegar na equeção linear do nosso modelo, que será parecida com esta:</p>
<blockquote><p> y = 2,0754 + 2,0884.x</p></blockquote>
<p>&nbsp;</p>
<p><strong>Como saber se o modelo é confiável?</strong></p>
<p>Para sabermos se o nosso modelo é confiável contaremos com o <a href="http://pt.wikipedia.org/wiki/Coeficiente_de_correla%C3%A7%C3%A3o_de_Pearson" target="_blank">Coeficiente de Correlação de Person</a>, ou o famoso <strong>r²</strong>. Podemos calcular o valor do nosso coeficiente com a singela fórmula abaixo:</p>
<p style="text-align: center;"><a href="http://tas.eti.br/blog/wp-content/uploads/2012/01/previsao_vendas_formula_r_quadrado.jpg"><img class="size-full wp-image-940 aligncenter" title="previsao_vendas_formula_r_quadrado" src="http://tas.eti.br/blog/wp-content/uploads/2012/01/previsao_vendas_formula_r_quadrado.jpg" alt="" width="381" height="64" /></a></p>
<p>O resultado de r², irá variar entre -1 e 1, de forma que dependendo da variação, ela terá estes significados:</p>
<ul>
<li><strong>r² = -1</strong> : Existe uma correlação inversa entra as variáveis, ou seja, quando uma aumenta a outra diminui.</li>
<li><strong>r² = 0</strong> : Modelo ruim, quanto mais próximo de 0, menos acertivo será seu modelo.</li>
<li><strong>r² = 1</strong> : Significa que seu modelo é muito bom! Ou seja, quanto mais próximo de 1, melhor!</li>
</ul>
<p>No nosso exemplo, r² é de aproximadamente <strong>0,93</strong> e observe que ele está bem próximo de 1, o que nos indica que nosso<strong> modelo é consistente</strong>.</p>
<p>&nbsp;</p>
<p><strong>Construção das tabelas, queries, e dados no <a title="Veja mais posts sobre o PostgreSQL" href="http://tas.eti.br/blog/category/postgresql/" target="_blank">PostgreSQL</a></strong></p>
<p>Este é o ponto mais importante do trabalho, aqui é onde iremos armazenar os dados que servirão de base para construírmos o modelo estatístico de previsão, para isso tome como base as duas tabelas a seguir conforme o modelo mostrado anteriormente:</p>
<pre class="brush: sql; gutter: true; first-line: 1">CREATE TABLE investimento_publicidade (
	cod_investimento SERIAL,
	valor_investimento DOUBLE PRECISION NOT NULL,
	data_realizacao TIMESTAMP NOT NULL DEFAULT NOW(),
	PRIMARY KEY (cod_investimento)
);</pre>
<pre class="brush: sql; gutter: true; first-line: 1">CREATE TABLE vendas (
	id_produto SERIAL,
	nome VARCHAR(100) NOT NULL,
	preco_unitario DOUBLE PRECISION NOT NULL,
	quantidade_vendida INTEGER NOT NULL,
	PRIMARY KEY (id_produto)
);</pre>
<p>Agora iremos abastacer o nosso modelo com os mesmos dados que utilizamos acima. Para agilizar e para podermos testar depois, disponibilizei o script SQL com as instruções INSERT abaixo:</p>
<pre class="brush: sql; gutter: true; first-line: 1">INSERT INTO investimento_publicidade (valor_investimento) VALUES (3);
INSERT INTO investimento_publicidade (valor_investimento) VALUES (4);
INSERT INTO investimento_publicidade (valor_investimento) VALUES (8);
INSERT INTO investimento_publicidade (valor_investimento) VALUES (12);
INSERT INTO investimento_publicidade (valor_investimento) VALUES (14);

INSERT INTO vendas (nome, preco_unitario, quantidade_vendida) VALUES ('Produto A', 7 , 1);
INSERT INTO vendas (nome, preco_unitario, quantidade_vendida) VALUES ('Produto B', 14, 1);
INSERT INTO vendas (nome, preco_unitario, quantidade_vendida) VALUES ('Produto A', 15, 1);
INSERT INTO vendas (nome, preco_unitario, quantidade_vendida) VALUES ('Produto C', 28, 1);
INSERT INTO vendas (nome, preco_unitario, quantidade_vendida) VALUES ('Produto C', 32, 1);</pre>
<p>Muito bem! Agora temos os nossos dados, e neste ponto vamos extaí-los do banco para elaborarmos a equação do nosso modelo de previsão com o PHP!</p>
<p>Então, considere as duas queries abaixo, primeiramente a query que nos retornará os valores investidos em publicidade:</p>
<pre class="brush: sql; gutter: true; first-line: 1">SELECT SUM(valor_inestimento) AS x_somatoria_invest_publicidade, SUM(valor_inestimento^2) AS x_quadrado
FROM investimento_publicidade</pre>
<p>Veja o que estamos retornando nesta query: a nossa <strong>variável x</strong>, que é a somatória dos valores investidos em publicidade e o <strong>x²</strong>, que iremos utilizar nas fórmulas.</p>
<p>E agora a query com os valores das vendas:</p>
<pre class="brush: sql; gutter: true; first-line: 1">SELECT SUM((preco_unitario*quantidade_vendida)) AS y_somatoria_vendas, SUM((preco_unitario*quantidade_vendida)^2) AS y_quadrado
FROM vendas</pre>
<p>Ok, temos retorno das <strong>variáveis y e y²</strong>, repare que eu fiz umas brincadeirinhas, como a multiplicação do valor vendido pelo preço unitário, se você quiser pode brincar um pouco com os modelos depois alterando estes valores diretamente na tabela vendas.</p>
<blockquote><p><strong>NOTA:</strong> Eu poderia realizar toda a previsão de vendas somente dentro do Postgres, mas aqui quero utilizar o máximo de ferramentas possíveis, a previsão de vendas somente no PostgreSQL fica para um próximo post ok? =)</p></blockquote>
<p>&nbsp;</p>
<p><strong>Exibição do modelo e simulação de dados com <a title="Veja mais posts sobre o PostgreSQL" href="http://tas.eti.br/blog/category/php/" target="_blank">PHP</a></strong></p>
<p>Veja abaixo o código de uma classe que irá realizar tanto os cálculos quanto as queries no Postgres, os comentários no código já explicam o que está acontecendo:</p>
<pre class="brush: php; gutter: true; first-line: 1">class PrevisaoVendas
{
	/**
	 * Atributo estático onde armazenaremos nosso objeto PDO para nossa comunicação com o banco de dados.
	 */
	private static $conn;

	/**
	 * Construtor da classe onde criamos e armazenamos nosso objeto PDO.
	 */
	public function __construct()
	{
		$opcoes_conexao = array(PDO::ATTR_ERRMODE    =&gt; PDO::ERRMODE_EXCEPTION,
								PDO::ATTR_PERSISTENT =&gt; true);

		self::$conn = new PDO("pgsql:host=127.0.0.1 dbname=PREVISAO_VENDAS", "postgres", "senha", $opcoes_conexao);
	}

	/**
	 * Método responsável por retornar um objeto (stdClass) com os valores do x e x quadrado (investimento em publicidade)
	 */
	private function getValoresInvestimentosX()
	{
		$sql = "SELECT SUM(valor_inestimento) AS x_somatoria_invest_publicidade, SUM(valor_inestimento^2) AS x_quadrado "
		     . "FROM investimento_publicidade";

		$stmt = self::$conn-&gt;prepare($sql);
		$stmt-&gt;execute();

		return $stmt-&gt;fetchObject();
	}

	/**
	 * Método responsável por retornar um objeto (stdClass) com os valores do y e y quadrado (vendas)
	 */
	private function getValoresVendasY()
	{
		$sql = "SELECT SUM((preco_unitario*quantidade_vendida)) AS y_somatoria_vendas, SUM((preco_unitario*quantidade_vendida)^2) AS y_quadrado "
			 . "FROM vendas";

		$stmt = self::$conn-&gt;prepare($sql);
		$stmt-&gt;execute();

		return $stmt-&gt;fetchObject();
	}

	/**
	 * Método que calcula o valor de xy, a dica é você olha no manual do PHP as funções array_combine e array_sum
	 */
	private function getValorXY()
	{
		/**
		 * Obtendo os valores de x;
		 */
		$stmt = self::$conn-&gt;prepare("SELECT valor_inestimento AS x FROM investimento_publicidade LIMIT 5");
		$stmt-&gt;execute();

		$x = array();

		while($rows = $stmt-&gt;fetchObject())
			$x[] = $rows-&gt;x;

		/**
		 * Obtendo os valores de y;
		 */
		$stmt = self::$conn-&gt;prepare("SELECT preco_unitario*quantidade_vendida AS y FROM vendas LIMIT 5");
		$stmt-&gt;execute();

		$y = array();

		while($rows = $stmt-&gt;fetchObject())
			$y[] = $rows-&gt;y;

		/**
		 * Calculando o valor da soma de xy
		 */
		$xy_aux = array_combine($x, $y);

		$xy = array();

		foreach($xy_aux as $key =&gt; $value)
			$xy[] = $key * $value;

		return array_sum($xy);
	}

	/**
	 * Obtem o número de registros de vendas, o "n" utilizado nas equações, observe que o número de vendas poderá não ser igual ao número de
	 * investimentos, caberá a você criar um mecanismo para definir que sempre os dados analizados estarão na mesma proporção e consistentes,
	 * uma dica é a utilização de LIMIT e OFFSET.
	 */
	private function getNumVendas()
	{
		$sql = "SELECT COUNT(*) FROM vendas";

		$stmt = self::$conn-&gt;prepare($sql);
		$stmt-&gt;execute();

		return $stmt-&gt;fetchColumn();
	}

	/**
	 * Método onde estamos resolvendo a equação para encontrar o valor de "a".
	 */
	private function getValorEquacaoA()
	{
		$x = $this-&gt;getValoresInvestimentosX();
		$y = $this-&gt;getValoresVendasY();
		$n = $this-&gt;getNumVendas();
		$b = $this-&gt;getValorEquacaoB();	

		$a = ($y-&gt;y_somatoria_vendas - ($b * $x-&gt;x_somatoria_invest_publicidade)) / $n;

		return $a;
	}

	/**
	 * Método onde estamos resolvendo a equação para encontrar o valor de "b".
	 */
	private function getValorEquacaoB()
	{
		$x  = $this-&gt;getValoresInvestimentosX();
		$y  = $this-&gt;getValoresVendasY();
		$n  = $this-&gt;getNumVendas();
		$xy = $this-&gt;getValorXY();		

		$b = (($n * $xy) - ($x-&gt;x_somatoria_invest_publicidade * $y-&gt;y_somatoria_vendas)) / (($n * $x-&gt;x_quadrado) - pow($x-&gt;x_somatoria_invest_publicidade, 2));

		return $b;
	}

	/**
	 * Método para a identificação do valor de r quadrado, onde veremos que conforme o valor do índice teremos o nível de confiabilidade do modelo.
	 */
	public function getValorRQuadrado()
	{
		$x  = $this-&gt;getValoresInvestimentosX();
		$y  = $this-&gt;getValoresVendasY();
		$n  = $this-&gt;getNumVendas();
		$xy = $this-&gt;getValorXY();	

		$r = (($n * $xy) - ($x-&gt;x_somatoria_invest_publicidade * $y-&gt;y_somatoria_vendas)) / (sqrt(($n * $x-&gt;x_quadrado) - pow($x-&gt;x_somatoria_invest_publicidade, 2)) * sqrt(($n * $y-&gt;y_quadrado) - pow($y-&gt;y_somatoria_vendas, 2)));

		$r_quadrado = pow($r, 2);

		return $r_quadrado;
	}

	/**
	 * Método para obteção de uma string contendo a fórmula do modelo.
	 */
	public function getStringFormulaModeloPrevisor()
	{
		$a = $this-&gt;getValorEquacaoA();
		$b = $this-&gt;getValorEquacaoB();

		$string = "y = " . number_format($a, 4, ",", "") . " + " . number_format($b, 4, ",", "") . ".x";

		return $string;
	}

	/**
	 * Método que capta um dado valor em investimento de publicidade, e por meio do nosso modelo, retorna a previsão das vendas.
	 */
	public function getValorSimuladoVendas($valor_invest_publicidade)
	{
		$a = $this-&gt;getValorEquacaoA();
		$b = $this-&gt;getValorEquacaoB();

		$y = $a + ($b * $valor_invest_publicidade);		

		return $y; // Nosso valor estimado das vendas.
	}
}</pre>
<p>Veja um exemplo de utilização da classe:</p>
<pre class="brush: php; gutter: true; first-line: 1">$preview = new PrevisaoVendas();

$preview-&gt;getStringFormulaModeloPrevisor(); // Irá nos retornar a fórmula.
$preview-&gt;getValorRQuadrado();              // Valor do r quarado com a precisão do nosso modelo.
$preview-&gt;getValorSimuladoVendas(10.0);     // Retorna o valor das vendas, se no caso, invesrtirmos $ 10,00 em propaganda.</pre>
<p>Então amigos, é isso ai, espero que vocês tenham gostado da simplória abordagem. Eu gostaria muito de saber das experiências de vocês, então fiquem a vontade para comentar!</p>
<p>&nbsp;</p>
<p><strong>Referências:</strong></p>
<ul>
<li><a href="http://tas.eti.br/blog/wp-content/uploads/2012/01/Análise-de-Regressão-aplicação-a-custos.ppt" target="_blank">Análise de Regressão &#8211; Slides</a></li>
<li><a href="http://pt.wikipedia.org/wiki/Coeficiente_de_correla%C3%A7%C3%A3o_de_Pearson" target="_blank">Wikipedia &#8211; Coeficiente de Correlação de Person</a></li>
<li><a href="http://www.php.net/manual/pt_BR/function.pow.php" target="_blank">PHP Documentation &#8211; Função pow()</a></li>
<li><a href="http://www.php.net/manual/pt_BR/function.sqrt.php" target="_blank">PHP Documentation &#8211; Função sqrt()</a></li>
<li><a href="http://php.net/manual/pt_BR/function.array-combine.php" target="_blank">PHP Documentation &#8211; Função array_combine()</a></li>
<li><a href="http://www.php.net/manual/pt_BR/function.array-sum.php" target="_blank">PHP Documentation &#8211; Função array_sum()</a></li>
</ul>
<p>Abraços,</p>
<p><a title="Quem é o autor desse blog?" href="http://tas.eti.br/blog/sobre/" target="_blank">Tiago</a>.</p>
<div style="float: left; margin-left: 10px;"><a href="http://twitter.com/share?url=http://tas.eti.br/blog/2012/01/calculando-previsao-de-vendas-com-php-e-postgresql/&via=tiagotas&text=Calculando previsão de vendas com PHP e PostgreSQL&related=:&lang=en&count=horizontal" class="twitter-share-button" onclick="javascript:_gaq.push(['_trackSocial", "twitter", "tweet"]);">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="AWD_like_button "><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftas.eti.br%2Fblog%2F2012%2F01%2Fcalculando-previsao-de-vendas-com-php-e-postgresql%2F&amp;send=false&amp;layout=standard&amp;width=200&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font=arial&amp;height=40" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:40px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://tas.eti.br/blog/2012/01/calculando-previsao-de-vendas-com-php-e-postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adeus 2011, que venha 2012!</title>
		<link>http://tas.eti.br/blog/2012/01/adeus-2011-que-venha-2012/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=adeus-2011-que-venha-2012</link>
		<comments>http://tas.eti.br/blog/2012/01/adeus-2011-que-venha-2012/#comments</comments>
		<pubDate>Sun, 01 Jan 2012 03:01:59 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[Cotidiano]]></category>

		<guid isPermaLink="false">http://tas.eti.br/blog/?p=907</guid>
		<description><![CDATA[Olá novamente meus caros amigos! Este é o meu primeiro post de 2012! E primeiramente gostaria de agradecer a todos vocês que vem acompanhando meu trabalho desde o começo, nesses 4 meses  de blog, e digo que nesse curto período de tempo já obtive uma ótima experiência compartilhando um pouco do meu conhecimento e dia [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-top */
google_ad_slot = "2716329990";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<p>Olá novamente meus caros amigos!</p>
<p>Este é o meu primeiro post de 2012! E primeiramente gostaria de agradecer a todos vocês que vem acompanhando meu trabalho desde <a title="Meu primeiro post!" href="http://tas.eti.br/blog/2011/09/comecando/" target="_blank">o começo</a>, nesses 4 meses  de blog, e digo que nesse curto período de tempo já obtive uma ótima experiência compartilhando um pouco do meu conhecimento e dia a dia aqui com vocês.</p>
<p style="text-align: center;"><a href="http://tas.eti.br/blog/wp-content/uploads/2011/12/feliz-ano-novo.jpg"><img class="aligncenter  wp-image-908" title="feliz-ano-novo" src="http://tas.eti.br/blog/wp-content/uploads/2011/12/feliz-ano-novo.jpg" alt="" width="252" height="242" /></a></p>
<p>Neste novo ano que se inicia minha vida passará por grandes mudanças, estou deixando a vida corporativa para me dedicar a carreira acadêmica, como vocês já devem ter visto no post sobre <a title="Veja o post de quando entrei no mestrado" href="http://tas.eti.br/blog/2011/12/mestrado-na-ufscar-to-dentro/" target="_blank">meu mestrado</a>, e assim estou finalizando 2011 muito feliz e realizado, apesar de não ter sido um dos anos mais produtivos da minha vida, no entanto tenho a esperança de agora em 2012 poderei realizar tudo que sonhei. Tenho certeza que meu trabalho na UFSCar vai render bons frutos e me colocar onde eu sempre quis estar.</p>
<p>Quanto ao blog acredito que irei blogar o resto da vida, a experiência é fantástica e animadora quando se começa a colher os resultados do trabalho, e estou me referindo ao reconhecimento e renome que esta atividade traz. E falando mais sobre o blog, eu fiz uma especie de &#8220;raio-x&#8221; dos resultados e coloquei abaixo, e dedico o sucesso a você, meu caro leitor que acompanha meu trabalho!</p>
<p>&nbsp;</p>
<p><strong>O Blog em Números</strong></p>
<p>Separei para vocês alguns números do blog, não são exagerados mas considero um bom resultado. Hoje estamos com cerca de 40 posts publicados com conteúdos novos ou releituras de temas mais batidos, além de mais de 90 rascunhos já titulados de assuntos que pretendo tratar aqui com vocês! E claro irão existir muitos que ainda virão no decorrer do ano.</p>
<p>Quanto ao tráfego não tenho do que reclamador em termos de números, estamos crescendo bem! Segundo o Google Analytics, em torno de <strong>150%</strong> ao mês em <strong>visitas únicas</strong>, no mês de dezembro foram <strong>700</strong>! As visualizações de página também evoluem de acordo, e posso dizer que o plugin do WordPress chamado <a title="Veja o site do Plugin!" href="http://alphasis.info/developments/wordpress-plugins/related-posts-via-categories/" target="_blank">Related Posts via Categories</a> ajudou muito, pois além de baixar a taxa de rejeição de cerca de <strong>70% para 49%</strong> no mesmo período, ainda expandiu as pageviews para mais de <strong>2000</strong>!</p>
<p>Tenho que destacar também a indexação dos <a title="Veja a lista de posts publicados!" href="http://tas.eti.br/blog/category/postgresql/" target="_blank">posts sobre PostgreSQL</a> por parte do <a title="Veja outros blogs indexados!" href="http://planeta.postgresql.org.br/" target="_blank">Planeta PostgreSQL</a>. Além de ajudar muito na geração de novas visitas, também é uma honra, já que agora estamos dentro da Comunidade Oficial do PostgreSQL no Brasil, estou ficando muito feliz pois os dados revelam que o pessoal tem gostado da minha abordagem sobre o tema!</p>
<p>No entanto nem tudo são flores, existem dados que quero mudar em 2012, um deles é a origem do tráfego, sendo que hoje cerca de 80% é provida pelos sites de referência, e ai incluem-se também as redes sociais, e a porcentagem de visitas oriundas do Google é de  apenas 10% das visitas, e ainda o dado mais alarmante é que em todo o período do blog ainda não registrei visitas de outros buscadores, apesar de todos os relatórios apontarem que todo conteúdo está indexado. Dessa maneira eu gostaria de inverter essa proporção, para o blog &#8220;andar mais sozinho&#8221;.</p>
<p>Outro ponto que está me incomodando muito é a nota do Page Rank, que atualmente é de um <strong>bem redondo ZERO</strong>! Estou trabalhando para mudar, no fechamento do ano a Ferramenta para Webmasters do Google me retornava que haviam cerca de 1000 links para os conteúdos do blog, e espero que este ano suba cada vez mais!</p>
<p>&nbsp;</p>
<p><strong>O que esperar para 2012?</strong></p>
<p>Como mencionei acima tenho muita coisa para escrever ainda e compartilhar com vocês! E espero que o conteúdo seja tão relevante para vocês quando é para mim! Sendo assim, o que esperar do blog para 2012? Um novo layout, a abordagem de <strong>novos temas</strong> como Java e <a title="Veja os posts sobre a Zend Framework" href="http://tas.eti.br/blog/category/php/zend-framework/" target="_blank">Zend Framework</a>. Também estou pensando seriamente em submeter alguns trabalhos no formato de palestras para os simpósios semestrais da <a title="Veja mais sobre a Fatec Mococa neste post!" href="http://tas.eti.br/blog/2011/11/fatec-mococa-12-melhor-faculdade-publica-do-pais/" target="_blank">Fatec Mococa</a> (o que vocês acham disso fatecanos?) e claro disponibilizar o material aqui.</p>
<p>Assim espero que vocês que já acessam continuem e que possam trazer novos visitandes compartilhando do nosso conhecimento!</p>
<p>Abraços e um Feliz Ano Novo!</p>
<p><a title="Quem é o autor desse blog?" href="http://tas.eti.br/blog/sobre/" target="_blank">Tiago</a>.</p>
<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-button */
google_ad_slot = "5761791599";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<div style="float: left; margin-left: 10px;"><a href="http://twitter.com/share?url=http://tas.eti.br/blog/2012/01/adeus-2011-que-venha-2012/&via=tiagotas&text=Adeus 2011, que venha 2012!&related=:&lang=en&count=horizontal" class="twitter-share-button" onclick="javascript:_gaq.push(['_trackSocial", "twitter", "tweet"]);">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="AWD_like_button "><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftas.eti.br%2Fblog%2F2012%2F01%2Fadeus-2011-que-venha-2012%2F&amp;send=false&amp;layout=standard&amp;width=200&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font=arial&amp;height=40" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:40px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://tas.eti.br/blog/2012/01/adeus-2011-que-venha-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Manipulando Triggers no PostgreSQL</title>
		<link>http://tas.eti.br/blog/2011/12/manipulando-triggers-no-postgresql/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=manipulando-triggers-no-postgresql</link>
		<comments>http://tas.eti.br/blog/2011/12/manipulando-triggers-no-postgresql/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 03:01:53 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[tutoriais]]></category>

		<guid isPermaLink="false">http://tas.eti.br/blog/?p=100</guid>
		<description><![CDATA[Olá novamente caros leitores! Primeiramente me desculpem pela demora para liberar uma nova postagem sobre o Postgres, é que as últimas semanas foram muito movimentadas, realizei minha entrevista na UFSCar para o ingresso no programa de mestrado do Departamento de Computação e ainda na semana retrasada recebi a notícia da minha aprovação, então imaginem o [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-top */
google_ad_slot = "2716329990";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<p>Olá novamente caros leitores!</p>
<p>Primeiramente me desculpem pela demora para liberar uma nova <a title="Veja mais posts sobre o PostgreSQL" href="http://tas.eti.br/blog/category/postgresql/" target="_blank">postagem sobre o Postgres</a>, é que as últimas semanas foram muito movimentadas, realizei minha entrevista na UFSCar para o ingresso no programa de <a title="Veja meu post sobre a entrada no mestrado" href="http://tas.eti.br/blog/2011/12/mestrado-na-ufscar-to-dentro/" target="_blank">mestrado</a> do Departamento de Computação e ainda na semana retrasada recebi a notícia da minha aprovação, então imaginem o tamanho da felicidade e a correria com as festas de fim de ano.</p>
<p style="text-align: center;"><a style="text-align: center;" href="http://tas.eti.br/blog/wp-content/uploads/2011/11/logo_w_elephant.png"><img class="aligncenter" style="border-style: initial; border-color: initial;" title="logo_w_elephant" src="http://tas.eti.br/blog/wp-content/uploads/2011/11/logo_w_elephant.png" alt="" width="250" height="198" /></a></p>
<p>Bom, mas vamos ao que interessa, hoje irei falar sobre as triggers, ou funções de gatilho, como você queria chamar. Uma das coisas mais interessantes da implementação das funções no <a title="Aqui você pode encontrar mais conteúdo!" href="http://tas.eti.br/blog/category/postgresql/" target="_blank">Postgres</a> é que você pode escolher qual linguagem vai usar para programar sua trigger! Isso mesmo, então antes de mais nada, eu separei abaixo a lista de algumas linguagens, e o link para mais informações sobre elas, veja:</p>
<ul>
<li><a title="Manual da Linguagem em Português" href="http://pgdocptbr.sourceforge.net/pg80/plpgsql.html" target="_blank">PL/PGSQL</a></li>
<li><a title="Mais informações sobre a PL/TCL (in english)" href="http://www.postgresql.org/docs/devel/static/pltcl.html" target="_blank">PL/Tcl</a></li>
<li><a title="Mais informações sobre a PL/Perl (in english)" href="http://www.postgresql.org/docs/9.1/interactive/plperl.html" target="_blank">PL/Perl</a></li>
<li><a title="Mais informações sobre a PL/Python (in english)" href="http://www.postgresql.org/docs/current/static/plpython.html" target="_blank">PL/Python</a></li>
<li><a title="Veja mais neste link" href="http://pgfoundry.org/projects/pljava/" target="_blank">PL/Java</a> (veja <a title="Na versão 8.3 do PostgreSQL" href="http://marcelocosta.wordpress.com/2008/02/19/pljava-postgresql-83/" target="_blank">aqui</a> ou <a href="http://seiti.eti.br/blog/2009/instalando-pljava-no-postgresql" target="_blank">aqui</a> como instalar a <a title="Download do pacote de instalação aqui!" href="http://pgfoundry.org/projects/pljava/" target="_blank">PL/Java</a>)</li>
</ul>
<p>Agora que você já sabe dessa maravilha do Postgres irei dizer que aqui, iremos exemplificar as triggers <strong>utilizando a PL/pgSQL</strong>. Mas antes da prática no código fonte, iremos trabalhar um pouco sobre a definição e funcionamento das triggers no PostgreSQL.</p>
<p>Você deve saber que os nossos gatilhos funcionam baseados em eventos, dois: <strong>before</strong> (antes de alguma coisa) e <strong>after</strong> (depois de alguma coisa). Explicando: você pode determinar que uma trigger dispare após (after) a inserção em determinada tabela do banco ou antes (before) da tal inserção, por exemplo.</p>
<p>É muito importante que você dê uma olhada abaixo na lista de variáveis que podem ser utilizadas dentro da estrutura da função da sua trigger, vale a pena dar uma lida, no entanto existem duas que a leitura é obrigatoria, que são a <strong>new</strong> e a <strong>old</strong>. Elas são usadas da seguinte maneira:</p>
<ul>
<li><strong>NEW</strong>: No caso da trigger ser disparada por um INSERT a variável NEW irá abrigar os valores a ser inseridos, e caso seja um evento do tipo UPDATE, NEW irá conter a nova versão dos valores a serem atualizados (veja o exemplo no código abaixo).</li>
<li><strong>OLD</strong>: Esta variável é utilizada no caso do evento DELETE armazena os dados que estão sendo excluídos, e no caso do UPDATE a versão antiga dos dados.</li>
</ul>
<p>O acesso dos dados se dá em ambas as variáveis dessa maneira: NEW.COD_CLIENTE, por exmplo. Abaixo você verá o exemplo de uma trigger.</p>
<p>&nbsp;</p>
<p><strong>Outras variáveis especiais que você pode usar:</strong></p>
<ul>
<li><strong>TG_NAME</strong>: Contém o nome do trigger que foi disparado.</li>
<li><strong>TG_WHEN</strong>: Contem quando o evento foi disparado, sendo BEFORE ou AFTER.</li>
<li><strong>TG_LEVEL</strong>: Diz em qual ponto da trigger.</li>
<li><strong>TG_OP</strong>: Tipo de operção que está sendo executada: INSERT, UPDATE ou DELETE.</li>
<li><strong>TG_RELID</strong>: Contém a ID do objeto que está disparando o gatilho.</li>
<li><strong>TG_RELNAME</strong>: Nome da tabela que disparou o gatilho (obsoleto).</li>
<li><strong>TG_TABLE_NAME</strong>: Nome da tabela que disparou o gatilho.</li>
<li><strong>TG_NAME_SCHEMA</strong>: Nome do <a title="Veja meu post sobre Schemas!" href="http://tas.eti.br/blog/2011/09/utilizando-schemas-no-postgresql/" target="_blank">schema</a> onde está a tabela que disparou a trigger.</li>
<li><strong>TG_NARGS</strong>: Número de argumentos fornecidos para a Stored Function do trigger.</li>
<li><strong>TG_ARGV[]</strong>: Os argumentos que foram fornecidos.</li>
</ul>
<p>&nbsp;</p>
<p><strong>Perguntas (quase) nunca feitas sobre triggers:</strong></p>
<ul>
<li><em>Sabe-se que pode atrelar mais de uma trigger por tabela, então qual a ordem de execução das triggers?</em><br />
R: A ordem de execução é alfabética.</li>
<li><em>Triggers podem ser recursivas?</em><br />
R: Sim! Os gatilhos podem executar comandos SQL, e os mesmos podem disparar outras triggers. Este cenário é conhecido como <strong>cascateamento de triggers</strong>, assim pode ser que a trigger passe a se &#8220;auto disparar&#8221;, ou seja, chamadas recursivas da própria trigger, <strong>fique atento a recursões infinitas!</strong></li>
</ul>
<p>&nbsp;</p>
<p><strong>Triggers na Prática</strong></p>
<p>Agora vamos a parte pática irei realizar um único exemplo, <a title="Mais exemplos do funcionamento das triggers" href="http://ecoapre.blogspot.com/2011/12/disparadores-triggers-en-postgresql.html" target="_blank">neste link</a> você e encontrar mais exemplos de triggers. No nosso, considere as duas tabelas abaixo:</p>
<pre class="brush: sql; gutter: true; first-line: 1">CREATE TABLE funcionarios (
	ID_FUNCIONARIO SERIAL,
	NOME VARCHAR(255),
	IDADE INTEGER,
	FUNCAO VARCHAR(150),
	PRIMARY KEY(ID_FUNCIONARIO)
);

CREATE TABLE FUNCIONARIOS_LOG (
	COD_ALTERACAO SERIAL,
	USUARIO VARCHAR(150) NOT NULL,
	TIPO_ACAO VARCHAR(25) NOT NULL,
	DATA_ALTERACAO TIMESTAMP NOT NULL,
	PRIMARY KEY (COD_ALTERACAO)
);</pre>
<p>Repare que na construção da tabela<strong> funcionarios</strong> eu não coloquei nenhuma regra de validação, como por exemplo not null, foi de propósito! Nossa trigger irá realizar a (simples) validação da entrada de dados na tabela e em seguida guardar que tipo de operação foi feita, por quem e a data na tabela <strong>funcionarios_log</strong>.</p>
<p>Agora a construção da <strong>stored function</strong> que será &#8220;chamada&#8221; pela trigger e sua agregação como trigger:</p>
<pre class="brush: sql; gutter: true; first-line: 1">CREATE FUNCTION valida_dados_funcionario() RETURNS TRIGGER AS $valida_dados_funcionario$
BEGIN
	IF NEW.NOME IS NULL THEN
		RAISE EXCEPTION 'Por Favor, digite o nome do funcionario!';
	END IF;

	IF NEW.IDADE IS NULL THEN
		RAISE EXCEPTION 'Por favor, informe a idade!';
	END IF;

	IF NEW.IDADE &lt; 0 THEN
		RAISE EXCEPTION 'Desculpe, o funcionario não pode ter % anos', NEW.IDADE;
	END IF;

	IF NEW.FUNCAO IS NULL THEN
		RAISE EXCEPTION 'Por favor, informe qual a função do funcinário!';
	END IF;

	-- Aqui iremos gravar no log o tipo de ação que foi realizada
	INSERT INTO FUNCIONARIOS_LOG (USUARIO, TIPO_ACAO, DATA_ALTERACAO) VALUES (CURRENT_USER, TG_OP, CURRENT_TIMESTAMP);

	RETURN NEW;
END;
$valida_dados_funcionario$
LANGUAGE plpgsql;</pre>
<p>Note que realizei as devidas validações utilizando o operador NEW, porque agora iremos atrelar a trigger a tabela dizendo que ela será executada durante um insert ou update. Observe também que o declaramos um return &#8220;trigger&#8221; e especificamos os delimitadores $$, você pode encontrar mais informações sobre a estruturação de procedures de triggers na <a title="Como construir trigger procedures" href="http://www.postgresql.org/docs/8.0/static/plpgsql-trigger.html" target="_blank">documentação do PostgreSQL</a>, e por fim note que especificamos qual<strong> linguagem é utilizad</strong>a para a construção da trigger, no caso <strong>plpgsql</strong>.</p>
<p>Veja abaixo como definimos a trigger, chamando a procedure que construímos anteriormente:</p>
<pre class="brush: sql; gutter: true; first-line: 1">CREATE TRIGGER validacao_insert BEFORE INSERT OR UPDATE ON funcionarios
FOR EACH ROW EXECUTE PROCEDURE valida_dados_funcionario();</pre>
<p><strong>Pronto</strong>! Agora sua trigger já está funcionando nos eventos INSERT e UPDATE na tabela funcionario, faça os testes!</p>
<p>Agora para ilustrar ainda mais nosso exemplo irei alterar o nome da trigger, veja:</p>
<pre class="brush: sql; gutter: true; first-line: 1">ALTER TRIGGER validacao_insert ON funcionarios RENAME TO a_validacao_insert</pre>
<p>Para desabilitar (para habilitar troque o DISABLE por ENABLE) uma determinada trigger:</p>
<pre class="brush: sql; gutter: true; first-line: 1">ALTER TABLE  funcionarios DISABLE TRIGGER a_validacao_insert</pre>
<p>Ou para <strong>desabilitar todas</strong> as triggers de uma tabela:</p>
<pre class="brush: sql; gutter: true; first-line: 1">ALTER TABLE  funcionarios DISABLE TRIGGER ALL</pre>
<p>Agora, se eu desejar remover a trigger:</p>
<pre class="brush: sql; gutter: true; first-line: 1">DROP TRIGGER a_validacao_insert ON funcionarios</pre>
<p>Repare que não postei a imagem dos resultados para induzir <strong>você a testar o código</strong>! Faça os scripts de insert e update e veja as saídas produzidas pelo SGBD, acredito que você irá se divertir muito com os resultados!</p>
<p>Se você quiser saber mais sobre os triggers e sobre o <a title="Existem muito mais posts para você ler aqui!" href="http://tas.eti.br/blog/category/postgresql/" target="_blank">PostgreSQL</a> eu recomendo um livro (se você também for chegado a papel) que utilizei na minha <a title="Neste post você pode fazer o download dela!" href="http://tas.eti.br/blog/2011/12/download-da-minha-monografia/" target="_blank">monografia</a>, intitulado <em>PostgreSQL: Guia do Desenvolvedor</em>, de André Milani.</p>
<p>Como você que leu (conseguiu chegar até aqui) triggers são um assunto muito extenso para se tratar aqui no blog, <strong>recomendo que você leia as referências</strong> e pesquisa mais sobre o assunto, é um tema muito interessante e útil para o dia a dia!</p>
<p>&nbsp;</p>
<p><strong>Referências:</strong></p>
<ul>
<li><a href="http://www.postgresql.org/docs/8.1/static/triggers.html" target="_blank">PostgreSQL Documentation &#8211; Triggers</a></li>
<li><a title="Manual em Inglês" href="http://www.postgresql.org/docs/8.0/static/plpgsql-trigger.html" target="_blank">PostgreSQL Documentation &#8211; Trigger Procedures</a></li>
<li><a href="http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/Fun%C3%A7%C3%B5es_Definidas_pelo_Usu%C3%A1rio_e_Triggers/Triggers" target="_blank">Wikibooks &#8211; PostgreSQL &#8211; Triggers</a></li>
<li><a href="http://imasters.com.br/artigo/10644/postgresql/triggers_no_postgresql/" target="_blank">iMasters &#8211; Triggers no PostgreSQL</a></li>
<li><a href="http://ecoapre.blogspot.com/2011/12/disparadores-triggers-en-postgresql.html" target="_blank">Ecoapre &#8211; Disparadores triggers en PostgreSQL (en espanhol)</a></li>
</ul>
<p>Abraços,</p>
<p><a title="Quem é o autor desse blog?" href="http://tas.eti.br/blog/sobre/" target="_blank">Tiago</a>.</p>
<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-button */
google_ad_slot = "5761791599";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<div style="float: left; margin-left: 10px;"><a href="http://twitter.com/share?url=http://tas.eti.br/blog/2011/12/manipulando-triggers-no-postgresql/&via=tiagotas&text=Manipulando Triggers no PostgreSQL&related=:&lang=en&count=horizontal" class="twitter-share-button" onclick="javascript:_gaq.push(['_trackSocial", "twitter", "tweet"]);">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="AWD_like_button "><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftas.eti.br%2Fblog%2F2011%2F12%2Fmanipulando-triggers-no-postgresql%2F&amp;send=false&amp;layout=standard&amp;width=200&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font=arial&amp;height=40" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:40px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://tas.eti.br/blog/2011/12/manipulando-triggers-no-postgresql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Download da minha Monografia</title>
		<link>http://tas.eti.br/blog/2011/12/download-da-minha-monografia/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=download-da-minha-monografia</link>
		<comments>http://tas.eti.br/blog/2011/12/download-da-minha-monografia/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 05:24:30 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[fatec]]></category>

		<guid isPermaLink="false">http://tas.eti.br/blog/?p=892</guid>
		<description><![CDATA[Olá meus Leitores! Estou disponibilizando para vocês o download da minha monografia, que apresentei para a obtenção do título de Tecnólogo em Informática para Gestão de Negócios pela Fatec Mococa em 2010. Claro que o objetivo de eu estar colocando ela aqui é para consulta e pesquisa, nada de plágio porque nenhum professor é bobo [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-top */
google_ad_slot = "2716329990";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<p>Olá meus Leitores!</p>
<p>Estou disponibilizando para vocês o <a title="Aquivo PDF, abre em nova janela" href="http://tas.eti.br/blog/wp-content/uploads/2011/12/Monografia-Tiago-Antônio-da-Silva.pdf" target="_blank">download da minha monografia</a>, que apresentei para a obtenção do título de Tecnólogo em Informática para Gestão de Negócios pela <a title="Veja o post que fiz sobre a Fatec Mococa" href="http://tas.eti.br/blog/2011/11/fatec-mococa-12-melhor-faculdade-publica-do-pais/" target="_blank">Fatec Mococa</a> em 2010.</p>
<p>Claro que o objetivo de eu estar colocando ela aqui é para consulta e pesquisa, nada de plágio porque nenhum professor é bobo ok?</p>
<p style="text-align: center;"><a href="http://tas.eti.br/blog/wp-content/uploads/2011/11/FATEC-logo1.jpg"><img class="size-full wp-image-600 aligncenter" title="FATEC-logo1" src="http://tas.eti.br/blog/wp-content/uploads/2011/11/FATEC-logo1.jpg" alt="" width="288" height="166" /></a></p>
<p>O trabalho intitulado &#8220;<em>E-business, uma abordagem sobre o business-to-business com o desenvolvimento de uma plataforma de negócios baseado na metodologias Web 2.0</em>&#8220;, sob a orientação do <a title="Link para o currículo Lattes" href="http://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4742690H9" target="_blank">Prof. MSc. Geraldo Henrique Neto</a>.</p>
<p>Veja o resumo do trabalho:</p>
<blockquote>
<pre>Este estudo busca realizar uma investigação sobre o funcionamento da classe B2B
(Business-to-Business), termo contido no conceito de e-Business, que por sua vez
foi abordado em uma análise que teve por escopo identificar e expor termos como
e-ERP, e-CRM, e-SCM, e-Procurement, e-BI, e e-Commerce. Em seguida investigase
os impactos da implantação do e-Business na organização, com ênfase na classe
B2B, quando aborda-se ainda os aspectos envolvidos na terceirização da
implantação do conceito. E por fim, como componente da análise busca-se
desenvolver um modelo de plataforma B2B on-line, que sugere uma alternativa para
as interações entre empresas, ou seja, a empresa com seus fornecedores ou
parceiros, durante o desenvolvimento buscou-se utilizar metodologias de
desenvolvimento web 2.0, juntamente com alternativas open source, tais como PHP
(Hypertext Processor) e PostgreSQL.
<strong>Palavras-chave</strong>: e-Business. Business-to-Business. Modelo. Plataforma. Web 2.0.</pre>
</blockquote>
<p>Você pode fazer o download <a title="Aquivo PDF, abre em nova janela." href="http://tas.eti.br/blog/wp-content/uploads/2011/12/Monografia-Tiago-Antônio-da-Silva.pdf" target="_blank">clicando aqui</a>!</p>
<p>Espero que seja útil!</p>
<p>Abraços,</p>
<p><a title="Quem é o autor desse blog?" href="http://tas.eti.br/blog/sobre" target="_blank">Tiago</a>.</p>
<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-button */
google_ad_slot = "5761791599";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<div style="float: left; margin-left: 10px;"><a href="http://twitter.com/share?url=http://tas.eti.br/blog/2011/12/download-da-minha-monografia/&via=tiagotas&text=Download da minha Monografia&related=:&lang=en&count=horizontal" class="twitter-share-button" onclick="javascript:_gaq.push(['_trackSocial", "twitter", "tweet"]);">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="AWD_like_button "><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftas.eti.br%2Fblog%2F2011%2F12%2Fdownload-da-minha-monografia%2F&amp;send=false&amp;layout=standard&amp;width=200&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font=arial&amp;height=40" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:40px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://tas.eti.br/blog/2011/12/download-da-minha-monografia/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mestrado na UFSCar? Tô dentro!</title>
		<link>http://tas.eti.br/blog/2011/12/mestrado-na-ufscar-to-dentro/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=mestrado-na-ufscar-to-dentro</link>
		<comments>http://tas.eti.br/blog/2011/12/mestrado-na-ufscar-to-dentro/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 05:24:27 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[Mestrado]]></category>
		<category><![CDATA[UFSCar]]></category>

		<guid isPermaLink="false">http://tas.eti.br/blog/?p=876</guid>
		<description><![CDATA[Meus Amigos! Hoje é um dia de muita felicidade! Hoje meu nome estava entre os que foram aprovados para o Programa de Mestrado 2012 do Departamento de Computação da Universidade Federal de São Carlos! Não tenho palavras para representar a alegria que sinto! Depois de tantas batalhas, paciência, estudo, ansiedade, enfim a recompensa! Irei fazer [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-top */
google_ad_slot = "2716329990";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<p>Meus Amigos!</p>
<p>Hoje é um dia de muita felicidade! Hoje meu nome estava entre os que foram aprovados para o <a title="Mais informações sobre o Processo Seletivo" href="http://ppgcc.dc.ufscar.br/mestrado-1/selecao-para-o-mestrado/processo-seletivo" target="_blank">Programa de Mestrado 2012</a> do <a title="Veja o site do Departamento de Computação" href="http://ppgcc.dc.ufscar.br/" target="_blank">Departamento de Computação</a> da<a title="Conheça mais sobre a UFSCar" href="http://ufscar.br/" target="_blank"> Universidade Federal de São Carlos</a>!</p>
<p>Não tenho palavras para representar a alegria que sinto! Depois de tantas batalhas, paciência, <a title="Como foi o Poscomp 2011" href="http://tas.eti.br/blog/2011/10/o-dia-seguinte-do-poscomp-2011/" target="_blank">estudo</a>, ansiedade, enfim a recompensa! Irei fazer mestrado em <a title="Mais informações sobre a linha de pesquisa que irei atuar" href="http://ppgcc.dc.ufscar.br/linhas-de-pesquisa/engenharia-de-software" target="_blank">Engenharia de Software</a>, realmente estou muito feliz!</p>
<p style="text-align: center;"><a href="http://tas.eti.br/blog/wp-content/uploads/2011/12/LogoUfscar.gif"><br />
</a><a href="http://tas.eti.br/blog/wp-content/uploads/2011/12/ufscar.jpg"><img class="aligncenter size-full wp-image-879" title="ufscar" src="http://tas.eti.br/blog/wp-content/uploads/2011/12/ufscar.jpg" alt="" width="320" height="222" /></a><a href="http://tas.eti.br/blog/wp-content/uploads/2011/12/UFSCar.jpg"><br />
</a></p>
<p>No momento em que soube pelo da minha aprovação pelo site do Departamento, e logo após minha vibração (!!!) liguei para todos os que me ajudaram e contribuíram para minha chegada até a UFSCar! Um abraço especial para Prof. Dr. Darlan Marcelo Delgado que foi o responsável pela minha iniciação científica, para o Prof. Dr. Jean Miler Scatena  que me orientou muito e forneceu cartas de recomendação, para o meu orientador nos tempos de monografia, Prof. MSc Geraldo Henrique Neto que aconselhou sobre a vida acadêmica e que sempre esteve presente quando precisei de cartas de recomendação e para o Prof. MSc. Fernando Duarte que me apoiou e me incentivou especialmente para o mestrado na UFSCar, também fornecendo cartas de recomendação. Meu muito obrigado a todos vocês e a todos os outros professores que fizeram parte até agora da minha trajetória acadêmica.</p>
<p>E claro não posso deixar de agradecer, do fundo do meu coração minha Mãe, Dona Helena, Meu Pai Sr Antônio e minha namorada Letícia que tanto me apoiaram na fase de estudos e seleção, além dos meus amigos mais próximos que sempre ouviram meus planos sobre a vida acadêmica, mais uma vez muito obrigado!</p>
<p style="text-align: center;"><a href="http://tas.eti.br/blog/wp-content/uploads/2011/12/UFSCar.jpg"><img class="size-full wp-image-878 aligncenter" style="border-style: initial; border-color: initial;" title="UFSCar" src="http://tas.eti.br/blog/wp-content/uploads/2011/12/UFSCar.jpg" alt="" width="400" height="300" /></a></p>
<p>Realmente agora é um tempo de muita alegria, mas também de pensar em todo o trabalho de pesquisa que terei pela frente, e é claro ele também será postado aqui junto com o meu dia a dia na Universidade! Espero que todos que estejam acompanhando o blog apreciem essa minha nova empreitada e sorte a todos nós em 2012, que esse ano já vai se iniciar prometendo muito!</p>
<p>Muito obrigado a todos que estavam torcendo por mim!</p>
<p>Abraços,</p>
<p><a title="Quem faz o blog?" href="http://tas.eti.br/blog/sobre/" target="_blank">Tiago.</a></p>
<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-button */
google_ad_slot = "5761791599";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<div style="float: left; margin-left: 10px;"><a href="http://twitter.com/share?url=http://tas.eti.br/blog/2011/12/mestrado-na-ufscar-to-dentro/&via=tiagotas&text=Mestrado na UFSCar? Tô dentro!&related=:&lang=en&count=horizontal" class="twitter-share-button" onclick="javascript:_gaq.push(['_trackSocial", "twitter", "tweet"]);">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="AWD_like_button "><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftas.eti.br%2Fblog%2F2011%2F12%2Fmestrado-na-ufscar-to-dentro%2F&amp;send=false&amp;layout=standard&amp;width=200&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font=arial&amp;height=40" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:40px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://tas.eti.br/blog/2011/12/mestrado-na-ufscar-to-dentro/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Vamos aprender sobre a Zend Framework?</title>
		<link>http://tas.eti.br/blog/2011/12/vamos-aprender-sobre-a-zend-framework/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vamos-aprender-sobre-a-zend-framework</link>
		<comments>http://tas.eti.br/blog/2011/12/vamos-aprender-sobre-a-zend-framework/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 17:32:36 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[zend framework]]></category>

		<guid isPermaLink="false">http://tas.eti.br/blog/?p=873</guid>
		<description><![CDATA[Olá Amigos! Estou inalgurando uma nova seção de posts aqui no blog, futuramente irei postar sobre a Zend Framework também! Ah Tiago, mas porque a Zend? Simples: Foi a Framework que eu mais me afeiçoei (confesso que ainda tenho uma queda pela Symphony, mas o que me impedirá de postar sobre ela no futuro também?), [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-top */
google_ad_slot = "2716329990";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<p>Olá Amigos!</p>
<p>Estou inalgurando uma nova seção de posts aqui no blog, futuramente irei postar sobre a <a title="Veja mais informações no site da Zend!" href="http://framework.zend.com/" target="_blank">Zend Framework</a> também! Ah <a title="Quer saber quem sou eu?" href="http://tas.eti.br/blog/sobre/" target="_blank">Tiago</a>, mas porque a Zend? Simples: Foi a Framework que eu mais me afeiçoei (confesso que ainda tenho uma queda pela <a title="Vej o site da Symphony" href="http://www.symfony-project.org/" target="_blank">Symphony,</a> mas o que me impedirá de postar sobre ela no futuro também?), então aguardem que logo irei abordar ela por aqui também!</p>
<p>Acredito que ela será (e já é) um dos elementos chave para o fortalecimento (mais ainda) da comunidade PHP e para exaltar ainda mais a qualificação dos profissionais sérios da linguagem!</p>
<p>Os posts foram um dica do leitor <a title="Segue ele galera!" href="https://twitter.com/#!/junin_feda" target="_blank">@junin_feda </a>quando <a title="Veja o post sobre Certificação PHP" href="http://tas.eti.br/blog/2011/12/certificacao-php-agora-e-a-hora/" target="_blank">falei sobre certificação</a>, ele me indagou sobre a Zend, então decidi criar vergonha na cara de falar dela!</p>
<p style="text-align: center;"><a href="http://tas.eti.br/blog/wp-content/uploads/2011/12/logo-zend-framework.jpg"><img class="size-full wp-image-874 aligncenter" title="logo-zend-framework" src="http://tas.eti.br/blog/wp-content/uploads/2011/12/logo-zend-framework.jpg" alt="" width="282" height="190" /></a></p>
<p style="text-align: left;">Separei aqui as vídeo aulas do <a style="text-align: -webkit-auto;" href="http://gtivideoaulas.com/" target="_blank">Felipe Girotti</a><span class="Apple-style-span" style="text-align: -webkit-auto;"> que são muito boas mesmo! Já coloquei na ordem para facilitar, elas tem em torno de 20 minutos cada, vale muito a pena!</span></p>
<ol>
<li><a href="http://vimeo.com/22152252" target="_blank">Introdução a Zend Framework com Zend Tool</a></li>
<li><a href="http://vimeo.com/22510089" target="_blank">Zend Framework Estrutura</a></li>
<li><a href="http://vimeo.com/22788050" target="_blank">Zend Layout</a></li>
<li><a href="http://vimeo.com/23124857" target="_blank">Conexão com Banco de Dados com a Zend Framework</a></li>
<li><a href="http://vimeo.com/23505176" target="_blank">Models na Zend Framewok I</a></li>
<li><a href="http://vimeo.com/23723723" target="_blank">Models na Zend Framewok II</a></li>
<li><a href="http://vimeo.com/24044566" target="_blank">Models na Zend Framewok III</a></li>
<li><a href="http://vimeo.com/24700734" target="_blank">Trabalhando com a Zend Db Select</a></li>
<li><a href="http://vimeo.com/26451235" target="_blank">Mapeamento de Relacionamentos com Zend I</a></li>
<li><a href="http://vimeo.com/31592120" target="_blank">Mapeamento de Relacionamentos com Zend II</a></li>
<li><a href="http://vimeo.com/32350944" target="_blank">Introdução ao Zend Forms</a></li>
<li><a href="http://vimeo.com/34233534" target="_blank">Zend Forms II</a> (<em>update em 28/12/2011</em>)</li>
<li><a href="http://www.youtube.com/watch?v=BWUYXbobMLk" target="_blank">Decorators</a> (<em>update em 15/01/2012</em>)</li>
<li><a href="http://www.youtube.com/watch?v=kpAA9Dya7h0" target="_blank">Zend Forms III (Tradução)</a> <em>(update em 15/02/2012)</em></li>
</ol>
<p>Infelizmente ainda não tenho nenhum conteúdo meu para postar aqui no blog sobre a Zend, mas em breve (esperam para Janeiro) irei postar algo!</p>
<p>Então é isso ai! Espero que as aulas do Felipe sejam tão úteis para vocês quanto foram para mim!</p>
<p>Abraços,</p>
<p><a title="Quem é o autor desse blog?" href="http://tas.eti.br/blog/sobre/" target="_blank">Tiago</a>.</p>
<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-button */
google_ad_slot = "5761791599";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<div style="float: left; margin-left: 10px;"><a href="http://twitter.com/share?url=http://tas.eti.br/blog/2011/12/vamos-aprender-sobre-a-zend-framework/&via=tiagotas&text=Vamos aprender sobre a Zend Framework?&related=:&lang=en&count=horizontal" class="twitter-share-button" onclick="javascript:_gaq.push(['_trackSocial", "twitter", "tweet"]);">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="AWD_like_button "><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftas.eti.br%2Fblog%2F2011%2F12%2Fvamos-aprender-sobre-a-zend-framework%2F&amp;send=false&amp;layout=standard&amp;width=200&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font=arial&amp;height=40" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:40px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://tas.eti.br/blog/2011/12/vamos-aprender-sobre-a-zend-framework/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Certificação PHP, agora é a hora!</title>
		<link>http://tas.eti.br/blog/2011/12/certificacao-php-agora-e-a-hora/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=certificacao-php-agora-e-a-hora</link>
		<comments>http://tas.eti.br/blog/2011/12/certificacao-php-agora-e-a-hora/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 18:34:39 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[Carreira]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://tas.eti.br/blog/?p=496</guid>
		<description><![CDATA[Olá Amigos! Eu já estava estudando para a certificação PHP, em especial já estava lendo sobre as mudanças do PHP 5.3 e após a palestra do Klaus na PHP Conference 2011 me decidi a acelerar o processo para certificação. Na verdade a certificação PHP já faz parte um plano da minha &#8220;lista de certificações&#8221; que [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-top */
google_ad_slot = "2716329990";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<p>Olá Amigos!</p>
<p>Eu já estava estudando para a certificação PHP, em especial já estava lendo sobre as mudanças do PHP 5.3 e após a <a title="Aqui estão os slides da palestra!" href="http://speakerdeck.com/u/klaussilveira/p/preparando-se-para-a-prova-da-certificacao-zend-php-53" target="_blank">palestra</a> do <a title="Veja o twitter dele" href="http://twitter.com/klaussilveira" target="_blank">Klaus</a> na <a title="Veja meu post sobre o PHP Conference 2011" href="http://tas.eti.br/blog/2011/12/php-conference-2011-eu-fui/" target="_blank">PHP Conference 2011</a> me decidi a acelerar o processo para certificação.</p>
<p>Na verdade a certificação PHP já faz parte um plano da minha &#8220;lista de certificações&#8221; que também incluem Java e no futuro Oracle. Como os profissionais certificados são raros, em especial aqui no Brasil acredito que esse será um diferencial muito interessante para a minha carreira tanto no ramo acadêmico, quanto no ramo corporativo.</p>
<p style="text-align: center;"><a href="http://tas.eti.br/blog/wp-content/uploads/2011/12/zend-certified-engineer-530.jpg"><img class="size-full wp-image-856 aligncenter" title="zend-certified-engineer-530" src="http://tas.eti.br/blog/wp-content/uploads/2011/12/zend-certified-engineer-530.jpg" alt="" width="357" height="238" /></a></p>
<p>Pretendo realizar a prova no final de janeiro, e por enquanto, estou utilizando como meios de estudo o próprio <a title="De longe a melhor documentação!" href="http://br.php.net" target="_blank">Manual do PHP</a> e os simulados (muito bons!) do site <a title="Faça os simulados você também!" href="http://www.phpriot.com/quiz/" target="_blank">PHP Riot</a>, e claro que pretendo acessar o material de estudo fornecido pela Zend.</p>
<p>Uma das dicas muito interessantes que vi na palestra do Klaus foi sobre o &#8220;decoreba&#8221; que foi deixado de lado na prova da nova certificação &#8211; 5.3 &#8211; agora temos que resolver problemas mais familiares do dia a dia. O que na minha opinião é mais acertivo (certifica os bons programadores) e até mais fácil de estudar.</p>
<p>Separei abaixo uma apresentação (in english) sobre os caminhos e dicas da certificação. Vale a pena dar uma olhada. E também encontrei posts muito interessantes no blog do <a href="http://www.igorescobar.com/blog/2010/06/21/zend-certified-engineer-vamos/" target="_blank">Igor Escobar</a> e do <a href="http://fernandomantoan.com/php/zend-certified-engineer-php-5-3/" target="_blank">Fernando Mantoan</a> que falam da experiência deles na obtenção da certificação.</p>
<div id="__ss_7998781" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Zend Certification Preparation Tutorial" href="http://www.slideshare.net/lornajane/zend-certification-preparation-tutorial" target="_blank">Zend Certification Preparation Tutorial</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/7998781" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/lornajane" target="_blank">Lorna Mitchell</a></div>
</div>
<p><strong>Referências:</strong></p>
<ul>
<li><a href="http://www.igorescobar.com/blog/2010/06/21/zend-certified-engineer-vamos/" target="_blank">Igor Escobar blog - Zend Certified Engineer, Vamos?</a></li>
<li><a href="http://fernandomantoan.com/php/zend-certified-engineer-php-5-3/" target="_blank">Fernando Mantoan - Zend Certified Engineer PHP 5.3</a></li>
</ul>
<p>Bem, agora é só estudar!</p>
<p>Abraços,</p>
<p><a href="http://tas.eti.br/blog/sobre/" target="_blank">Tiago.</a></p>
<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-button */
google_ad_slot = "5761791599";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<div style="float: left; margin-left: 10px;"><a href="http://twitter.com/share?url=http://tas.eti.br/blog/2011/12/certificacao-php-agora-e-a-hora/&via=tiagotas&text=Certificação PHP, agora é a hora!&related=:&lang=en&count=horizontal" class="twitter-share-button" onclick="javascript:_gaq.push(['_trackSocial", "twitter", "tweet"]);">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="AWD_like_button "><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftas.eti.br%2Fblog%2F2011%2F12%2Fcertificacao-php-agora-e-a-hora%2F&amp;send=false&amp;layout=standard&amp;width=200&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font=arial&amp;height=40" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:40px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://tas.eti.br/blog/2011/12/certificacao-php-agora-e-a-hora/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Percorrendo diretórios com PHP usando a SPL</title>
		<link>http://tas.eti.br/blog/2011/12/percorrendo-diretorios-com-php-usando-a-spl/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=percorrendo-diretorios-com-php-usando-a-spl</link>
		<comments>http://tas.eti.br/blog/2011/12/percorrendo-diretorios-com-php-usando-a-spl/#comments</comments>
		<pubDate>Mon, 12 Dec 2011 03:01:38 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://tas.eti.br/blog/?p=125</guid>
		<description><![CDATA[Bom revê-los caros leitores! Hoje irei abordar um assunto bem batido, mas por uma óptica nova: a listagem de arquivos de um diretório através do PHP. Geralmente este recurso não é muito utilizado, mas para quem desenvolve o já desenvolveu sistemas mais robustos em PHP, já deve ter se deparado com essa necessidade, que antes era um [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-top */
google_ad_slot = "2716329990";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<p>Bom revê-los caros leitores!</p>
<p>Hoje irei abordar um assunto bem batido, mas por uma óptica <del>nova</del>: a listagem de arquivos de um diretório através do PHP. Geralmente este recurso não é muito utilizado, mas para quem desenvolve o já desenvolveu sistemas mais robustos em PHP, já deve ter se deparado com essa necessidade, que antes era um pouco mais trabalhosa (que espaguetosa) pois tínhamos que utilizar de funções como <a href="http://br2.php.net/manual/pt_BR/function.readdir.php" target="_blank">readdir()</a> e <a href="http://br2.php.net/manual/pt_BR/function.opendir.php" target="_blank">open_dir()</a>.</p>
<p style="text-align: center;"><a href="http://tas.eti.br/blog/wp-content/uploads/2011/10/logo_php_big.jpg"><img class="aligncenter" title="logo_php_big" src="http://tas.eti.br/blog/wp-content/uploads/2011/10/logo_php_big.jpg" alt="" width="255" height="134" /></a></p>
<p>Felizmente, com a versão 5 do PHP veio a SPL (Standart PHP Library), que nada mais é que uma coleção de classes e interfaces que já abstrarem muita coisa que antes era braçal, e que agora fazem o &#8220;trabalho sujo&#8221;. Não é uma framework, e esá muito longe de ser rica como, por exemplo, o Java, mas já substitui grande parte das funções de array e no nosso caso o trabalho com diretórios.</p>
<p>Para exemplificar imagine que você precisa listar todos os arquivos de um diretório, e que ainda, dentro deste mesmo diretório existam subdiretórios e com arquivos dentro, e você deseja listar todos eles. Pois bem, você precisa fazer isso recursivamente, veja como fazer isso com a SPL:</p>
<pre class="brush: php; gutter: true; first-line: 1">$path = '/httpdocs/application/classes/';

$recursiveIterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));

foreach($recursiveIterator as $arquivo)
{
	echo $arquivo-&gt;getFilename(); // Aqui exibe o nome do arquivo corrente dentro do loop foreach

	/**
	 * Existem muito mais métodos que você pode chamar aqui dentro.
	 * por exemplo: getExtension(), getSize(), isExecutable(),
	 */
}</pre>
<p>Simples não? Não? Calma eu explico: Na linha  a variável $path está definindo qual será o diretório que será lido, em seguida na linha 3 temos a declaração da classe RecursiveInteratorInterator, que recebe em seu construtor um objeto da classe <a href="http://www.php.net/manual/en/class.recursivedirectoryiterator.php" target="_blank">RecursiveDirectoryIterator</a>. Isso significa que estamos abrindo interações dentro dos diretórios, ou seja a cada passagem do loop foreach abaixo ele irá explorar um item do diretório, seja um arquivo ou um subdiretório.</p>
<p>Vale a pena a lida na <a href="http://www.php.net/manual/en/class.directoryiterator.php" target="_blank">documentação da classe</a> para que você veja todos os métodos e propriedades disponíveis.</p>
<p>&nbsp;</p>
<p><strong>Referências:</strong></p>
<ul>
<li><a href="http://php.net/manual/en/book.spl.php" target="_blank">Manual PHP &#8211; Standart PHP Library &#8211; Classes</a></li>
<li><a href="http://www.php.net/~helly/php/ext/spl/" target="_blank">Manual PHP &#8211; Standart PHP Library &#8211; Visão Geral</a></li>
<li><a href="http://www.revistaphp.com.br/artigo.php?id=157" target="_blank">Revista PHP &#8211; Standart PHP Library</a></li>
<li><a href="http://garotosopa.wordpress.com/2009/05/30/7-coisas-simples-em-php-que-alguns-ainda-complicam/" target="_blank">garotosopa &#8211; 7 coisas simples que alguns ainda complicam</a></li>
<li><a href="http://codare.net/2007/01/23/php-percorrendo-diretorios-com-spl/" target="_blank">Codare &#8211; Percorrendo diretórios com SPL</a></li>
</ul>
<p>Abraços,</p>
<p><a title="Quem é o autor desse blog?" href="http://tas.eti.br/blog/sobre/" target="_blank">Tiago</a>.</p>
<p><a href="http://www.dihitt.com.br?ref=420102">diHITT &#8211; Notícias</a><br />
<span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-button */
google_ad_slot = "5761791599";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<div style="float: left; margin-left: 10px;"><a href="http://twitter.com/share?url=http://tas.eti.br/blog/2011/12/percorrendo-diretorios-com-php-usando-a-spl/&via=tiagotas&text=Percorrendo diretórios com PHP usando a SPL&related=:&lang=en&count=horizontal" class="twitter-share-button" onclick="javascript:_gaq.push(['_trackSocial", "twitter", "tweet"]);">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="AWD_like_button "><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftas.eti.br%2Fblog%2F2011%2F12%2Fpercorrendo-diretorios-com-php-usando-a-spl%2F&amp;send=false&amp;layout=standard&amp;width=200&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font=arial&amp;height=40" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:40px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://tas.eti.br/blog/2011/12/percorrendo-diretorios-com-php-usando-a-spl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PostgreSQL: O que são tablespaces?</title>
		<link>http://tas.eti.br/blog/2011/12/postgresql-o-que-sao-tablespaces/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=postgresql-o-que-sao-tablespaces</link>
		<comments>http://tas.eti.br/blog/2011/12/postgresql-o-que-sao-tablespaces/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 03:00:29 +0000</pubDate>
		<dc:creator>Tiago Silva</dc:creator>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[dicas]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://tas.eti.br/blog/?p=692</guid>
		<description><![CDATA[Olá meus queridos! Na semana passada eu abordei a questão dos índices no PostgreSQL, onde citei que eles podem estar dentro de um dado tablespace, pois bem, neste artigo irei abordar como funciona e para que você pode utilizar esse fantástico recurso do nosso querido Sistema Gerenciador de Banco de Dados &#8211; Postgres. Você se [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-top */
google_ad_slot = "2716329990";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<p>Olá meus queridos!</p>
<p>Na semana passada eu abordei a questão dos<a title="Veja o post sobre índices, vale a pena!" href="http://tas.eti.br/blog/2011/11/postgresql-manipulando-indices/" target="_blank"> índices no PostgreSQL</a>, onde citei que eles podem estar dentro de um dado <strong>tablespace</strong>, pois bem, neste artigo irei abordar como funciona e para que você pode utilizar esse fantástico recurso do nosso querido Sistema Gerenciador de Banco de Dados &#8211; Postgres.</p>
<p>Você se lembra dos <a title="Veja o post que fiz sobre Schemas" href="http://tas.eti.br/blog/2011/09/utilizando-schemas-no-postgresql/" target="_blank">Schemas</a>, que fazem a divisão lógica do banco? Pois bem, um tablespace faz a divisão física, isto é, podemos determinar onde os elementos do banco de dados &#8211; leia-se tabelas e índices &#8211; irão ficar. Mas como assim &#8220;irão ficar&#8221;? Simples: você pode definir um dado lugar no disco rígido, ou até mesmo outro disco!</p>
<p style="text-align: center;"><a style="text-align: center;" href="http://tas.eti.br/blog/wp-content/uploads/2011/11/logo_w_elephant.png"><img class="aligncenter" style="border-style: initial; border-color: initial;" title="logo_w_elephant" src="http://tas.eti.br/blog/wp-content/uploads/2011/11/logo_w_elephant.png" alt="" width="250" height="198" /></a></p>
<p>Imagine que você tem um índice que é muito acessado e uma tabela que muito raramente é acessada, pois bem, você pode colocar esse índice em um disco SCSI e a tal tabela em um HD SATA comum, tendo em vista que o adaptador SCSI é muito veloz em comparação com o SATA. Fazendo isso você terá um ganho de desempenho muito significativo.</p>
<p>Veja abaixo as instruções SQL para a manipulação dos tablespaces.</p>
<p>&nbsp;</p>
<p><strong>Sintaxe para a criação de um tablespace:</strong></p>
<pre class="brush: sql; gutter: true; first-line: 1">CREATE TABLESPACE “hd_scsi” LOCATION '/mnt/seu_scsi'</pre>
<p>&nbsp;</p>
<p><strong>Criar tabela dentro de um dado tablespace:</strong></p>
<pre class="brush: sql; gutter: true; first-line: 1">CREATE TABLE foo (
    id integer,
    nome varchar(150),
    primary key(id)
) TABLESPACE hd_scsi;</pre>
<p>&nbsp;</p>
<p><strong>Veja como alterar um índice de tablespace:</strong></p>
<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">SELECT ‘ALTER INDEX’, n.nspname AS schemaname , ‘.’ ,c.relname AS tablename, ‘SET TABLESPACE hd_scsi;’
FROM pg_class c
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN pg_tablespace t ON t.oid = c.reltablespace
LEFT JOIN pg_index x ON x.indexrelid = c.oid
WHERE c.relkind = ‘i’::”char”
AND x.indisprimary != ‘t’
AND x.indisunique != ‘t’
AND nspname NOT IN
(‘dbateste’,'information_schema’,'pg_catalog’,'pg_temp_1′,’pg_toast’,'postgres’,'publico’,'public’)
ORDER BY n.nspname</pre>
<p>&nbsp;</p>
<p><strong>Veja como alterar uma tabela de tablespace:</strong></p>
<pre class="brush: sql; gutter: true; first-line: 1; highlight: [1]">SELECT 'ALTER TABLE' ,n.nspname AS schemaname,’.', c.relname AS tablename, ‘SET TABLESPACE hd_scsi;’
FROM pg_class c
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
LEFT JOIN pg_tablespace t ON t.oid = c.reltablespace
WHERE c.relkind = ‘r’::”char”
AND nspname NOT IN
(‘dbateste’,'information_schema’,'pg_catalog’,'pg_temp_1′,’pg_toast’,'postgres’,'publico’,'public’)
ORDER BY n.nspname</pre>
<p>&nbsp;</p>
<p><strong>Referências:</strong></p>
<ul>
<li><a href="http://keniamilene.wordpress.com/2008/03/14/alterando-tablespace-de-tabelas-e-indices-no-postgresql/" target="_blank">Kenia Milene G.’s Blog - Alterando Tablespace de Tabelas e Indices no PostgreSQL</a></li>
<li><a href="http://www.postgresql.org/docs/8.1/static/manage-ag-tablespaces.html" target="_blank">PostgreSQL Manuals &#8211; Tablespaces</a></li>
<li><a href="http://postgresqlbr.blogspot.com/2007/06/tablespaces-no-postgresql.html" target="_blank">PostgreSQL BR &#8211; Tablespaces no PostgreSQL</a></li>
<li><a href="http://www.devmedia.com.br/post-1818-Tablespace.html" target="_blank">Devmedia &#8211; Tablespace</a></li>
</ul>
<p>Semana que vem irei abordar o funcionamento das <strong>triggers</strong>!</p>
<p>Abraços,</p>
<p><a title="Quem é o autor desse blog?" href="http://tas.eti.br/blog/sobre/" target="_blank">Tiago</a>.<br />
<span style="color: #ff0000;"> <script type="text/javascript"><!--
google_ad_client = "ca-pub-7113648014835203";
/* ad-post-button */
google_ad_slot = "5761791599";
google_ad_width = 468;
google_ad_height = 60;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></span></p>
<div style="float: left; margin-left: 10px;"><a href="http://twitter.com/share?url=http://tas.eti.br/blog/2011/12/postgresql-o-que-sao-tablespaces/&via=tiagotas&text=PostgreSQL: O que são tablespaces?&related=:&lang=en&count=horizontal" class="twitter-share-button" onclick="javascript:_gaq.push(['_trackSocial", "twitter", "tweet"]);">Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script></div><div class="AWD_like_button "><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Ftas.eti.br%2Fblog%2F2011%2F12%2Fpostgresql-o-que-sao-tablespaces%2F&amp;send=false&amp;layout=standard&amp;width=200&amp;show_faces=false&amp;action=like&amp;colorscheme=light&amp;font=arial&amp;height=40" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:200px; height:40px;" allowTransparency="true"></iframe></div>]]></content:encoded>
			<wfw:commentRss>http://tas.eti.br/blog/2011/12/postgresql-o-que-sao-tablespaces/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

