<?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>Arquivo para PostgreSQL - Bóson Treinamentos em Ciência e Tecnologia</title>
	<atom:link href="https://www.bosontreinamentos.com.br/category/postgresql-banco-dados/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.bosontreinamentos.com.br/category/postgresql-banco-dados/</link>
	<description>Artigos e Tutoriais sobre Desenvolvimento de Software, Bancos de Dados SQL, Linux, Lógica de Programação, Inteligência Artificial, Hardware, Eletrônica, Arduino, Técnicas e Teorias de Estudo e Aprendizagem, Carreira em TI, Ciências Cognitivas, e muito mais!</description>
	<lastBuildDate>Tue, 10 Sep 2024 11:08:05 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>
	<item>
		<title>Procedimentos Armazenados em PostgreSQL (Stored Procedures)</title>
		<link>https://www.bosontreinamentos.com.br/postgresql-banco-dados/procedimentos-armazenados-em-postgresql-stored-procedures/</link>
					<comments>https://www.bosontreinamentos.com.br/postgresql-banco-dados/procedimentos-armazenados-em-postgresql-stored-procedures/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 03 Sep 2024 14:56:25 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18799</guid>

					<description><![CDATA[<p>Procedimentos Armazenados em PostgreSQL (Stored Procedures) Procedimentos armazenados são uma forma de armazenar a lógica do banco de dados no lado do servidor e podem ser executados por vários clientes. Eles são uma ferramenta muito útil para administradores e programadores de banco de dados, pois permitem encapsular a lógica complexa em uma única unidade chamável, reduzindo o código duplicado, aumentando a segurança e melhorando o desempenho. Um procedimento armazenado no PostgreSQL é um bloco nomeado de instruções PL/pgSQL que podem ser executadas com um único comando. A sintaxe para criar um procedimento armazenado no PostgreSQL é a seguinte: CREATE [OR REPLACE PROCEDURE] nome_procedimento(arg1 tipo_dado1, arg2 tipo_dado2, ...) RETURNS tipo_dado_retorno LANGUAGE plpgsql AS $$ DECLARE -- declaração de variáveis locais, se houver BEGIN -- declarações PL/pgSQL END; $$; Onde: nome_procedimento é o nome do procedimento armazenado arg1, arg2, etc. são os parâmetros do procedimento armazenado tipo_dado1, tipo_dado2, etc. são os tipos de dados dos parâmetros tipo_dado_retorno é o tipo de dados do valor de retorno e a seção DECLARE é usada para declarar variáveis locais, se necessário. A lógica real do procedimento armazenado é escrita dentro de blocos BEGIN e END, usando instruções da linguagem PL/pgSQL. A cláusula LANGUAGE especifica o [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/procedimentos-armazenados-em-postgresql-stored-procedures/">Procedimentos Armazenados em PostgreSQL (Stored Procedures)</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Procedimentos Armazenados em PostgreSQL (Stored Procedures)</h2>
<p>Procedimentos armazenados são uma forma de armazenar a lógica do banco de dados no lado do servidor e podem ser executados por vários clientes. Eles são uma ferramenta muito útil para administradores e programadores de banco de dados, pois permitem encapsular a lógica complexa em uma única unidade chamável, reduzindo o código duplicado, aumentando a segurança e melhorando o desempenho.</p>
<p>Um procedimento armazenado no <a href="https://www.bosontreinamentos.com.br/curso-completo-de-postgresql/">PostgreSQL</a> é um bloco nomeado de instruções PL/pgSQL que podem ser executadas com um único comando. A sintaxe para criar um procedimento armazenado no PostgreSQL é a seguinte:</p>
<pre><span style="color: #800080;"><strong>CREATE [OR REPLACE PROCEDURE] nome_procedimento(arg1 tipo_dado1, arg2 tipo_dado2, ...)</strong></span>
<span style="color: #800080;"><strong>RETURNS tipo_dado_retorno</strong></span>
<span style="color: #800080;"><strong>LANGUAGE plpgsql</strong></span>
<span style="color: #800080;"><strong>AS $$</strong></span>
<span style="color: #800080;"><strong>DECLARE</strong></span>
<span style="color: #339966;"><strong>-- declaração de variáveis locais, se houver</strong></span>
<span style="color: #800080;"><strong>BEGIN</strong></span>
<span style="color: #339966;"><strong>-- declarações PL/pgSQL</strong></span>
<span style="color: #800080;"><strong>END;</strong></span>
<span style="color: #800080;"><strong>$$;</strong></span></pre>
<p>Onde:</p>
<ul>
<li><strong>nome_procedimento</strong> é o nome do procedimento armazenado</li>
<li><strong>arg1, arg2, etc</strong>. são os parâmetros do procedimento armazenado</li>
<li><strong>tipo_dado1, tipo_dado2, etc</strong>. são os <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/tipos-de-dados-no-postgresql/">tipos de dados</a> dos parâmetros</li>
<li><strong>tipo_dado_retorno</strong> é o tipo de dados do valor de retorno</li>
</ul>
<p>e a seção <strong>DECLARE</strong> é usada para declarar variáveis locais, se necessário. A lógica real do procedimento armazenado é escrita dentro de blocos BEGIN e END, usando instruções da linguagem <strong>PL/pgSQL</strong>.</p>
<p>A cláusula <strong>LANGUAGE</strong> especifica o idioma do procedimento armazenado, que é <em><strong>plpgsql</strong></em> neste caso.</p>
<h3>O símbolo $$</h3>
<p>O símbolo $$ usado na última linha de um procedimento PL/pgSQL é usado para definir o início e o fim do corpo do procedimento. É uma sintaxe especial usada para definir uma string literal que abrange várias linhas. Na prática, é possível usar qualquer string com essa finalidade, desde que não seja uma palavra reservada da linguagem.</p>
<p>Em um procedimento PL/pgSQL, o $$ é usado para envolver todo o corpo do procedimento, que inclui a declaração de variáveis, a definição de estruturas de controle e qualquer outra lógica que você queira implementar. O primeiro $$ marca o início do corpo do procedimento e o segundo $$ marca o fim do corpo do procedimento.</p>
<p>Outra opção é usar a estrutura &#8220;<strong>BEGIN ATOMIC</strong>&#8221; &#8230; &#8220;<strong>END</strong>&#8221; no lugar de &#8220;<strong>AS $$</strong>&#8220;.</p>
<h3><strong>O que é PL/pgSQL?</strong></h3>
<p>PL/pgSQL é uma linguagem procedural usada no PostgreSQL para escrever stored procedures, triggers e funções. É uma linguagem estruturada em blocos semelhante a outras linguagens procedurais, como PL/SQL no Oracle e T-SQL no Microsoft SQL Server. Essa linguagem fornece estruturas de controle, como instruções IF-THEN-ELSE, LOOP e EXIT, bem como a capacidade de declarar variáveis, realizar tratamento de exceções e usar cursores.</p>
<p>O PL/pgSQL oferece uma interface procedural de alto nível para o banco de dados que permite criar lógica de negócios complexa e automatizar as operações do banco de dados. Por exemplo, podemos usar PL/pgSQL para implementar regras de negócios, validar dados ou realizar cálculos complexos em dados armazenados no banco de dados.</p>
<p>Assim, podemos escrever lógica que pode ser facilmente testada e reutilizada, tornando-a uma maneira eficiente de gerenciar operações de banco de dados.</p>
<p>Trata-se de uma linguagem do lado do servidor, o que significa que o código é executado no servidor de banco de dados, e não no cliente. Isso o torna mais rápido e eficiente do que executar o script do lado do cliente, dentro de uma aplicação de usuário, além de fornecer melhor segurança para seus dados.</p>
<p>Outras opções de linguagens suportadas pelo Postgres incluem SQL padrão e linguagem C, além da possibilidade de trabalhar com extensões para outras linguagens como PL/Python, PL/Perl, etc.</p>
<p>A instrução <strong>LANGUAGE plpgsql</strong> é necessária ao criar procedimentos armazenados no PostgreSQL porque define a linguagem de programação que será usada para escrever o corpo do procedimento.</p>
<h3>Como executar o procedimento armazenado</h3>
<p>Podemos chamar um procedimento armazenado no PostgreSQL usando a seguinte sintaxe:</p>
<pre><span style="color: #800080;"><strong>CALL nome_procedimento(arg1_valor, arg2_valor, ...);</strong></span></pre>
<p>Aqui, arg1_valor, arg2_valor, etc. são os valores dos parâmetros passados para o procedimento armazenado. O resultado do procedimento armazenado será retornado na forma de uma tabela.</p>
<p>Vejamos agora alguns exemplos de criação e execução de procedimentos armazenados em PostgreSQL.</p>
<h3>Exemplo 01 &#8211; Inserir uma linha em uma tabela</h3>
<p>Procedimento armazenado em PostgreSQL (somente SQL) que insere uma nova linha em uma tabela, composta por três colunas: nome, sobrenome e idade:</p>
<p>Criar a tabela de teste:</p>
<pre><span style="color: #ff0000;"><strong>CREATE TABLE pessoas (</strong></span>
<span style="color: #ff0000;"><strong>    nome varchar(20),</strong></span>
<span style="color: #ff0000;"><strong>    sobrenome varchar(40),</strong></span>
<span style="color: #ff0000;"><strong>    idade smallint</strong></span>
<span style="color: #ff0000;"><strong>);</strong></span></pre>
<p>Vamos a um exemplo de procedimento armazenado em PL/pgSQL que insere uma nova linha em uma tabela com três colunas: nome, sobrenome e idade. O procedimento armazenado usa três parâmetros: p_nome, p_sobrenome e p_idade e insere esses valores na tabela.</p>
<pre><span style="color: #ff0000;"><strong>CREATE OR REPLACE PROCEDURE cadastra_pessoa(p_nome varchar(20), p_sobrenome varchar(40), p_idade smallint)</strong></span>
<span style="color: #ff0000;"><strong>  LANGUAGE plpgsql
AS $$
BEGIN</strong></span>
<span style="color: #ff0000;"><strong>    INSERT INTO pessoas (nome, sobrenome, idade)</strong></span>
<span style="color: #ff0000;"><strong>    VALUES (p_nome, p_sobrenome, p_idade);</strong></span>
<span style="color: #ff0000;"><strong>END</strong></span>
<span style="color: #ff0000;"><strong>$$</strong></span></pre>
<p><strong>Teste</strong></p>
<p>Para executar o procedimento armazenado, basta chamá-lo com os valores desejados como parâmetros, assim:</p>
<pre><span style="color: #ff0000;"><strong>CALL cadastra_pessoa('Fábio'::varchar, 'dos Reis'::varchar, 48::smallint);</strong></span></pre>
<p>E verificar se a tabela foi atualizada com o novo registro:</p>
<pre><span style="color: #ff0000;"><strong>SELECT * FROM pessoas;</strong></span></pre>
<p><img decoding="async" class="aligncenter wp-image-18802 size-full" title="Procedimento armazenado no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2023/02/postgresql-stored-procedure-2.png" alt="Procedimento armazenado no PostgreSQL" width="426" height="77" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2023/02/postgresql-stored-procedure-2.png 426w, https://www.bosontreinamentos.com.br/wp-content/uploads/2023/02/postgresql-stored-procedure-2-420x76.png 420w" sizes="(max-width: 426px) 100vw, 426px" /></p>
<h4>Especificar tipos de dados na chamada do procedimento</h4>
<p>Ao chamar um procedimento armazenado no PostgreSQL, a necessidade de especificar explicitamente os tipos de dados para os argumentos (por exemplo, &#8216;Fábio&#8217;::varchar) geralmente surge devido a questões de desambiguação e coerção de tipos.</p>
<p>Os principais motivos para especificar tipos de dados ao chamar um procedimento armazenado no PostgreSQL são os seguntes:</p>
<ol>
<li><strong>Desambiguação</strong>: Quando o PostgreSQL possui múltiplos procedimentos com o mesmo nome, mas com assinaturas diferentes (ou seja, com diferentes tipos de parâmetros ou números de parâmetros), ele precisa saber exatamente qual procedimento deve ser chamado. Especificar o tipo de dado ajuda o PostgreSQL a escolher a versão correta do procedimento.</li>
<li><strong>Coerção de Tipos</strong>: O PostgreSQL é uma linguagem fortemente tipada, o que significa que cada valor tem um tipo de dado associado, e algumas operações requerem tipos específicos. Quando se passa um literal (como &#8216;<strong>Fábio</strong>&#8216;), ele é inicialmente interpretado como um text, a menos que se indique explicitamente um tipo diferente, como o varchar.</li>
<li><strong>Prevenção de Erros de Tipagem</strong>: Quando o tipo de dado esperado pelo procedimento não corresponde ao tipo inferido pelo PostgreSQL, o banco de dados pode não ser capaz de fazer a coerção automaticamente, resultando em erros. Especificar o tipo assegura que o valor será tratado corretamente.</li>
</ol>
<h3>Exemplo 02 &#8211; Inserir um novo produto na tabela</h3>
<p>Vamos criar um procedimento armazenado que permita inserir um novo produto na tabela de produtos de nosso banco de dados.</p>
<pre><span style="color: #ff0000;"><strong>CREATE OR REPLACE PROCEDURE inserir_produto (</strong></span>
<span style="color: #ff0000;"><strong>    p_cod_produto INT,</strong></span>
<span style="color: #ff0000;"><strong>    p_nome_produto VARCHAR(30),</strong></span>
<span style="color: #ff0000;"><strong>    p_descricao TEXT,</strong></span>
<span style="color: #ff0000;"><strong>    p_preco NUMERIC,</strong></span>
<span style="color: #ff0000;"><strong>    p_qtde_estoque SMALLINT</strong></span>
<span style="color: #ff0000;"><strong>)</strong></span>
<span style="color: #ff0000;"><strong>language plpgsql</strong></span>
<span style="color: #ff0000;"><strong>AS $$</strong></span>
<span style="color: #ff0000;"><strong>BEGIN</strong></span>
<span style="color: #ff0000;"><strong>    INSERT INTO Produtos(cod_produto, nome_produto, descricao, preco, qtde_estoque)</strong></span>
<span style="color: #ff0000;"><strong>    VALUES (p_cod_produto, p_nome_produto, p_descricao, p_preco, p_qtde_estoque);</strong></span>
<span style="color: #ff0000;"><strong>    RAISE NOTICE 'Produto % cadastrado com sucesso.', p_nome_produto;</strong></span>
<span style="color: #ff0000;"><strong>END;</strong></span>
<span style="color: #ff0000;"><strong>$$;</strong></span></pre>
<p>A instrução <strong>RAISE NOTICE</strong> emite uma mensagem para o console confirmando a inserção do registro.</p>
<p>Para executar o procedimento:</p>
<pre><span style="color: #ff0000;"><strong>CALL inserir_produto(4,'Detergente'::varchar,'Detergente neutro 500 ml'::text, 2.35, 2::smallint);</strong></span></pre>
<p>E então podemos verificar se produto foi inserido corretamente realizando uma consulta simples ao banco de dados:</p>
<pre><span style="color: #ff0000;"><strong>SELECT * FROM Produtos;</strong></span></pre>
<h3>Exemplo 03 &#8211; Atualizar o preço de um produto.</h3>
<p>Este procedimento atualiza o preço de um produto específico, identificado pelo seu código de produto:</p>
<pre><span style="color: #ff0000;"><strong>CREATE OR REPLACE PROCEDURE atualizar_preco(</strong></span>
<span style="color: #ff0000;"><strong>    p_cod_produto INT,</strong></span>
<span style="color: #ff0000;"><strong>    p_novo_preco NUMERIC</strong></span>
<span style="color: #ff0000;"><strong>)</strong></span>
<span style="color: #ff0000;"><strong>LANGUAGE plpgsql</strong></span>
<span style="color: #ff0000;"><strong>AS $$</strong></span>
<span style="color: #ff0000;"><strong>BEGIN</strong></span>
<span style="color: #ff0000;"><strong>    UPDATE Produtos</strong></span>
<span style="color: #ff0000;"><strong>    SET preco = p_novo_preco</strong></span>
<span style="color: #ff0000;"><strong>    WHERE cod_produto = p_cod_produto;</strong></span>
<span style="color: #ff0000;"><strong>    RAISE NOTICE 'Preço do produto % atualizado para %', p_cod_produto, p_novo_preco;</strong></span>
<span style="color: #ff0000;"><strong>END;</strong></span>
<span style="color: #ff0000;"><strong>$$;</strong></span></pre>
<p>Para executar o procedimento:</p>
<pre><span style="color: #ff0000;"><strong>CALL atualizar_preco(1, 3.80);</strong></span></pre>
<p>E então podemos verificar se produto teve seu preço corretamente atualizado realizando novamente uma consulta ao banco de dados:</p>
<pre><span style="color: #ff0000;"><strong>SELECT * FROM Produtos;</strong></span></pre>
<h3>Exemplo 04 &#8211; Procedimento para consultar produtos com estoque baixo</h3>
<p>Este procedimento retorna todos os produtos com quantidade em estoque abaixo de um valor especificado na chamada da procedure.</p>
<pre><span style="color: #ff0000;"><strong>CREATE OR REPLACE PROCEDURE consultar_estoque_baixo (</strong></span>
<span style="color: #ff0000;"><strong>    p_limite_estoque INTEGER</strong></span>
<span style="color: #ff0000;"><strong>)</strong></span>
<span style="color: #ff0000;"><strong>LANGUAGE plpgsql</strong></span>
<span style="color: #ff0000;"><strong>AS $$</strong></span>
<span style="color: #ff0000;"><strong>DECLARE resultado RECORD;</strong></span>
<span style="color: #ff0000;"><strong>BEGIN</strong></span>
<span style="color: #ff0000;"><strong>    FOR resultado in</strong></span>
<span style="color: #ff0000;"><strong>        SELECT cod_produto, nome_produto, qtde_estoque</strong></span>
<span style="color: #ff0000;"><strong>        FROM Produtos</strong></span>
<span style="color: #ff0000;"><strong>        WHERE qtde_estoque &lt; p_limite_estoque</strong></span>
<span style="color: #ff0000;"><strong>    LOOP</strong></span>
<span style="color: #ff0000;"><strong>        RAISE NOTICE 'Produto: %, Estoque: % ', resultado.nome_produto, resultado.qtde_estoque;</strong></span>
<span style="color: #ff0000;"><strong>    END LOOP;</strong></span>
<span style="color: #ff0000;"><strong>END;</strong></span>
<span style="color: #ff0000;"><strong>$$;</strong></span></pre>
<p>Para executar o procedimento:</p>
<pre><strong><span style="color: #ff0000;">CALL consultar_estoque_baixo(3);</span></strong></pre>
<p>Aqui, consultamos todos os produtos cujo estoque está abaixo de 3 unidades.</p>
<p>Devemos notar alguns detalhes interessantes sobre a consulta realizada pelo procedimento armazenado deste exemplo:</p>
<h4>Destino dos dados</h4>
<p>Quando se usa a instrução SELECT em um procedimento armazenado no PostgreSQL, o resultado deve ser direcionado para algum lugar, como uma variável, uma tabela temporária, ou ser retornado ao chamador da função ou procedimento.</p>
<p>Caso contrário, o PostgreSQL gera a mensagem &#8220;consulta não tem destino para os dados resultantes&#8221; (no inglês: &#8220;<em>query has no destination for result data</em>&#8220;).</p>
<p>Se for necessário apenas exibir os resultados no console em um procedimento armazenado, sem retorná-los em uma consulta, podemos usar um loop para iterar sobre os resultados e então exibi-los com RAISE NOTICE.</p>
<h4>O tipo RECORD</h4>
<p>O tipo RECORD é um tipo de dado genérico no PL/pgSQL que pode acomodar uma linha de dados com colunas de diferentes tipos. Ao contrário de outros tipos de variáveis, que têm um tipo de dado específico (como INTEGER, VARCHAR, etc.), o RECORD pode armazenar qualquer linha inteira de resultado, independentemente de quantas colunas ou de quais tipos de dados essas colunas têm.</p>
<p>A instrução DECLARE r RECORD; em PL/pgSQL é usada para declarar uma variável de tipo RECORD.</p>
<p>Quando usamos o RECORD dentro de um loop FOR IN que itera sobre os resultados de uma consulta, o RECORD é automaticamente &#8220;preenchido&#8221; com os valores das colunas para cada linha retornada. Isso permite acessar os valores dessas colunas dentro do corpo do loop.</p>
<p>Além disso, uma vez que a linha é armazenada no RECORD, podemos acessar as colunas individuais usando a notação r.coluna, onde r é o nome da variável RECORD e coluna é o nome da coluna que desejamos acessar.</p>
<h3>Exemplo 05 &#8211; Inserir e atualizar valores no mesmo procedimento.</h3>
<p>Exemplo: criar um procedimento armazenado que insira um novo produto na tabela de produtos, ao mesmo tempo em que aplica um desconto percentual especificado a todos os produtos logo após.</p>
<pre><span style="color: #ff0000;"><strong>CREATE OR REPLACE PROCEDURE insere_atualiza (</strong></span><span style="color: #ff0000;"><strong>cod int, prod varchar(30), descr text, valor numeric, qtde smallint, desc_perc numeric)</strong></span>
<span style="color: #ff0000;"><strong>LANGUAGE plpgsql</strong></span>
<span style="color: #ff0000;"><strong>AS $$</strong></span>
<span style="color: #ff0000;"><strong>BEGIN</strong></span>
<span style="color: #ff0000;"><strong>    INSERT INTO produtos(cod_produto, nome_produto, descricao, preco, qtde_estoque)</strong></span>
<span style="color: #ff0000;"><strong>    VALUES (cod, prod, descr, valor, qtde);</strong></span>
<span style="color: #ff0000;"><strong>    UPDATE produtos SET preco = preco * (100 - desc_perc) / 100;</strong></span>
<span style="color: #ff0000;"><strong>END;</strong></span>
<span style="color: #ff0000;"><strong>$$;</strong></span></pre>
<p>Executar o procedimento:</p>
<pre><span style="color: #ff0000;"><strong>CALL insere_atualiza(6,'Alvejante'::varchar(30),'Alvejante de roupas'::text, 12.30, 12::smallint, 10);</strong></span></pre>
<p>Obs.: O tipo numeric geralmente não precisa ser informado (cast) na chamada do procedimento.</p>
<h2>Como excluir um procedimento armazenado</h2>
<p>Para excluir um procedimento armazenado no PostgreSQL devemos usar a declaração DROP PROCEDURE, como segue:</p>
<pre><span style="color: #800080;"><strong>DROP PROCEDURE nome_procedimento;</strong></span></pre>
<p>Por exemplo, para excluir o procedimento <strong><em>consultar_estoque_baixo</em></strong>:</p>
<pre><span style="color: #ff0000;"><strong>DROP PROCEDURE consultar_estoque_baixo;</strong></span></pre>
<p>Se houver mais de um procedimento armazenado como mesmo nome, mas com quantidade e tipos de parâmetros distintos (<strong>polimorfismo</strong>), devemos indicar os tipos de dados dos argumentos ao exclui-lo:</p>
<pre><span style="color: #ff0000;"><strong>DROP PROCEDURE insere_atualiza(int,varchar,text,numeric,smallint,numeric);</strong></span></pre>
<h2>Conclusão</h2>
<p>Neste artigo vimos como começar a trabalhar com procedimentos armazenados no PostgreSQL. com alguns exemplos simples de criação de procedures simples. O recurso é muito útil para simplificar código e facilitar a programação de tarefas no banco de dados, principalmente quando as declarações SQL precisam ser executadas a partir de uma aplicação escrita em alguma linguagem de programação para acesso direto dos usuários.</p>
<p>Estudaremos recursos mais avançados de procedimentos armazenados nos próximos artigos, assim como outras formas de programação existentes para bancos de dados PostgreSQL, como Funções e Triggers.</p>
<p>Para saber mais sobre Procedimentos Armazenados no PostgreSQL, assista ao vídeo a seguir da Bóson Treinamentos no YouTube:</p>
<p><iframe loading="lazy" title="YouTube video player" src="https://www.youtube.com/embed/Ig1hGqiPROI?si=ywRszZBlyo3BYNW0" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/procedimentos-armazenados-em-postgresql-stored-procedures/">Procedimentos Armazenados em PostgreSQL (Stored Procedures)</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/postgresql-banco-dados/procedimentos-armazenados-em-postgresql-stored-procedures/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como usar Arrays em colunas no PostgreSQL</title>
		<link>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-usar-arrays-em-colunas-no-postgresql/</link>
					<comments>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-usar-arrays-em-colunas-no-postgresql/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 21 Jan 2022 12:33:33 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=18085</guid>

					<description><![CDATA[<p>Arrays em colunas no PostgreSQL Uma das regras da normalização de relações em modelagem de dados é que devemos ter apenas valores atômicos nas colunas das tabelas, evitando campos multivalorados. Porém, suponhamos que, por algum motivo qualquer, eu precise armazenar múltiplos dados em uma mesma coluna &#8211; por design, complexidade, espaço, desejo do cliente, ou outro motivo qualquer. Neste caso, uma solução possível seria o emprego de arrays como tipo de dado da coluna. Um array é uma estrutura de dados homogênea que representa um conjunto de elementos de mesmo tipo. Podemos acessar esses elementos (dados) individuais por meio de uma posição de índice, geralmente numérica. No PostgreSQL essa posição se inicia em 1. Criar coluna de array no PostgreSQL A seguir as duas sintaxes empregadas para configurar uma coluna para uso de arrays ao criar uma tabela: a sintaxe padrão do PostgreSQL e na sequência, a sintaxe padrão ANSI SQL. Ambas funcionam no Postgres. SINTAXE (padrão PostgreSQL): coluna tipo[] SINTAXE (padrão ANSI SQL): coluna tipo ARRAY[tamanho] ou coluna tipo ARRAY O PostgreSQL não impõe restrição de tamanho ao array, mesmo se for especificado. Por padrão, a contagem dos elementos do array inicia em 1, em vez de 0, como é feito [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-usar-arrays-em-colunas-no-postgresql/">Como usar Arrays em colunas no PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Arrays em colunas no PostgreSQL</h2>
<p>Uma das regras da normalização de relações em modelagem de dados é que devemos ter apenas valores atômicos nas colunas das tabelas, evitando campos multivalorados. Porém, suponhamos que, por algum motivo qualquer, eu precise armazenar múltiplos dados em uma mesma coluna &#8211; por design, complexidade, espaço, desejo do cliente, ou outro motivo qualquer.</p>
<p>Neste caso, uma solução possível seria o emprego de <a href="http://www.bosontreinamentos.com.br/logica-de-programacao/17-logica-de-programacao-vetores-definicao-e-declaracao/">arrays</a> como tipo de dado da coluna.</p>
<p>Um array é uma estrutura de dados homogênea que representa um conjunto de elementos de mesmo tipo. Podemos acessar esses elementos (dados) individuais por meio de uma posição de índice, geralmente numérica. No PostgreSQL essa posição se inicia em 1.</p>
<h3>Criar coluna de array no PostgreSQL</h3>
<p>A seguir as duas sintaxes empregadas para configurar uma coluna para uso de arrays ao criar uma tabela: a sintaxe padrão do PostgreSQL e na sequência, a sintaxe padrão ANSI SQL. Ambas funcionam no Postgres.</p>
<p><strong>SINTAXE (padrão PostgreSQL):</strong></p>
<pre><strong><span style="font-family: terminal, monaco, monospace; color: #ff0000;">coluna tipo[]</span></strong></pre>
<p><strong>SINTAXE (padrão ANSI SQL):</strong></p>
<pre><span style="color: #ff0000;"><strong><span style="font-family: terminal, monaco, monospace;">coluna tipo ARRAY[tamanho]</span></strong></span>
<span style="color: #339966;"><strong><span style="font-family: terminal, monaco, monospace;">ou</span></strong></span>
<span style="color: #ff0000;"><strong><span style="font-family: terminal, monaco, monospace;">coluna tipo ARRAY</span></strong></span></pre>
<p>O PostgreSQL não impõe restrição de tamanho ao array, mesmo se for especificado. Por padrão, a contagem dos elementos do array inicia em 1, em vez de 0, como é feito na maior parte das linguagens de programação.</p>
<p>Vamos criar uma tabela de exemplo para estudarmos o emprego de arrays em colunas.</p>
<h4>Criar tabela com array (sintaxe PostgreSQL)</h4>
<pre><strong><span style="color: #ff0000;">CREATE TABLE escalaTrabalho (</span></strong>
<strong><span style="color: #ff0000;">codFunc smallint,</span></strong>
<strong><span style="color: #ff0000;">escala char(3)[]</span></strong>
<strong><span style="color: #ff0000;">);</span></strong></pre>
<p>Agora vamos inserir três registros para que possamos rodar algumas consultas de teste na sequência:</p>
<h4>Inserir dados na tabela para testes (sintaxe PostgreSQL)</h4>
<pre><strong><span style="color: #ff0000;">INSERT INTO escalaTrabalho (codFunc, escala)</span></strong>
<strong><span style="color: #ff0000;">VALUES</span></strong>
<strong><span style="color: #ff0000;">(1,'{"SEG", "TER", "QUA"}'),</span></strong>
<strong><span style="color: #ff0000;">(2,'{"QUI", "SEX", "SAB"}),</span></strong>
<strong><span style="color: #ff0000;">(3,'{"SEG", "QUA", "SEX"});</span></strong></pre>
<h4>Consultas de teste</h4>
<p>Vamos testar nossa tabela com algumas consultas aos dados do array da coluna escala.</p>
<p>1. Mostrar todos os dados de escala dos funcionários</p>
<pre><span style="color: #ff0000;">SELECT * FROM escalaTrabalho;</span></pre>
<p>2. Retornar a escala de trabalho do funcionário de ID 2</p>
<pre><span style="color: #ff0000;">SELECT escala FROM escalaTrabalho</span>
<span style="color: #ff0000;">WHERE codFunc = 2;</span></pre>
<p>3. Em qual dia da semana cada funcionário começa a trabalhar?</p>
<pre><span style="color: #ff0000;">SELECT codFunc, escala[1] FROM escalaTrabalho;</span></pre>
<p>4. Quais funcionários trabalham às quartas-feiras?</p>
<pre><span style="color: #ff0000;">SELECT codFunc FROM escalaTrabalho</span>
<span style="color: #ff0000;">WHERE 'QUA' = ANY(escala);</span>
<span style="color: #339966;"># seguir esta ordem na cláusula where, ou não funcionará.</span></pre>
<p>5. Vamos alterar escala de trabalho do funcionário 3 &#8211; ele vai passar a trabalhar às terças, quintas e sábados:</p>
<pre><span style="color: #ff0000;">UPDATE escalaTrabalho</span>
<span style="color: #ff0000;">SET escala = ARRAY['TER','QUI','SAB']</span>
<span style="color: #ff0000;">WHERE codFunc = 3;</span>
<span style="color: #339966;"># usei a sintaxe padrão ANSI SQL neste exemplo.</span></pre>
<p>Verificamos o resultado com uma consulta simples:</p>
<pre><span style="color: #ff0000;">SELECT * FROM escalaTrabalho;</span></pre>
<p>Para saber mais sobre o uso de arrays no PostgreSQL, consulte a documentação Oficial: <a href="https://www.postgresql.org/docs/9.0/arrays.html" target="_blank" rel="noopener">https://www.postgresql.org/docs/9.0/arrays.html</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-usar-arrays-em-colunas-no-postgresql/">Como usar Arrays em colunas no PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-usar-arrays-em-colunas-no-postgresql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Excluir Registros no PostgreSQL &#8211; DELETE e TRUNCATE TABLE</title>
		<link>https://www.bosontreinamentos.com.br/postgresql-banco-dados/excluir-registros-no-postgresql-delete-e-truncate-table/</link>
					<comments>https://www.bosontreinamentos.com.br/postgresql-banco-dados/excluir-registros-no-postgresql-delete-e-truncate-table/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 29 Dec 2020 11:25:36 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=17416</guid>

					<description><![CDATA[<p>Como excluir registros no PostgreSQL com DELETE e TRUNCATE TABLE Uma das tarefas mais corriqueiras no gerenciamento de bancos de dados relacionais é a exclusão de determinados registros (linhas). Por exemplo, podemos excluir um item de uma tabela de produtos que não é mais comercializado por um estabelecimento, ou ainda excluir um cliente que se descadastrou do sistema. Além disso, em alguns casos, como testes no banco de dados, pode ser necessário excluir todas as linhas de uma tabela de uma vez &#8211; ou seja, limpar a tabela. Podemos excluir registros de uma tabela no PostgreSQL por meio do emprego de duas declarações distintas: as cláusulas DELETE FROM e TRUNCATE TABLE. Cláusula DELETE FROM Com a cláusula DELETE FROM apagamos linhas específicas, filtradas por meio de condições especificadas em uma cláusula WHERE Sintaxe: DELETE FROM tabela WHERE coluna operador valor; Exemplos Para nossos exemplos de exclusão de registros com DELETE FROM vamos inserir primeiramente mais alguns registros na tabela de produtos de nosso banco de dados de testes: INSERT INTO produtos (cod_produto,nome_produto,descricao,preco,qtde_estoque) VALUES (12,'Sabão em Pó','Caixa de sabão em pó de 1/2 kg',12.50,5), (13,'Biscoito','Pacote de biscoito integral 110g',3.45,16), (14,'Manteiga','Pote de manteiga 250g',8.70,5); Vejamos o conteúdo atual da tabela de produtos: [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/excluir-registros-no-postgresql-delete-e-truncate-table/">Excluir Registros no PostgreSQL &#8211; DELETE e TRUNCATE TABLE</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como excluir registros no PostgreSQL com DELETE e TRUNCATE TABLE</h2>
<p>Uma das tarefas mais corriqueiras no gerenciamento de bancos de dados relacionais é a exclusão de determinados registros (linhas). Por exemplo, podemos excluir um item de uma tabela de produtos que não é mais comercializado por um estabelecimento, ou ainda excluir um cliente que se descadastrou do sistema.</p>
<p>Além disso, em alguns casos, como testes no banco de dados, pode ser necessário excluir todas as linhas de uma tabela de uma vez &#8211; ou seja, limpar a tabela.</p>
<p>Podemos excluir registros de uma tabela no PostgreSQL por meio do emprego de duas declarações distintas: as cláusulas <strong>DELETE FROM</strong> e <strong>TRUNCATE TABLE</strong>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17428 size-full" title="Apagar linhas no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/12/postgreSQL.png" alt="Logo do PostgreSQL" width="152" height="163"></p>
<h3>Cláusula DELETE FROM</h3>
<p>Com a cláusula DELETE FROM apagamos linhas específicas, filtradas por meio de condições especificadas em uma <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/como-filtrar-consultas-com-clausula-where-no-postgresql/" target="_blank" rel="noopener">cláusula WHERE</a></p>
<p><strong>Sintaxe:</strong></p>
<pre><strong>DELETE FROM tabela</strong>
<strong>WHERE coluna operador valor;</strong></pre>
<h4>Exemplos</h4>
<p>Para nossos exemplos de exclusão de registros com DELETE FROM vamos inserir primeiramente mais alguns registros na tabela de produtos de nosso banco de dados de testes:</p>
<pre><strong>INSERT INTO produtos (cod_produto,nome_produto,descricao,preco,qtde_estoque)</strong>
<strong>VALUES</strong>
<strong>(12,'Sabão em Pó','Caixa de sabão em pó de 1/2 kg',12.50,5),</strong>
<strong>(13,'Biscoito','Pacote de biscoito integral 110g',3.45,16),</strong>
<strong>(14,'Manteiga','Pote de manteiga 250g',8.70,5);</strong></pre>
<p>Vejamos o conteúdo atual da tabela de produtos:</p>
<pre><strong>SELECT * FROM produtos;</strong></pre>
<p>&nbsp;</p>
<p>1 &#8211; Excluir o produto cujo código é igual a 12 da tabela de produtos</p>
<pre><strong>DELETE FROM produtos</strong>
<strong>WHERE cod_produto = 12;</strong></pre>
<p>2 &#8211; Excluir o produto de nome Manteiga da tabela de produtos</p>
<pre><strong>DELETE FROM produtos</strong>
<strong>WHERE nome_produto = 'Manteiga';</strong></pre>
<p>3 &#8211; Excluir todos os produtos cuja quantidade em estoque seja igual ou inferior a 5 unidades</p>
<pre><strong>DELETE FROM produtos</strong>
<strong>WHERE qtde_estoque &lt;= 5;</strong></pre>
<p>Executamos uma consulta à tabela de produtos para verificar se os registros foram realmente apagados:</p>
<pre><strong>SELECT * FROM produtos;</strong></pre>
<p>&nbsp;</p>
<h3>Cláusula TRUNCATE TABLE</h3>
<p>Com a cláusula TRUNCATE TABLE podemos excluir&nbsp; todos os registros de uma tabela em uma única operação, sem no entanto registrar as exclusões de linhas individuais.</p>
<p>Executar a cláusula TRUNCATE TABLE equivale a executar uma instrução DELETE FROM, porém sem o emprego de condições de filtragem com a cláusula WHERE. Deste modo, TRUNCATE TABLE é empregada para excluir completamente o conteúdo de uma tabela no PostgreSQL.</p>
<p>Porém, a cláusula TRUNCATE TABLE tem maior performance que a declaração DELETE FROM, sendo mais rápida, utilizando menos recursos de sistema e log de transações durante sua execução.</p>
<h4>Exemplo de TRUNCATE TABLE</h4>
<p>Vamos a um exemplo. Primeiramente, visualizamos o conteúdo da tabela de pedidos de nosso banco de dados de testes:</p>
<pre><strong>SELECT * FROM pedidos;</strong></pre>
<p>Executamos agora TRUNCATE TABLE para apagar o conteúdo deste tabela:</p>
<pre><strong>TRUNCATE TABLE pedidos;</strong></pre>
<p>Conferimos se a tabela está limpa:</p>
<pre><strong>SELECT * FROM pedidos;</strong></pre>
<p>Todo o conteúdo da tabela foi excluído, mas a tabela continua existindo no banco de dados. Vamos agora inserir novos registros nesta tabela com a <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/como-inserir-dados-em-tabelas-no-postgresql-com-insert-into/" target="_blank" rel="noopener">declaração INSERT INTO</a>, pois a vamos utilizar nas pŕoximas lições de nosso <a href="http://www.bosontreinamentos.com.br/curso-completo-de-postgresql/">curso de PostgreSQL</a>:</p>
<pre><strong>INSERT INTO pedidos (cod_cliente, cod_produto, qtde)</strong>
<strong>VALUES</strong>
<strong>(1,2,3),</strong>
<strong>(2,3,2),</strong>
<strong>(1,3,4),</strong>
<strong>(2,6,3),</strong>
<strong>(2,5,2),</strong>
<strong>(3,8,5);</strong></pre>
<p>Finalmente, conferimos se esses novos registros foram inseridos corretamente na tabela de pedidos:</p>
<pre><strong>SELECT * FROM pedidos;</strong></pre>
<p>É isso aí!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/excluir-registros-no-postgresql-delete-e-truncate-table/">Excluir Registros no PostgreSQL &#8211; DELETE e TRUNCATE TABLE</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/postgresql-banco-dados/excluir-registros-no-postgresql-delete-e-truncate-table/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como ordenar consultas com cláusula ORDER BY no PostgreSQL</title>
		<link>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-ordenar-consultas-com-clausula-order-by-no-postgresql/</link>
					<comments>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-ordenar-consultas-com-clausula-order-by-no-postgresql/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 27 Oct 2020 12:32:57 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=17078</guid>

					<description><![CDATA[<p>Cláusula ORDER BY no PostgreSQL Com a cláusula ORDER BY no PostgreSQL podemos realizar a&#160;ordenação dos resultados retornados em uma consulta, tanto em ordem crescente quanto em ordem decrescente (alfabética, por data ou numérica).&#160; Sintaxe SELECT colunas FROM tabela [WHERE condições] ORDER BY coluna, coluna ASC &#124; DESC [NULLS FIRST &#124; LAST] Opções NULLS FIRST &#124; LAST Essas duas opções são usadas para determinar se eventuais valores nulos presentes no resultado da consulta devem ser mostrados antes ou depois dos valores não-nulos. Exemplos Para nossos exemplos vamos inserir alguns registros novos em uma tabela de cadastro de produtos de nosso banco de dados de testes. Com a declaração INSERT INTO a seguir podemos criar cinco linhas novas nesta tabela: INSERT INTO produtos(cod_produto,nome_produto,descricao,preco,qtde_estoque) VALUES (6,'Detergente','Detergente líquido 500 ml',1.89,32), (7,'Leite Integral','Leite Integral caixa de 1 litro',4.60,70), (8,'Refrigerante','Garrafa de refrigerante de 600 ml',3.70,14), (9,'Refrigerante','Garrafa de refrigerante de 1 litro',6.89,16), (10,'Refrigerante','Lata de refrigerante de 350 ml',2.99,45); Também vamos inserir um registro na tabela de produtos sem no entanto especificar sua descrição. Assim poderemos testar posteriormente a opção NULLS FIRST &#124; LAST em nossos exemplos: INSERT INTO produtos(cod_produto,nome_produto,preco,qtde_estoque) VALUES&#160;(11,'Margarina',3.20,8); Vejamos agora alguns exemplos de emprego da cláusula ORDER BY em consultas SQL. Exemplos 1 &#8211; [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-ordenar-consultas-com-clausula-order-by-no-postgresql/">Como ordenar consultas com cláusula ORDER BY no PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Cláusula ORDER BY no PostgreSQL</h2>
<p>Com a cláusula <strong>ORDER BY</strong> no PostgreSQL podemos realizar a&nbsp;ordenação dos resultados retornados em uma consulta, tanto em ordem crescente quanto em ordem decrescente (alfabética, por data ou numérica).&nbsp;</p>
<h3>Sintaxe</h3>
<pre><span style="color: #800080;"><strong>SELECT colunas</strong></span>
<span style="color: #800080;"><strong>FROM tabela</strong></span>
<span style="color: #800080;"><strong>[WHERE condições]</strong></span>
<span style="color: #800080;"><strong>ORDER BY coluna, coluna ASC | DESC</strong></span>
<span style="color: #800080;"><strong>[NULLS FIRST | LAST]</strong></span></pre>
<h4><strong>Opções NULLS FIRST | LAST</strong></h4>
<p>Essas duas opções são usadas para determinar se eventuais valores nulos presentes no resultado da consulta devem ser mostrados antes ou depois dos valores não-nulos.</p>
<h3>Exemplos</h3>
<p>Para nossos exemplos vamos inserir alguns registros novos em uma tabela de cadastro de produtos de nosso banco de dados de testes. Com a declaração INSERT INTO a seguir podemos criar cinco linhas novas nesta tabela:</p>
<pre><strong>INSERT INTO produtos(cod_produto,nome_produto,descricao,preco,qtde_estoque)</strong>
<strong>VALUES</strong>
<strong>(6,'Detergente','Detergente líquido 500 ml',1.89,32),</strong>
<strong>(7,'Leite Integral','Leite Integral caixa de 1 litro',4.60,70),</strong>
<strong>(8,'Refrigerante','Garrafa de refrigerante de 600 ml',3.70,14),</strong>
<strong>(9,'Refrigerante','Garrafa de refrigerante de 1 litro',6.89,16),</strong>
<strong>(10,'Refrigerante','Lata de refrigerante de 350 ml',2.99,45);</strong></pre>
<p>Também vamos inserir um registro na tabela de produtos sem no entanto especificar sua descrição. Assim poderemos testar posteriormente a opção <strong>NULLS FIRST | LAST</strong> em nossos exemplos:</p>
<pre><strong>INSERT INTO produtos(cod_produto,nome_produto,preco,qtde_estoque)</strong>
<strong>VALUES&nbsp;(11,'Margarina',3.20,8);</strong></pre>
<p>Vejamos agora alguns exemplos de emprego da cláusula ORDER BY em consultas SQL.</p>
<h3>Exemplos</h3>
<p>1 &#8211; Retornar todos os dados da tabela de produtos, ordenados em ordem crescente de nome de produto.</p>
<pre><strong>SELECT * FROM Produtos</strong>
<strong>ORDER BY nome_produto;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17126" title="Exemplo 01 cláusula ORDER BY no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-01.jpg" alt="Exemplo 01 cláusula ORDER BY no PostgreSQL" width="601" height="300" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-01.jpg 751w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-01-420x210.jpg 420w" sizes="auto, (max-width: 601px) 100vw, 601px" /></p>
<p>2 &#8211; Vamos retornar novamente todos os dados da tabela de produtos, porém agora ordenados pela quantidade em estoque em ordem decrescente (predicado DESC).</p>
<pre><strong>SELECT * FROM Produtos</strong>
<strong>ORDER BY qtde_estoque DESC;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17127" title="Exemplo 01 cláusula ORDER BY no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-02.jpg" alt="Exemplo 02 cláusula ORDER BY no PostgreSQL" width="599" height="300" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-02.jpg 745w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-02-420x210.jpg 420w" sizes="auto, (max-width: 599px) 100vw, 599px" /></p>
<p>3 &#8211; Obtemos os nomes de produtos e seus respectivos preços, ordenados por nome de produto (ordem alfabética)</p>
<pre><strong>SELECT nome_produto, preco</strong>
<strong>FROM Produtos</strong>
<strong>ORDER BY nome_produto;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17128" title="Exemplo 03 cláusula ORDER BY no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-03.jpg" alt="Exemplo 03 cláusula ORDER BY no PostgreSQL" width="300" height="317"></p>
<p>4 &#8211;&nbsp;O mesmo que o exemplo #3, porém agora vamos ordenar primeiro por nome de produto, e então por preço para cada produto que aparecer mais de uma vez no resultado (em ordem crescente)</p>
<pre><strong>SELECT nome_produto, preco</strong>
<strong>FROM Produtos</strong>
<strong>ORDER BY nome_produto, preco;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17129" title="Exemplo 01 cláusula ORDER BY no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-04.jpg" alt="Exemplo 04 cláusula ORDER BY no PostgreSQL" width="300" height="323"></p>
<p>5 &#8211; Vamos retornar os nomes dos produtos com suas descrições, ordenados por descrição.</p>
<pre><strong>SELECT nome_produto, descricao</strong>
<strong>FROM produtos</strong>
<strong>ORDER BY descricao;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17130" title="Exemplo 05 cláusula ORDER BY no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-05.jpg" alt="Exemplo 05 cláusula ORDER BY no PostgreSQL" width="450" height="356" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-05.jpg 471w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-05-420x333.jpg 420w" sizes="auto, (max-width: 450px) 100vw, 450px" /></p>
<p>Note que há valores nulos (<strong>NULL</strong>) no resultado da consulta, e perceba onde eles aparecem.</p>
<p>6 &#8211; Agora vamos obter novamente os nomes dos produtos com suas descrições, ordenados por descrição, porém colocando os valores nulos no início da tabela de resultados (opção <strong>NULLS FIRST</strong>).</p>
<pre><strong>SELECT nome_produto, descricao</strong>
<strong>FROM produtos</strong>
<strong>ORDER BY descricao NULLS FIRST;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17131" title="Exemplo 06 cláusula ORDER BY no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-06.jpg" alt="Exemplo 06 cláusula ORDER BY no PostgreSQL" width="450" height="323" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-06.jpg 519w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-06-420x302.jpg 420w" sizes="auto, (max-width: 450px) 100vw, 450px" /></p>
<p>7 &#8211; Finalmente, vamos obter os nomes dos produtos com seus preços, ordenados por preço em ordem decrescente (do mais caro para o mais barato), porém somente dos produtos que custem mais do que R$ 10,00 (<a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/como-filtrar-consultas-com-clausula-where-no-postgresql/">filtro com cláusula WHERE</a>).</p>
<pre><strong>SELECT nome_produto, preco</strong>
<strong>FROM produtos</strong>
<strong>WHERE preco &gt; 10.00</strong>
<strong>ORDER BY preco DESC;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17132 size-full" title="Exemplo 01 cláusula ORDER BY no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/order-by-postgresql-exemplo-07.jpg" alt="Exemplo 07 cláusula ORDER BY no PostgreSQL" width="356" height="133"></p>
<p>É isso aí!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-ordenar-consultas-com-clausula-order-by-no-postgresql/">Como ordenar consultas com cláusula ORDER BY no PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-ordenar-consultas-com-clausula-order-by-no-postgresql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Operadores de Comparação em PostgreSQL</title>
		<link>https://www.bosontreinamentos.com.br/postgresql-banco-dados/operadores-de-comparacao-em-postgresql/</link>
					<comments>https://www.bosontreinamentos.com.br/postgresql-banco-dados/operadores-de-comparacao-em-postgresql/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Wed, 21 Oct 2020 15:30:39 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=17110</guid>

					<description><![CDATA[<p>Operadores de Comparação em PostgreSQL Neste artigo vamos tratar dos Operadores de Comparação em PostgreSQL, também conhecidos como Operadores Relacionais. Os operadores de comparação, como o próprio nome diz, comparam dois valores em uma consulta SQL e então retornam um valor do tipo booleano (verdadeiro ou falso), que pode ser utilizado para refinar um filtro de consulta com a cláusula WHERE, por exemplo. Os operadores de comparação disponíveis em PostgreSQL são os seguintes: Operador Descrição &#60; Menor que &#62; Maior que &#60;= Menor ou igual a &#62;= Maior ou igual a = Igual a &#60;&#62; ou != Diferente de (não igual a ) Além desses operadores padrão, também está disponível o operador especial BETWEEN, que será estudado na próxima lição. Vejamos alguns exemplos de aplicação dos operaores relacionais no PostgresSQL. Exemplos 1 &#8211; Retornar os nomes e preços dos produtos que custem mais do que R$ 12,00. SELECT nome_produto, preco FROM produtos WHERE preco &#62; 12.00; 2 &#8211; Obter os nomes dos produtos e as quantidades em estoque, dos produtos cuja quantidade no estoque seja igual ou inferior a 20 unidades. SELECT nome_produto, qtde_estoque FROM produtos WHERE qtde_estoque &#60;= 20; 3 &#8211; Retornar os nomes do produtos e a quantidade [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/operadores-de-comparacao-em-postgresql/">Operadores de Comparação em PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Operadores de Comparação em PostgreSQL</h2>
<p>Neste artigo vamos tratar dos Operadores de Comparação em PostgreSQL, também conhecidos como Operadores Relacionais. Os operadores de comparação, como o próprio nome diz, comparam dois valores em uma consulta SQL e então retornam um valor do tipo booleano (verdadeiro ou falso), que pode ser utilizado para refinar um filtro de consulta com a <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/como-filtrar-consultas-com-clausula-where-no-postgresql/">cláusula WHERE</a>, por exemplo.</p>
<p>Os operadores de comparação disponíveis em PostgreSQL são os seguintes:</p>
<table style="border-collapse: collapse; width: 56.2189%; height: 46px;" border="1">
<tbody>
<tr>
<td style="width: 50%; text-align: center;"><strong>Operador</strong></td>
<td style="width: 50%; text-align: center;"><strong>Descrição</strong></td>
</tr>
<tr>
<td style="width: 50%;">&lt;</td>
<td style="width: 50%;">Menor que</td>
</tr>
<tr>
<td style="width: 50%;">&gt;</td>
<td style="width: 50%;">Maior que</td>
</tr>
<tr>
<td style="width: 50%;">&lt;=</td>
<td style="width: 50%;">Menor ou igual a</td>
</tr>
<tr>
<td style="width: 50%;">&gt;=</td>
<td style="width: 50%;">Maior ou igual a</td>
</tr>
<tr>
<td style="width: 50%;">=</td>
<td style="width: 50%;">Igual a</td>
</tr>
<tr>
<td style="width: 50%;">&lt;&gt; ou !=</td>
<td style="width: 50%;">Diferente de (não igual a )</td>
</tr>
</tbody>
</table>
<p>Além desses operadores padrão, também está disponível o operador especial <strong>BETWEEN</strong>, que será estudado na próxima lição.</p>
<p>Vejamos alguns exemplos de aplicação dos operaores relacionais no PostgresSQL.</p>
<h3>Exemplos</h3>
<p>1 &#8211; Retornar os nomes e preços dos produtos que custem mais do que R$ 12,00.</p>
<pre><strong>SELECT nome_produto, preco</strong>
<strong>FROM produtos</strong>
<strong>WHERE preco &gt; 12.00;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17113 size-full" title="Operador de comparação em PostgreSQL 01" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/comparacao-postgresql-consulta-01.jpg" alt="Operador de comparação em PostgreSQL 01" width="353" height="140"></p>
<p>2 &#8211; Obter os nomes dos produtos e as quantidades em estoque, dos produtos cuja quantidade no estoque seja igual ou inferior a 20 unidades.</p>
<pre><strong>SELECT nome_produto, qtde_estoque</strong>
<strong>FROM produtos</strong>
<strong>WHERE qtde_estoque &lt;= 20;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17114 size-full" title="Operador de comparação em PostgreSQL 01" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/comparacao-postgresql-consulta-02.jpg" alt="Operador de comparação em PostgreSQL 02" width="373" height="227"></p>
<p>3 &#8211; Retornar os nomes do produtos e a quantidade deles no estoque, porém somente dos produtos cuja quantidade no estoque seja maior do que 10 unidade e menor ou igual a 20 unidades (ou seja, um intervalo de valores do tipo ]10, 20]).</p>
<pre><strong>SELECT nome_produto, qtde_estoque</strong>
<strong>FROM produtos</strong>
<strong>WHERE qtde_estoque &lt;= 20</strong>
<strong>AND qtde_estoque &gt; 10;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17115 size-full" title="Operador de comparação em PostgreSQL 01" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/comparacao-postgresql-consulta-03.jpg" alt="Operador de comparação em PostgreSQL 03" width="372" height="168"></p>
<p>Note que neste exemplo conectamos duas expressões de comparação por meio da palavra-chave <span style="color: #800000;"><strong>AND</strong></span>, que na verdade também é um operador &#8211; no caso, um <strong><em>operador lógico</em></strong>.</p>
<p>4 &#8211; Obter os nomes dos produtos e a quantidade armazenada no estoque, de todos os produtos <em>exceto</em> do produto de nome Refrigerante.</p>
<pre><strong>SELECT nome_produto, qtde_estoque</strong>
<strong>FROM produtos</strong>
<strong>WHERE nome_produto != 'Refrigerante';</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17116 size-full" title="Operador de comparação em PostgreSQL 04" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/10/comparacao-postgresql-consulta-04.jpg" alt="Operador de comparação em PostgreSQL 04" width="402" height="284"></p>
<p>É isso aí! Na próxima lição vamos estudar o operador BETWEEN (e NOT BETWEEN), que permite refinar ainda mais as comparações em consultas SQL.</p>
<p>Até mais!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/operadores-de-comparacao-em-postgresql/">Operadores de Comparação em PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/postgresql-banco-dados/operadores-de-comparacao-em-postgresql/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Como filtrar consultas com cláusula WHERE no PostgreSQL</title>
		<link>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-filtrar-consultas-com-clausula-where-no-postgresql/</link>
					<comments>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-filtrar-consultas-com-clausula-where-no-postgresql/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 25 Sep 2020 14:41:34 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=17025</guid>

					<description><![CDATA[<p>Filtros de consultas com a cláusula WHERE no PostgreSQL Em nossa última aula vimos como criar consultas SQL simples com o uso da cláusula SELECT no PostgreSQL. Porém, como pudemos perceber, os resultados que eram retornados traziam todas as linhas de uma tabela, ou seja, todos os registros presentes &#8211; porém, nem sempre é isso o que desejamos. Na verdade, muito provavelmente o que queremos como retorno ao realizar uma consulta SQL é obter informações sobre um registro ou um grupo de registros específicos, e não todo o conteúdo de uma tabela. Com o emprego da cláusula WHERE no PostgreSQL podemos filtrar o conjunto de registros retornados no resultado de uma consulta, de modo a obter apenas as informações relevantes (e não o conteúdo completo das colunas). Sintaxe: SELECT coluna(s) FROM tabela WHERE condição de filtragem; Na prática, podemos usar uma série de operadores de comparação para determinar a condição de filtragem com a cláusula WHERE, sendo o mais comum o sinal de igualdade (=). Também é possível usar sinais de &#62; (maior que), &#60; (menor que), &#62;= (maior ou igual a) e &#60;= (menor ou igual a). Vejamos alguns exemplos da aplicação da cláusula WHERE para filtrar os resultados [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-filtrar-consultas-com-clausula-where-no-postgresql/">Como filtrar consultas com cláusula WHERE no PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Filtros de consultas com a cláusula WHERE no PostgreSQL</h2>
<p>Em nossa última aula vimos como criar consultas SQL simples com o uso da <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/consultas-simples-em-tabelas-a-declaracao-select-no-postgresql/" target="_blank" rel="noopener">cláusula SELECT no PostgreSQL</a>. Porém, como pudemos perceber, os resultados que eram retornados traziam todas as linhas de uma tabela, ou seja, todos os registros presentes &#8211; porém, nem sempre é isso o que desejamos.</p>
<p>Na verdade, muito provavelmente o que queremos como retorno ao realizar uma consulta SQL é obter informações sobre um registro ou um grupo de registros específicos, e não todo o conteúdo de uma tabela.</p>
<p>Com o emprego da cláusula WHERE no PostgreSQL podemos filtrar o conjunto de registros retornados no resultado de uma consulta, de modo a obter apenas as informações relevantes (e não o conteúdo completo das colunas).</p>
<h4>Sintaxe:</h4>
<pre><span style="color: #800080;"><strong>SELECT coluna(s)</strong>
<strong>FROM tabela </strong>
<strong>WHERE condição de filtragem;</strong></span></pre>
<p>Na prática, podemos usar uma série de operadores de comparação para determinar a condição de filtragem com a cláusula WHERE, sendo o mais comum o sinal de igualdade (=). Também é possível usar sinais de &gt; (maior que), &lt; (menor que), &gt;= (maior ou igual a) e &lt;= (menor ou igual a).</p>
<p>Vejamos alguns exemplos da aplicação da cláusula WHERE para filtrar os resultados de consultas SQL simples.</p>
<p><strong>Exemplo 01</strong> &#8211; Retornar nome e sobrenome do autor cujo ID é igual a 3:</p>
<pre><span style="color: #ff0000;"><strong>SELECT Nome_Autor, Sobren_Autor</strong>
<strong>FROM tbl_autores</strong>
<strong>WHERE id_autor = 3;</strong></span></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17051 size-full" title="Filtrar consultas com WHERE no postgresql" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/where-postgresql-01.jpg" alt="Filtrar consultas com WHERE no postgresql" width="346" height="68"></p>
<p><strong>Exemplo 02</strong> &#8211; Retornar nomes, datas de publicação e preços dos livros que custem mais do que R$ 60,00:</p>
<pre><span style="color: #ff0000;"><strong>SELECT Nome_Livro, Data_Pub, Preco_Livro</strong>
<strong>FROM tbl_livros</strong>
<strong>WHERE Preco_Livro &gt; CAST(60.00 AS MONEY);</strong></span></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17047 size-full" title="Cláusula WHERE no PostgreSQL 02" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/where-postgresql-02.jpg" alt="Cláusula WHERE no PostgreSQL 02" width="405" height="187"></p>
<p>Neste exemplo usamos a função <strong>CAST()</strong> para converter o tipo de dado informado na condição de filtragem da cláusula WHERE (que é <em><strong>NUMERIC</strong></em>) para o tipo de dado armazenado na coluna (que foi criada com tipo&nbsp;<em><strong>MONEY</strong></em>), de modo a obter êxito ao realizar a consulta. Vamos estudar as funções de conversão de <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/tipos-de-dados-no-postgresql/" target="_blank" rel="noopener">tipos de dados no PostgreSQL</a> mais adiante em nosso curso.</p>
<p><strong>Exemplo 03</strong>: Retornar data de publicação e preço do livro de nome <em>Using Samba</em>:</p>
<pre><span style="color: #ff0000;"><strong>SELECT Nome_Livro, Data_Pub, Preco_Livro</strong></span>
<span style="color: #ff0000;"><strong>FROM tbl_livros</strong></span>
<span style="color: #ff0000;"><strong>WHERE Nome_Livro = 'Using Samba';</strong></span></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17050 size-full" title="Cláusula WHERE no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/where-postgresql-03.jpg" alt="Cláusula WHERE no PostgreSQL" width="406" height="73"></p>
<p>Note que englobamos o nome do livro entre aspas simples, pois se trata de uma consulta usando uma string de texto como filtro.</p>
<p><strong>Exemplo 04</strong>: Retornar nomes e datas de publicação dos livros publicados antes de 01/01/2010:</p>
<pre><span style="color: #ff0000;"><strong>SELECT Nome_Livro, Data_Pub</strong></span>
<span style="color: #ff0000;"><strong>FROM tbl_livros</strong></span>
<span style="color: #ff0000;"><strong>WHERE Data_Pub &lt;= '20100101';</strong></span></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-17049 size-full" title="Cláusula WHERE no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/where-postgresql-04.jpg" alt="Cláusula WHERE no PostgreSQL" width="296" height="93"></p>
<p>Também neste exemplo devemos englobar o filtro da consulta, que é uma data, entre aspas.</p>
<p>Podemos aprimorar os filtros aplicados às consultas com o emprego de cláusulas adicionais em conjunto com a cláusula WHERE. E isso é o que faremos a partir da próxima lição.</p>
<p>Até mais!</p>
<p>Anterior: <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/consultas-simples-em-tabelas-a-declaracao-select-no-postgresql/">Realizando consultas simples no PostgreSQL com declaração SELECT</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-filtrar-consultas-com-clausula-where-no-postgresql/">Como filtrar consultas com cláusula WHERE no PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-filtrar-consultas-com-clausula-where-no-postgresql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Consultas simples em tabelas &#8211; a declaração SELECT no PostgreSQL</title>
		<link>https://www.bosontreinamentos.com.br/postgresql-banco-dados/consultas-simples-em-tabelas-a-declaracao-select-no-postgresql/</link>
					<comments>https://www.bosontreinamentos.com.br/postgresql-banco-dados/consultas-simples-em-tabelas-a-declaracao-select-no-postgresql/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Thu, 03 Sep 2020 18:25:32 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<category><![CDATA[SQL]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16967</guid>

					<description><![CDATA[<p>A declaração SELECT no PostgreSQL Sem dúvida, uma das tarefas mais importantes e comuns que realizamos em bancos de dados PostgreSQL (e outros), tanto do ponto de vista do usuário quanto do desenvolvedor / DBA, é efetuar consultas (queries) nos dados armazenados nas tabelas. A declaração SQL básica que empregados para realizar essas consultas é a declaração SELECT. Neste tutorial veremos como usar o SELECT para realizar consultas simples em tabelas únicas de um banco PostgreSQL. Comando SELECT A sintaxe do SELECT é a seguinte: SELECT coluna(s) FROM tabela; Onde coluna(s) indica uma ou mais colunas cujos valores devem ser retornados pela consulta, e tabela se refere à tabela que está sendo consultada. Exemplos 1 &#8211; Vamos consultar os nomes dos autores que estão cadastrados na tabela de autores: SELECT Nome_Autor FROM tbl_autores; 2 &#8211; Agora vamos consultar todos os dados da tabela de autores (podemos empregar o caractere curinga * para indicar que queremos que todas as colunas sejam retornadas): SELECT * FROM tbl_autores; Note que a coluna data_Nasc tem todos os dados como [null], pois essas informações não foram inseridas ao cadastrar os autores. Aprenderemos como inserir esses dados na aula de atualização de registros , com a [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/consultas-simples-em-tabelas-a-declaracao-select-no-postgresql/">Consultas simples em tabelas &#8211; a declaração SELECT no PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>A declaração SELECT no PostgreSQL</h2>
<p>Sem dúvida, uma das tarefas mais importantes e comuns que realizamos em bancos de dados PostgreSQL (e outros), tanto do ponto de vista do usuário quanto do desenvolvedor / DBA, é efetuar consultas (queries) nos <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/como-inserir-dados-em-tabelas-no-postgresql-com-insert-into/">dados armazenados nas tabelas</a>. A declaração SQL básica que empregados para realizar essas consultas é a declaração <strong>SELECT</strong>.</p>
<p>Neste tutorial veremos como usar o SELECT para realizar consultas simples em <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/como-criar-tabelas-com-create-table-no-postgresql/">tabelas</a> únicas de um banco PostgreSQL.</p>
<h3>Comando SELECT</h3>
<p>A sintaxe do SELECT é a seguinte:</p>
<pre><span style="color: #800080;"><strong>SELECT <em>coluna(s)</em> FROM <em>tabela</em>;</strong></span></pre>
<p>Onde <em><strong>coluna(s)</strong></em> indica uma ou mais colunas cujos valores devem ser retornados pela consulta, e <em><strong>tabela</strong></em> se refere à tabela que está sendo consultada.</p>
<h3>Exemplos</h3>
<p>1 &#8211; Vamos consultar os nomes dos autores que estão cadastrados na tabela de autores:</p>
<pre><strong>SELECT Nome_Autor FROM tbl_autores;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16973 size-full" title="Consulta autores postgresql SQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-autor.jpg" alt="Consulta autores postgresql SQL" width="354" height="421" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-autor.jpg 354w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-autor-353x420.jpg 353w" sizes="auto, (max-width: 354px) 100vw, 354px" /></p>
<p>2 &#8211; Agora vamos consultar todos os dados da tabela de autores (podemos empregar o caractere curinga <strong>*</strong> para indicar que queremos que todas as colunas sejam retornadas):</p>
<pre><strong>SELECT * FROM tbl_autores;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16974 size-full" title="Consulta à tabela de autores no postgres" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-autor-completa.jpg" alt="Consulta à tabela de autores no postgres" width="605" height="434" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-autor-completa.jpg 605w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-autor-completa-420x301.jpg 420w" sizes="auto, (max-width: 605px) 100vw, 605px" /></p>
<p>Note que a coluna d<em>ata_Nasc</em> tem todos os dados como <strong>[null]</strong>, pois essas informações não foram inseridas ao cadastrar os autores. Aprenderemos como inserir esses dados na aula de atualização de registros , com a declaração UPDATE.</p>
<p>3 &#8211; Consultar os nomes dos livros presentes na tabela de livros:</p>
<pre><strong>SELECT Nome_Livro FROM tbl_livros;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16975 size-full" title="Consultar os nomes dos livros no postgresql" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-nome-livro.jpg" alt="Consultar os nomes dos livros no postgresql" width="368" height="250"></p>
<p>4 &#8211; Consultar os gêneros já cadastrados na tabela de gêneros (assuntos):</p>
<pre><strong>SELECT Nome_Genero FROM tbl_generos;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16976 size-full" title="Gêneros de livros na tabela do postgres - consulta SQL com SELECT" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-generos.jpg" alt="Gêneros de livros na tabela do postgres - consulta SQL com SELECT" width="365" height="323"></p>
<p>5 &#8211; Consultar os nomes de livros e IDs de seus respectivos autores presentes na tabela de livros:</p>
<pre><strong>SELECT Nome_Livro, Autor FROM tbl_livros;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16977 size-full" title="Consultar nome do livro e id do autor no postgreSQL com SELECT" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-nome-livro-id-autor.jpg" alt="Consultar nome do livro e id do autor no postgreSQL com SELECT" width="362" height="247"></p>
<p>6 &#8211; Consultar os nomes dos livros, seus preços e datas de publicação, presentes na tabela de livros:</p>
<pre><strong>SELECT Nome_Livro, Preco_Livro, Data_Pub</strong>
<strong>FROM tbl_livros;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16978 size-full" title="Consultar nome de livro, preço e data de publicação com SQL SELECT no postgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-nome-livro-preco-data-pub.jpg" alt="Consultar nome de livro, preço e data de publicação com SQL SELECT no postgreSQL" width="430" height="249" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-nome-livro-preco-data-pub.jpg 430w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/09/select-consulta-nome-livro-preco-data-pub-420x243.jpg 420w" sizes="auto, (max-width: 430px) 100vw, 430px" /></p>
<p>É isso aí! Na próxima lição vamos começar a incrementar nossas consultas SQL usando declarações adicionais como filtros e comandos de ordenação. Até!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/consultas-simples-em-tabelas-a-declaracao-select-no-postgresql/">Consultas simples em tabelas &#8211; a declaração SELECT no PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/postgresql-banco-dados/consultas-simples-em-tabelas-a-declaracao-select-no-postgresql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como inserir dados em tabelas no PostgreSQL com INSERT INTO</title>
		<link>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-inserir-dados-em-tabelas-no-postgresql-com-insert-into/</link>
					<comments>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-inserir-dados-em-tabelas-no-postgresql-com-insert-into/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Tue, 25 Aug 2020 20:49:57 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16925</guid>

					<description><![CDATA[<p>Como inserir dados em tabelas no PostgreSQL: comando INSERT INTO Após criar as tabelas com seus relacionamentos, como fizemos na lição passada, estamos prontos para começar a inserir dados no banco (registros). Para tal empregamos o comando SQL&#160;INSERT INTO. Sintaxe padrão: INSERT INTO nome_tabela (coluna1, coluna2,...) VALUES (valor1, valor2,...); Conforme a sintaxe mostrada, especificamos a tabela e quais colunas dessa tabela irão armazenar os dados, e na sequencia, logo após a palavra-chave VALUES, especificamos os dados em si &#8211; rigorosamente na mesma ordem em que as colunas foram listadas no comando. Se houver uma coluna usando auto incremento (SERIAL), ela não deve ser incluída na listagem de colunas do comando, pois seus dados numéricos serão gerados e inseridos automaticamente pelo PostgreSQL toda vez que um novo registro for adicionado. Inserir novos registros em tabelas No artigo passado nós criamos quatro tabelas para nosso banco db_Biblioteca, as tabelas de Autores, Editoras, Gêneros e Livros.. Vamos inserir dados (registros) nessas tabelas agora, usando para isso o comando INSERT INTO. Tabela de Editoras Vamos cadastrar cinco editoras na tabela de editoras, usando comandos INSERT INTO discretos (separados): INSERT INTO tbl_editoras (ID_Editora, Nome_Editora) VALUES (1,'Prentice Hall'); INSERT INTO tbl_editoras (ID_Editora, Nome_Editora) VALUES (2,'O´Reilly'); INSERT [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-inserir-dados-em-tabelas-no-postgresql-com-insert-into/">Como inserir dados em tabelas no PostgreSQL com INSERT INTO</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Como inserir dados em tabelas no PostgreSQL: comando INSERT INTO</h2>
<p>Após <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/como-criar-tabelas-com-create-table-no-postgresql/">criar as tabelas</a> com seus relacionamentos, como fizemos na lição passada, estamos prontos para começar a inserir dados no banco (registros). Para tal empregamos o comando SQL&nbsp;<strong>INSERT INTO</strong>.</p>
<h3>Sintaxe padrão:</h3>
<pre><span style="color: #993366;"><b>INSERT INTO nome_tabela (coluna1, coluna2,...)
VALUES (valor1, valor2,...);</b></span></pre>
<p>Conforme a sintaxe mostrada, especificamos a tabela e quais colunas dessa tabela irão armazenar os dados, e na sequencia, logo após a palavra-chave <strong>VALUES</strong>, especificamos os dados em si &#8211; rigorosamente na mesma ordem em que as colunas foram listadas no comando.</p>
<p>Se houver uma coluna usando auto incremento (SERIAL), ela não deve ser incluída na listagem de colunas do comando, pois seus dados numéricos serão gerados e inseridos automaticamente pelo PostgreSQL toda vez que um novo registro for adicionado.</p>
<h3>Inserir novos registros em tabelas</h3>
<p>No artigo passado nós criamos quatro tabelas para nosso banco db_Biblioteca, as tabelas de Autores, Editoras, Gêneros e Livros.. Vamos inserir dados (registros) nessas tabelas agora, usando para isso o comando <strong>INSERT INTO</strong>.</p>
<h4>Tabela de Editoras</h4>
<p>Vamos cadastrar cinco editoras na tabela de editoras, usando comandos INSERT INTO discretos (separados):</p>
<pre><strong>INSERT INTO tbl_editoras (ID_Editora, Nome_Editora) VALUES (1,'Prentice Hall');</strong>
<strong>INSERT INTO tbl_editoras (ID_Editora, Nome_Editora) VALUES (2,'O´Reilly');</strong>
<strong>INSERT INTO tbl_editoras (ID_Editora, Nome_Editora) VALUES (3,'Microsoft Press');</strong>
<strong>INSERT INTO tbl_editoras (ID_Editora, Nome_Editora) VALUES (4,'Wiley');</strong>
<strong>INSERT INTO tbl_editoras (ID_Editora, Nome_Editora) VALUES (5,'McGraw-Hill Education');</strong></pre>
<p>Executamos o comando de inserção cinco vezes, uma para cada registro inserido. Esta forma não é a mais performática, e faremos de outra maneira nas próximas tabelas.</p>
<h4>Tabela de Autores</h4>
<p>Agora cadastraremos 14 autores na tabela de autores. Vamos usar uma forma simplificada da sintaxe do comando INSERT INTO, na qual executamos o comando apenas uma vez, passando todos os registros (linhas) separados por uma vírgula:</p>
<pre><strong>INSERT INTO tbl_autores</strong>
<strong>VALUES</strong>
<strong>(1, 'Daniel', 'Barret'),</strong>
<strong>(2, 'Gerald', 'Carter'),</strong>
<strong>(3, 'Mark', 'Sobell'),</strong>
<strong>(4, 'William', 'Stanek'),</strong>
<strong>(5, 'Richard', 'Blum'),</strong>
<strong>(6, 'Jostein', 'Gaarder'),</strong>
<strong>(7, 'Umberto', 'Eco'),</strong>
<strong>(8, 'Neil', 'De Grasse Tyson'),</strong>
<strong>(9, 'Stephen', 'Hawking'),</strong>
<strong>(10, 'Stephen', 'Jay Gould'),</strong>
<strong>(11, 'Charles', 'Darwin'),</strong>
<strong>(12, 'Alan', 'Turing'),</strong>
<strong>(13, 'Simon', 'Monk'),</strong>
<strong>(14, 'Paul', 'Scherz');</strong></pre>
<h4>Tabela de Gêneros</h4>
<p>Vamos cadastrar 10 gêneros na tabela de gêneros:</p>
<pre><strong>INSERT INTO tbl_generos</strong>
<strong>VALUES</strong>
<strong>(1, 'Tecnologia'),</strong>
<strong>(2, 'História'),</strong>
<strong>(3, 'Literatura'),</strong>
<strong>(4, 'Astronomia'),</strong>
<strong>(5, 'Botânica'),</strong>
<strong>(6, 'Geografia'),</strong>
<strong>(7, 'Matemática'),</strong>
<strong>(8, 'Química'),</strong>
<strong>(9, 'Engenharia'),</strong>
<strong>(10, 'Ficção Científica');</strong></pre>
<h4>Tabela de Livros</h4>
<p>Finalmente, vamos inserir 7 livros na tabela de livros. Note que não é preciso informar um código (ID) para os livros, pois esta coluna foi criada como auto-incremento (SERIAL).</p>
<pre><strong>INSERT INTO tbl_livros (Nome_Livro, Data_Pub, Preco_Livro, Genero, Autor, Editora)</strong>
<strong>VALUES</strong>
<strong>('Linux Command Line and Shell Scripting', '20150109', 68.35, 1, 5, 4),</strong>
<strong>('SSH, the Secure Shell', '20050517', 58.30, 1, 1, 2),</strong>
<strong>('Using Samba', '20031221', 61.45, 1, 2, 2),</strong>
<strong>('Fedora and Red Hat Linux', '20140110', 62.24, 1, 3, 1),</strong>
<strong>('Windows Server 2012 Inside Out', '20130125', 66.80, 1, 4, 3),</strong>
<strong>('Microsoft Exchange Server 2010', '20101201', 45.30, 1, 4, 3),</strong>
<strong>('Practical Electronics for Inventors', '20160324', 67.80, 1, 13, 5);</strong></pre>
<p>Após a execução desses comandos, devemos ter registros inseridos nas quatro tabelas de nosso banco de dados. Se ocorreu algum erro, revise o código que vocÊ digitou &#8211; geralmente, se trata de algo simplório, como uma vírgula faltando ou parêntese não fechado. De qualquer maneira, precisamos agora conferir se os dados foram cadastrados corretamente.</p>
<p>É o que faremos na sequência.</p>
<h3>Testar a inserção de dados</h3>
<p>Vamos&nbsp;executar os comandos a seguir, que são consultas simples usando a cláusula SQL SELECT, para verificar se os registros foram inseridos de forma correta nas tabelas do banco de dados no PostgreSQL:</p>
<pre><strong>SELECT * FROM tbl_autores;</strong>
<strong>SELECT * FROM tbl_editoras;</strong>
<strong>SELECT * FROM tbl_livros;</strong>
<strong>SELECT * FROM tbl_generos;</strong></pre>
<p>Veja o resultado da inserção de dados na tabela de livros, verificado com o comando executado acima:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16950 size-full" title="Consulta simples em uma tabela do PostgreSQL com SELECT" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/select-tabela-livros-postgresql.jpg" alt="Consulta simples em uma tabela do PostgreSQL com SELECT" width="815" height="254" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/select-tabela-livros-postgresql.jpg 815w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/select-tabela-livros-postgresql-420x131.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/08/select-tabela-livros-postgresql-768x239.jpg 768w" sizes="auto, (max-width: 815px) 100vw, 815px" /></p>
<p>Dados inseridos com sucesso na tabela!</p>
<p>Na próxima lição vamos aprender a realizar consultas simples usando o comando SELECT, que empregamos para testar o cadastro de dados na tabela aqui. Até!</p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-inserir-dados-em-tabelas-no-postgresql-com-insert-into/">Como inserir dados em tabelas no PostgreSQL com INSERT INTO</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-inserir-dados-em-tabelas-no-postgresql-com-insert-into/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Como listar Bancos de Dados e Tabelas no PostgreSQL</title>
		<link>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-listar-bancos-de-dados-e-tabelas-no-postgresql/</link>
					<comments>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-listar-bancos-de-dados-e-tabelas-no-postgresql/?noamp=mobile#respond</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Sun, 24 May 2020 17:48:54 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=16736</guid>

					<description><![CDATA[<p>Listar bancos de dados e tabelas no PostgreSQL Uma das operações mais comuns que realizamos ao trabalhar com bancos de dados no PostgreSQL é justamente realizar a verificação dos bancos de dados e respectivas tabelas existentes no sistema. Para tal podemos usar alguns comandos simples do psql, os quais nos irão retornar dados importantes como: Nomes dos bancos de dados Proprietários dos objetos Tipo de codificação do banco Colação (Collate) Privilégios de acesso Banco de dados conectado atualmente Esquemas Nomes das tabelas e seus proprietários Entre outras. Para que possamos visualizar os bancos de dados no postgres (e também suas tabelas), o primeiro passo será nos logarmos no utilitário psql via prompt de comandos (Windows) ou terminal (Linux / macOS) com um usuário válido, e então executamos os comandos que serão mostrados a seguir. Listar os bancos existentes no postgres Para listar os bancos de dados existentes no postgres usamoso comando \l: \l Note que meu sistema possui diversos bancos de dados, cujos nomes são exibidos na primeira coluna à esquerda dos resultados. As demais colunas trazem informações adicionais sobre cada banco. Podemos determinar o banco conectado atualmente com o comando a seguir: SELECT current_database(); Meu banco conectado atualmente (selecionado) [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-listar-bancos-de-dados-e-tabelas-no-postgresql/">Como listar Bancos de Dados e Tabelas no PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Listar bancos de dados e tabelas no PostgreSQL</h2>
<p>Uma das operações mais comuns que realizamos ao trabalhar com bancos de dados no PostgreSQL é justamente realizar a verificação dos bancos de dados e respectivas tabelas existentes no sistema. Para tal podemos usar alguns comandos simples do psql, os quais nos irão retornar dados importantes como:</p>
<ul>
<li>Nomes dos bancos de dados</li>
<li>Proprietários dos objetos</li>
<li>Tipo de codificação do banco</li>
<li>Colação (Collate)</li>
<li>Privilégios de acesso</li>
<li>Banco de dados conectado atualmente</li>
<li>Esquemas</li>
<li>Nomes das tabelas e seus proprietários</li>
</ul>
<p>Entre outras.</p>
<p>Para que possamos visualizar os bancos de dados no postgres (e também suas tabelas), o primeiro passo será nos logarmos no utilitário psql via prompt de comandos (Windows) ou terminal (Linux / macOS) com um usuário válido, e então executamos os comandos que serão mostrados a seguir.</p>
<h3>Listar os bancos existentes no postgres</h3>
<p>Para listar os bancos de dados existentes no postgres usamoso comando \l:</p>
<pre><strong>\l</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16756" title="Listar bancos de dados no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-listar-bancos-de-dados-1024x370.jpg" alt="Listar bancos de dados no PostgreSQL" width="700" height="253" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-listar-bancos-de-dados-1024x370.jpg 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-listar-bancos-de-dados-420x152.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-listar-bancos-de-dados-768x278.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-listar-bancos-de-dados.jpg 1438w" sizes="auto, (max-width: 700px) 100vw, 700px" /></p>
<p>Note que meu sistema possui diversos bancos de dados, cujos nomes são exibidos na primeira coluna à esquerda dos resultados. As demais colunas trazem informações adicionais sobre cada banco.</p>
<p>Podemos determinar o banco conectado atualmente com o comando a seguir:</p>
<pre><strong>SELECT current_database();</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16757 size-full" title="consultar banco de dados atual no postgresql" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-bancos-de-dados-atual.jpg" alt="consultar banco de dados atual no postgresql" width="332" height="141"></p>
<p>Meu banco conectado atualmente (selecionado) é o banco de nome <em><strong>fabio</strong></em>. Podemos conectar a um outro banco de dados usando a sintaxe a seguir:</p>
<pre><strong><span style="color: #800080;">\c nome_do_banco</span> <span style="color: #339966;">//conecta com usuário atual</span></strong>
<span style="color: #339966;"><strong>//ou</strong></span>
<strong><span style="color: #800080;">\c nome_do_banco nome_outro_usuário</span> <span style="color: #339966;">//conecta com outro usuário ao banco</span></strong></pre>
<p>Por exemplo, para conectar ao banco de nome &#8220;kiki&#8221;:</p>
<pre><strong>\c kiki</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16758" title="Conectar a outro banco de dados no postgresql" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-conectar-bancos-de-dados-1024x34.jpg" alt="Conectar a outro banco de dados no postgresql" width="687" height="23" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-conectar-bancos-de-dados-1024x34.jpg 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-conectar-bancos-de-dados-420x14.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-conectar-bancos-de-dados-768x26.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-conectar-bancos-de-dados.jpg 1165w" sizes="auto, (max-width: 687px) 100vw, 687px" /></p>
<p>Também podemos ver informações a respeito da conexão atual, como o nome do banco de dados em uso e o usuário conectado, além da porta de conexão empregada, com o comando <em><strong>conninfo</strong></em>:</p>
<pre><strong>\conninfo</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16759" title="Ver dados da conexão atual no postgresql" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-conninfo-1024x50.jpg" alt="Ver dados da conexão atual no postgresql" width="710" height="35" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-conninfo-1024x50.jpg 1024w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-conninfo-420x21.jpg 420w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-conninfo-768x38.jpg 768w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-conninfo.jpg 1461w" sizes="auto, (max-width: 710px) 100vw, 710px" /></p>
<h2>Listar tabelas de banco de dados no PostgreSQL</h2>
<p>Para listar as tabelas existentes no banco conectado, usamos os comandos do psql <strong>\d</strong> ou <strong>\dt</strong>:</p>
<pre><span style="color: #800080;"><strong>\dt</strong></span>
<span style="color: #339966;"><strong>// ou</strong></span>
<span style="color: #800080;"><strong>\d</strong></span></pre>
<p>Como o banco conectado atualmente ainda não possui nenhuma tabela criada, vamos <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/como-criar-tabelas-com-create-table-no-postgresql/">criar uma tabela no postgres</a> e depois executaremos novamente o comando <strong>\d</strong> para verificar se a tabela foi criada com sucesso.</p>
<p>Para criar uma tabela de exemplo, contendo dois campos (id e valor), vamos empregar a seguinte declaração SQL:</p>
<pre><strong>CREATE TABLE teste (</strong>
<strong>id int PRIMARY KEY,</strong>
<strong>valor int);</strong></pre>
<p>Digite a declaração como está no prompt do psql, não esquecendo de colocar o ponto-e-vírgula no final &#8211; esse caractere é que diz ao psql que a declaração finalizou e deve ser executada ao pressionar enter.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16760 size-full" title="PostgreSQL create table kiki" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-create-table-exemplo.jpg" alt="PostgreSQL create table kiki" width="440" height="169" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-create-table-exemplo.jpg 440w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-create-table-exemplo-420x161.jpg 420w" sizes="auto, (max-width: 440px) 100vw, 440px" /></p>
<p>Deve aparecer a mensagem &#8220;<strong>CREATE TABLE</strong>&#8221; se nenhum erro ocorrer.</p>
<p>Vamos listar agora a tabela criada no banco atual:</p>
<pre><strong>\dt</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-16761 size-full" title="Mostrar tabelas no postgresql" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-mostrar-tabelas.jpg" alt="Mostrar tabelas no postgresql" width="557" height="173" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-mostrar-tabelas.jpg 557w, https://www.bosontreinamentos.com.br/wp-content/uploads/2020/05/postgresql-mostrar-tabelas-420x130.jpg 420w" sizes="auto, (max-width: 557px) 100vw, 557px" /></p>
<p>Note que este comando nos informa o nome do esquema, tipo do objeto (tabela), os nomes das tabelas e seus respectivos donos (proprietários). No caso, é informado o nome da tabela que criamos anteriormente &#8211; <em><strong>teste</strong></em> &#8211; e seu respectivo proprietário, que é o usuário <em><strong>fabio</strong></em>.</p>
<p>Veja também: <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/criando-um-banco-de-dados-no-postgresql-comando-createdb/">Como criar um banco de dados no PostgreSQL com comando createdb</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-listar-bancos-de-dados-e-tabelas-no-postgresql/">Como listar Bancos de Dados e Tabelas no PostgreSQL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/postgresql-banco-dados/como-listar-bancos-de-dados-e-tabelas-no-postgresql/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Auto-incremento no PostgreSQL com SERIAL</title>
		<link>https://www.bosontreinamentos.com.br/postgresql-banco-dados/auto-incremento-no-postgresql-com-serial/</link>
					<comments>https://www.bosontreinamentos.com.br/postgresql-banco-dados/auto-incremento-no-postgresql-com-serial/?noamp=mobile#comments</comments>
		
		<dc:creator><![CDATA[Fábio dos Reis]]></dc:creator>
		<pubDate>Fri, 22 Nov 2019 12:40:34 +0000</pubDate>
				<category><![CDATA[PostgreSQL]]></category>
		<category><![CDATA[Bancos de Dados]]></category>
		<guid isPermaLink="false">http://www.bosontreinamentos.com.br/?p=13569</guid>

					<description><![CDATA[<p>Coluna de Auto-incremento no PostgreSQL&#160;com SERIAL&#160; No PostgreSQL existe um tipo especial de objeto de banco de dados chamado de Sequência, que permite gerar, como o nome diz, uma sequência de números inteiros. Usamos esse objeto, normalmente, para gerar valores em um campo de chave primária de forma automatizada. Assim, podemos criar um campo de auto-incremento no PostgreSQL. Para tal, usamos a palavra-chave SERIAL (que é um pseudo-tipo) ao criarmos uma tabela, para identificar a coluna que receberá os valores sequenciais. Ao usarmos a palavra-chave SERIAL, o PostgreSQL irá criar um objeto de sequência e configurar o próximo valor numérico gerado como valor padrão da coluna em si. Além disso, a restrição NOT NULL é adicionada automaticamente à coluna, pois ela sempre terá um valor associado. Além do pseudo-tipo SERIAL, o PostgreSQL também possui outros pseudo-tipos para geração de sequências, como o SMALLSERIAL e BIGSERIAL. A tabela a seguir mostra as características de cada um desses pseudo-tipos: Nome do Pseudo-Tipo Tamanho Faixa de Valores SMALLSERIAL 2 bytes de 1 a 32.767 SERIAL 4 bytes de 1 a 2.147.483.647 BIGSERIAL 8 bytes de 1 a 9.223.372.036.854.775.807 Exemplo Vejamos um exemplo de emprego de sequência de auto-incremento. CREATE TABLE Funcionarios ( IdFunc [...]</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/auto-incremento-no-postgresql-com-serial/">Auto-incremento no PostgreSQL com SERIAL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Coluna de Auto-incremento no PostgreSQL&nbsp;com SERIAL&nbsp;</h2>
<p>No PostgreSQL existe um tipo especial de objeto de banco de dados chamado de Sequência, que permite gerar, como o nome diz, uma sequência de números inteiros. Usamos esse objeto, normalmente, para gerar valores em um campo de chave primária de forma automatizada. Assim, podemos criar um campo de auto-incremento no PostgreSQL.</p>
<p>Para tal, usamos a palavra-chave <strong>SERIAL</strong> (que é um pseudo-tipo) ao criarmos uma tabela, para identificar a coluna que receberá os valores sequenciais.</p>
<p>Ao usarmos a palavra-chave SERIAL, o PostgreSQL irá criar um objeto de sequência e configurar o próximo valor numérico gerado como valor padrão da coluna em si. Além disso, a restrição NOT NULL é adicionada automaticamente à coluna, pois ela sempre terá um valor associado.</p>
<p>Além do pseudo-tipo SERIAL, o PostgreSQL também possui outros pseudo-tipos para geração de sequências, como o SMALLSERIAL e BIGSERIAL. A tabela a seguir mostra as características de cada um desses pseudo-tipos:</p>
<table style="border-collapse: collapse; width: 93.2272%; height: 108px;" border="1">
<thead>
<tr>
<td style="width: 31.0077%; text-align: center;"><strong>Nome do Pseudo-Tipo</strong></td>
<td style="width: 19.1743%; text-align: center;"><strong>Tamanho</strong></td>
<td style="width: 49.8179%; text-align: center;"><strong>Faixa de Valores</strong></td>
</tr>
</thead>
<tbody>
<tr>
<td style="width: 31.0077%;">SMALLSERIAL</td>
<td style="width: 19.1743%;">2 bytes</td>
<td style="width: 49.8179%;">de 1 a 32.767</td>
</tr>
<tr>
<td style="width: 31.0077%;">SERIAL</td>
<td style="width: 19.1743%;">4 bytes</td>
<td style="width: 49.8179%;">de 1 a 2.147.483.647</td>
</tr>
<tr>
<td style="width: 31.0077%;">BIGSERIAL</td>
<td style="width: 19.1743%;">8 bytes</td>
<td style="width: 49.8179%;">de 1 a 9.223.372.036.854.775.807</td>
</tr>
</tbody>
</table>
<h3>Exemplo</h3>
<p>Vejamos um exemplo de emprego de sequência de auto-incremento.</p>
<pre><strong>CREATE TABLE Funcionarios (</strong>
<strong> IdFunc SERIAL PRIMARY KEY,</strong>
<strong> NomeFunc VARCHAR(60),</strong>
<strong> DescrCargo TEXT</strong>
<strong>);</strong></pre>
<p>A coluna IdFunc é a coluna que receberá dados numéricos sequenciais, por conta do emprego da palavra SERIAL.</p>
<h3>Testando</h3>
<p>Para testar o auto-incremento vamos inserir alguns registros na tabela de funcionários criada anteriormente. Note que não devemos inserir dados na coluna IdFunc, pois seus valores serão gerados automaticamente para cada registro inserido.</p>
<pre><strong>INSERT INTO Funcionarios (NomeFunc, DescrCargo)</strong>
<strong>VALUES</strong>
<strong>('Fábio','CEO da Bóson Treinamentos em Tecnologia'),</strong>
<strong>('Sandra','Diretora da Okinawa Foods'),</strong>
<strong>('Ana','Relações Públicas do jornal Diário do Naturalista);</strong></pre>
<p>Para ver o resultado, basta realizar uma consulta simples aos dados da tabela:</p>
<pre><strong>SELECT * FROM Funcionarios;</strong></pre>
<p>Resultado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-15753 size-full" title="como usar tipo SERIAL no postgresql" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/11/postgresql-serial-consulta.png" alt="como usar tipo SERIAL no postgresql" width="602" height="226" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/11/postgresql-serial-consulta.png 602w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/11/postgresql-serial-consulta-420x158.png 420w" sizes="auto, (max-width: 602px) 100vw, 602px" /></p>
<p>Note os valores sequenciais na coluna idFunc, criados automaticamente.</p>
<p>Se acrescentarmos a cláusula <strong>RETURNING</strong> ao inserir linhas na tabela, será retornado o valor gerado na coluna de auto incremento, como no exemplo a seguir:</p>
<pre><strong>INSERT INTO Funcionarios (NomeFunc, DescrCargo)</strong>
<strong>VALUES</strong>
<strong>('Monica','Pesquisadora de Novas Tecnologias na Bóson Treinamentos')</strong>
<strong>RETURNING IdFunc;</strong></pre>
<p>Resultado:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-15754 size-full" title="Cláusula RETURNING no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/11/clausula-returning-postgresql-serial.png" alt="Cláusula RETURNING no PostgreSQL" width="239" height="126"></p>
<p>Note que ao inserir o novo registro é exibido na saída de dados o valor da coluna de auto-incremento que foi gerado &#8211; no caso, o número 4. Se realizarmos uma nova consulta à tabela veremos esse valor associado ao novo registro:</p>
<pre><strong>SELECT * FROM Funcionarios;</strong></pre>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-15755 size-full" title="Consulta com SERIAL no PostgreSQL" src="http://www.bosontreinamentos.com.br/wp-content/uploads/2019/11/postgresql-serial-consulta-returning.png" alt="Consulta com SERIAL no PostgreSQL" width="640" height="218" srcset="https://www.bosontreinamentos.com.br/wp-content/uploads/2019/11/postgresql-serial-consulta-returning.png 640w, https://www.bosontreinamentos.com.br/wp-content/uploads/2019/11/postgresql-serial-consulta-returning-420x143.png 420w" sizes="auto, (max-width: 640px) 100vw, 640px" /></p>
<p>É isso aí! Mostramos nesta lição como criar uma coluna de auto-incremento em PostgreSQL usando SERIAL. Falaremos mais sobre outros tipos de sequências em ma próxima lição.</p>
<p>Até mais!</p>
<p>Anterior: <a href="http://www.bosontreinamentos.com.br/postgresql-banco-dados/como-criar-tabelas-com-create-table-no-postgresql/">Como criar tabelas no PostgreSQL com CREATE TABLE</a></p>
<p>&nbsp;</p>
<p>O post <a href="https://www.bosontreinamentos.com.br/postgresql-banco-dados/auto-incremento-no-postgresql-com-serial/">Auto-incremento no PostgreSQL com SERIAL</a> apareceu primeiro em <a href="https://www.bosontreinamentos.com.br">Bóson Treinamentos em Ciência e Tecnologia</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.bosontreinamentos.com.br/postgresql-banco-dados/auto-incremento-no-postgresql-com-serial/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
	</channel>
</rss>
