<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ PostgreSQL - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Aprenda a codificar - de graça. Tutoriais de programação em Python, JavaScript, Linux e muito mais. ]]>
        </description>
        <link>https://www.freecodecamp.org/portuguese/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ PostgreSQL - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/portuguese/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Tue, 26 May 2026 04:21:29 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/portuguese/news/tag/postgresql/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Como usar a correspondência de strings semelhantes com o Postgresql ]]>
                </title>
                <description>
                    <![CDATA[ É fato: as pessoas cometem erros de digitação ou simplesmente usam grafias alternativas com frequência. Seja qual for a causa, de um ponto de vista prático, strings diferentes, mas semelhantes, podem representar desafios para os desenvolvedores de software. Sua aplicação precisa ser capaz de lidar com esses casos extremos inevitáveis. ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-usar-a-correspondencia-de-strings-semelhantes-com-o-postgresql/</link>
                <guid isPermaLink="false">655f525313a65603e6501c49</guid>
                
                    <category>
                        <![CDATA[ PostgreSQL ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Daniel Rosa ]]>
                </dc:creator>
                <pubDate>Thu, 23 Nov 2023 14:06:05 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/5f9ca063740569d1a4ca4858.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/fuzzy-string-matching-with-postgresql/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to use fuzzy string matching with Postgresql</a>
      </p><p>É fato: as pessoas cometem erros de digitação ou simplesmente usam grafias alternativas com frequência.</p><p>Seja qual for a causa, de um ponto de vista prático, strings diferentes, mas semelhantes, podem representar desafios para os desenvolvedores de software. Sua aplicação precisa ser capaz de lidar com esses casos extremos inevitáveis.</p><p>Veja nomes, por exemplo. Algumas pessoas me chamam de Peter em alguns lugares, de Pete em outros e assim por diante. Há outras variantes e meu nome pode ser representado Assim:</p><ul><li>"Pete Gleeson"</li><li>"Peter J Gleeson"</li><li>"Mr P Gleeson"</li><li>"Gleeson, Peter"</li></ul><p>Isso sem falar em grafias alternativas do meu sobrenome, como "Gleason". Todas essas são variações para apenas uma string – combiná-las entre si programaticamente pode não parecer algo óbvio.</p><p>Felizmente, existem soluções por aí.</p><p>O nome genérico para essas soluções é 'correspondência de strings por semelhança' (em inglês, <em>fuzzy string matching</em>). O "<em>fuzzy</em>" refere-se ao fato de que a solução não procura uma correspondência perfeita, posição por posição, ao comparar duas strings. Em vez disso, ela permite algum grau de diferença (ou "desvio").</p><p>Existem soluções disponíveis nas mais diversas linguagens de programação. Hoje, vamos explorar algumas opções disponíveis no Postgresql (ou 'Postgres') – uma variante do SQL, de código aberto, amplamente utilizada e com alguns recursos adicionais bastante úteis.</p><h3 id="configura-o"><strong>Configuração</strong></h3><p>Primeiro, vejamos se você tem o <a href="https://www.postgresql.org/download/">Postgres instalado em sua máquina</a>.</p><p>Em seguida, criamos um banco de dados em seu próprio diretório (chame-o como quiser – para a demonstração, usei o nome 'fuzz-demo'). A partir da linha de comando, digite:</p><pre><code>$ mkdir fuzz-demo &amp;&amp; cd fuzz-demo
$ initdb .
$ pg_ctl -D . start
$ createdb fuzz-demo</code></pre><p>Para a demonstração, usei uma tabela com detalhes sobre artistas no Museu de Arte Moderna de Nova York. Você pode <a href="https://www.kaggle.com/momanyc/museum-collection">fazer o download do arquivo artists.csv no Kaggle.</a></p><p>Em seguida, iniciamos o psql (um front-end com base no terminal para o Postgresql):</p><pre><code>$ psql fuzz-demo</code></pre><p>Agora, criamos uma tabela chamada <code>artists</code>:</p><pre><code class="language-sql">CREATE TABLE artists (
	artist_id INT,
    name VARCHAR,
    nationality VARCHAR,
    gender VARCHAR,
    birth_year INT,
    death_year INT);</code></pre><p>Por fim, usamos a função COPY do Postgresql para copiar o conteúdo do arquivo <code>artists.csv</code> para a tabela:</p><pre><code class="language-sql">COPY artists FROM '~/Downloads/artists.csv' DELIMTER ',' CSV HEADER;</code></pre><p>Se tudo estiver certo até o momento, você já pode começar a fazer consultas à tabela <code>artists</code>.</p><pre><code class="language-sql">SELECT * FROM artists LIMIT 10;</code></pre><h3 id="filtros-curinga-wildcards-"><strong>Filtros curinga (<em>wildcards</em>)</strong></h3><p>Digamos que você se lembre do primeiro nome de uma artista chamada Bárbara, mas não consegue se lembrar bem do segundo nome dela. Começa com 'Hep...', mas você não tem certeza de como termina.</p><p>Aqui, você pode usar um filtro e o operador curinga do SQL, <code>%</code>. Esse símbolo representa qualquer número de caracteres não especificados.</p><pre><code class="language-sql">SELECT
	* 
FROM artists
WHERE name LIKE 'Barbara%'
AND name LIKE '%Hep%';</code></pre><p>A primeira parte do filtro encontra artistas cujo nome começa com 'Bárbara' e termina em qualquer combinação de caracteres.</p><p>A segunda parte do filtro encontra artistas cujo nome pode começar e terminar com qualquer combinação de caracteres, mas deve conter as letras 'Hep', nessa ordem.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-95.png" class="kg-image" alt="image-95" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/image-95.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/11/image-95.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-95.png 1056w" sizes="(min-width: 720px) 720px" width="1056" height="92" loading="lazy"><figcaption>O resultado mostra a artista britânica Barbara Hepworth</figcaption></figure><p>O que você faria, no entanto, se não lembrasse como soletrar qualquer um dos nomes? Os filtros e os curingas têm um limite.</p><h3 id="usando-as-trigramas"><strong>Usando as trigramas</strong></h3><p>Felizmente, o Postgres tem uma extensão útil com o nome e tanto: <code>pg_trgm</code>. Você pode habilitá-la a partir do psql usando o comando abaixo:</p><pre><code class="language-sql">CREATE EXTENSION pg_trgm;</code></pre><p>Essa extensão traz algumas funções úteis para correspondência de strings semelhantes. O princípio subjacente é o do uso de trigramas (que, sim, parecem com algo saído de Harry Potter).</p><p>As trigramas são formadas pela quebra de uma string em grupos de três letras consecutivas. Por exemplo, a string "hello" seria representada pelo seguinte conjunto de trigramas:</p><ul><li>" h", " he", "hel", "ell", "llo", "lo "</li></ul><p>Ao comparar a semelhança do conjunto de trigramas entre duas strings, é possível estimar se elas são semelhantes em uma escala entre 0 e 1. Isso permite a correspondência por similaridade (em inglês, <em>fuzzy matching</em>), definindo um limite de similaridade acima do qual as strings são consideradas correspondentes.</p><pre><code class="language-sql">SELECT
	*
FROM artists
WHERE SIMILARITY(name,'Claud Monay') &gt; 0.4 ;</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-99.png" class="kg-image" alt="image-99" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/image-99.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-99.png 915w" sizes="(min-width: 720px) 720px" width="915" height="93" loading="lazy"><figcaption>O resultado é Claude Monet (escrito corretamente)</figcaption></figure><p>Talvez você queira ver as cinco melhores correspondências:</p><pre><code class="language-sql">SELECT 
	*
FROM artists
ORDER BY SIMILARITY(name,'Lee Casner') DESC
LIMIT 5;</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-108.png" class="kg-image" alt="image-108" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/image-108.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/11/image-108.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-108.png 1212w" sizes="(min-width: 720px) 720px" width="1212" height="187" loading="lazy"><figcaption>A correspondência mais próxima é a de Lee Krasner, seguido de Lee Chesney</figcaption></figure><p>O limite padrão é 0.3. Você pode usar o operador <code>%</code> nesse caso como uma abreviação para nomes correspondentes por semelhança comparados a uma possível correspondência correta:</p><pre><code class="language-sql">SELECT
	*
FROM artists
WHERE name % 'Andrey Deran';</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-100.png" class="kg-image" alt="image-100" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/image-100.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/11/image-100.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-100.png 1074w" sizes="(min-width: 720px) 720px" width="1074" height="118" loading="lazy"><figcaption>O resultado traz dois artistas, incluindo um certo Andre Derain</figcaption></figure><p>Talvez você só tenha uma ideia de uma parte do nome. O operador <code>%</code> permite comparar com elementos de um array para que você possa fazer a correspondência com qualquer parte do nome. A próxima consulta usa a função <code>STRING_TO_ARRAY</code> do Postgres para dividir os nomes completos dos artistas em arrays de nomes separados.</p><pre><code class="language-sql">SELECT
	*
FROM artists
WHERE 'Cadinsky' % ANY(STRING_TO_ARRAY(name,' '));</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-101.png" class="kg-image" alt="image-101" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/image-101.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/11/image-101.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-101.png 1089w" sizes="(min-width: 720px) 720px" width="1089" height="122" loading="lazy"><figcaption>O resultado traz duas linhas, incluindo a de Vasily Kandinsky</figcaption></figure><h3 id="algoritmos-fon-ticos"><strong>Algoritmos fonéticos</strong></h3><p>Outra abordagem para correspondência de strings similares vem de um grupo de algoritmos chamados algoritmos fonéticos.</p><p>Esses são algoritmos que usam conjuntos de regras para representar uma string usando um código curto. O código contém as principais informações sobre como a string deve soar se lida em voz alta. Ao comparar esses códigos curtos, é possível combinar strings que são escritas de modo diferente, mas soam iguais.</p><p>O Postgres vem com uma extensão que permite que você faça uso de alguns desses algoritmos. Você pode habilitá-la com o seguinte comando:</p><pre><code class="language-sql">CREATE EXTENSION fuzzystrmatch;</code></pre><p>Um exemplo é um algoritmo chamado Soundex. Suas origens remontam a mais de 100 anos – foi patenteado pela primeira vez em 1918 e foi usado no século 20 para analisar dados do censo dos EUA.</p><p>O Soundex funciona convertendo strings em códigos de quatro letras que descrevem como elas soam. Por exemplo, as representações do Soundex de 'flor' (em inglês, <em>flower</em>) e 'farinha' (em inglês, <em>flour</em>) são ambas F460.</p><p>A consulta abaixo encontra o registro que soa como o nome 'Damian Hurst'.</p><pre><code class="language-sql">SELECT
	*
FROM artists
WHERE nationality IN ('American', 'British')
AND SOUNDEX(name) = SOUNDEX('Damian Hurst');</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-102.png" class="kg-image" alt="image-102" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/image-102.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/11/image-102.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-102.png 1034w" sizes="(min-width: 720px) 720px" width="1034" height="129" loading="lazy"><figcaption>O resultado inclui o artista britânico Damien Hirst (escrito corretamente)</figcaption></figure><p>Outro algoritmo conhecido é o do metafone. Ele funciona de maneira semelhante ao Soundex, na medida em que converte strings em uma representação de código usando um conjunto de regras.</p><p>O algoritmo do metafone retornará códigos de diferentes comprimentos (ao contrário do Soundex, que sempre retorna quatro caracteres). Você pode passar um argumento para a função <code>METAPHONE</code> indicando o código de comprimento máximo que você deseja que ele retorne.</p><pre><code class="language-sql">SELECT
	artist_id,
    name,
    METAPHONE(name,10)
FROM artists
WHERE nationality = 'American'
LIMIT 5;</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-103.png" class="kg-image" alt="image-103" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/image-103.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-103.png 767w" sizes="(min-width: 720px) 720px" width="767" height="196" loading="lazy"><figcaption>O metafone de cada artista é produzido</figcaption></figure><p>Como o metafone e o Soundex retornam strings como resultado, você pode usá-las em outras funções de correspondência de strings similares. Essa abordagem combinada pode produzir resultados poderosos. O exemplo abaixo encontra as cinco correspondências mais próximas para o nome Si Tomlee.</p><pre><code class="language-sql">SELECT
	*
FROM artists
WHERE nationality = 'American'
ORDER BY SIMILARITY(
	METAPHONE(name,10),
    METAPHONE('Si Tomlee',10)
    ) DESC
LIMIT 5;</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-104.png" class="kg-image" alt="image-104" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/image-104.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/11/image-104.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-104.png 1130w" sizes="(min-width: 720px) 720px" width="1130" height="180" loading="lazy"><figcaption>O melhor resultado é o do artista americano Cy Twombly</figcaption></figure><p>Aqui, uma abordagem apenas de trigrama não teria ajudado muito, já que há pouca sobreposição entre 'Cy Twombly' e 'Si Tomlee'. Na verdade, eles têm apenas uma pontuação de <code>SIMILARITY</code> (em português, similaridade) de 0,05, embora soem semelhantes quando lidos em voz alta (em inglês).</p><p>Devido às suas origens históricas, nenhum desses algoritmos funciona bem com nomes ou palavras de origem não inglesa. No entanto, existem versões mais focadas para o mercado internacional.</p><p>Um exemplo é o algoritmo de metafone duplo. Ele usa um conjunto mais sofisticado de regras para produzir metafones, podendo fornecer codificações alternativas para strings de origem inglesa e não inglesa.</p><p>Como exemplo, veja a consulta abaixo. Ele compara os resultados de metafone duplo para diferentes grafias do artista espanhol Joan Miró:</p><pre><code class="language-sql">SELECT
	'Joan Miró' AS name, 
    DMETAPHONE('Joan Miró'),
    DMETAPHONE_ALT('Joan Miró')
UNION SELECT
	'Juan Mero' AS name,
    DMETAPHONE('Juan Mero'),
    DMETAPHONE_ALT('Juan Mero');</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2019/09/image-106.png" class="kg-image" alt="image-106" width="600" height="400" loading="lazy"><figcaption>Both the correct spelling and misspelling produce JNMR and ANMR as metaphones</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-106.png" class="kg-image" alt="image-106" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/image-106.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-106.png 823w" sizes="(min-width: 720px) 720px" width="823" height="121" loading="lazy"><figcaption>Tanto a escrita correta quanto a incorreta produzem JNMR e ANMR como metafones</figcaption></figure><h3 id="indo-mais-longe"><strong>Indo mais longe</strong></h3><p>Finalmente, outra abordagem para a correspondência de strings similares no Postgres é calcular a "distância" entre as strings. Existem várias maneiras de se fazer isso. O Postgres fornece uma funcionalidade para calcular a distância de Levenshtein.</p><p>Em um nível mais alto, a distância de Levenshtein entre duas strings é o número mínimo de edições necessárias para transformar uma string na outra. As edições são consideradas no nível dos caracteres e podem incluir:</p><ul><li>substituições,</li><li>exclusões e</li><li>inserções</li></ul><p>Por exemplo, a distância de Levenshtein entre as palavras "<em>bigger</em>" e "<em>better</em>" (maior e melhor em português, respectivamente) é de 3, porque você pode transformar "<em>bigger</em>" em "<em>better</em>" substituindo "<em>igg</em>" por "<em>ett</em>".</p><p>Já a distância de Levenshtein entre '<em>biggest</em>' e '<em>best</em>' ("o maior" e "o melhor" em português, respectivamente) também é 3, porque você pode transformar '<em>biggest</em>' em '<em>best</em>' excluindo as letras '<em>igg</em>'.</p><p>Veja abaixo uma consulta que encontra os nomes de artistas com as menores distâncias de Levenshtein para o nome 'Freda Kallo'.</p><pre><code class="language-sql">SELECT
	*,
    LEVENSHTEIN(name, 'Freda Kallo')
FROM artists
ORDER BY LEVENSHTEIN(name, 'Freda Kallo') ASC
LIMIT 5</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-107.png" class="kg-image" alt="image-107" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2023/11/image-107.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2023/11/image-107.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2023/11/image-107.png 1279w" sizes="(min-width: 720px) 720px" width="1279" height="179" loading="lazy"><figcaption>A artista mexicana Frida Kahlo é a correspondência mais próxima, seguida por Fred Niblo, Fred Taylor e Frank Gallo</figcaption></figure><h3 id="obrigado-pela-leitura-"><strong>Obrigado pela leitura!</strong></h3><p>Espero que esta visão geral da correspondência de strings similares no Postgresql tenha dado a você novos sugestões e ideias para seu próximo projeto.</p><p>É claro que existem outros métodos para correspondência de strings similares não abordados aqui, incluindo em outras linguagens de programação.</p><p>Por exemplo, ao usar o Python, dê uma olhada no <a href="https://github.com/seatgeek/fuzzywuzzy">pacote fuzzywuzzy</a>. Se preferir a linguagem R, você pode usar a função <code>agrep()</code> integrada ou testar o <a href="https://cran.r-project.org/web/packages/stringdist/index.html">pacote stringdist</a>.</p> ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Como agendar uma tarefa no PostgreSQL ]]>
                </title>
                <description>
                    <![CDATA[ O agendamento é um recurso que permite automatizar tarefas para que você não precise fazer isso em tempo real. Neste artigo, veremos como agendar uma tarefa (ou trabalho) no PostgreSQL. Usaremos o pgAgent, que é um agente de agendamento de trabalhos para o PostgreSQL. Se você não sabe o que ]]>
                </description>
                <link>https://www.freecodecamp.org/portuguese/news/como-agendar-uma-tarefa-no-postgresql/</link>
                <guid isPermaLink="false">62d1ac79fea2f10707d654bf</guid>
                
                    <category>
                        <![CDATA[ PostgreSQL ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Thiago Costa Barbosa ]]>
                </dc:creator>
                <pubDate>Thu, 28 Jul 2022 16:24:37 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/pexels-mat-brown-552598-1-.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artigo original:</strong> <a href="https://www.freecodecamp.org/news/how-to-schedule-a-job-in-postgresql/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How to Schedule a Job in PostgreSQL</a>
      </p><p>O agendamento é um recurso que permite automatizar tarefas para que você não precise fazer isso em tempo real.</p><p>Neste artigo, veremos como agendar uma tarefa (ou trabalho) no PostgreSQL. Usaremos o pgAgent, que é um agente de agendamento de trabalhos para o PostgreSQL. Se você não sabe o que é um agente de banco de dados, eu já explico.</p><p>Esses agentes são processos que rodam em segundo plano. O papel deles é executar os trabalhos/comandos que você deixa registrado neles. Nesses trabalhos, você determina a periodicidade com que quer executar esses comandos.</p><p>Agora, vamos pôr a mão na massa...</p><h1 id="como-instalar-o-postgresql-e-o-stack-builder"><strong>Como instalar o PostgreSQL e o Stack Builder</strong></h1><p>Você pode instalar o pgAgent com o Stack Builder.</p><p>Instale o PostreSQL a partir do <a href="https://www.postgresql.org/download/">site oficial</a>. Ele fará o download do Stack Builder junto com o instalador do PostgreSQL.</p><p>Caso você já tenha o PostgreSQL instalado, é só fazer o download dele e executar também a instalação do Stack Builder.</p><p>O Stack Builder é executado assim que a instalação do PostgreSQL é concluída. Estou usando aqui o PostgreSQL14 e o pgAdmin4.</p><h1 id="como-instalar-o-pgagent"><strong>Como instalar o pgAgent</strong></h1><p>Na instalação do PostgreSQL, em uma das telas, mostrará as opções de extensões que você instalará. A opção do Stack Builder já vem selecionada. Caso não esteja, no entanto, selecione-a.</p><p>Após a instalação do PostgreSQL, quando você executa o Stack Builder, ele primeiro abre um assistente de boas-vindas.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163841_auto_x2_auto_x2_colored_toned_light_ai.jpg" class="kg-image" alt="Screenshot-2022-07-10-163841_auto_x2_auto_x2_colored_toned_light_ai" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-163841_auto_x2_auto_x2_colored_toned_light_ai.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-163841_auto_x2_auto_x2_colored_toned_light_ai.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screenshot-2022-07-10-163841_auto_x2_auto_x2_colored_toned_light_ai.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163841_auto_x2_auto_x2_colored_toned_light_ai.jpg 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1363" loading="lazy"></figure><p>Se você tiver várias versões do PostgreSQL instaladas, escolha uma para instalar o pgAgent.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163907_auto_x2_colored_toned_light_ai_auto_x2_colored_toned_light_ai.jpg" class="kg-image" alt="Screenshot-2022-07-10-163907_auto_x2_colored_toned_light_ai_auto_x2_colored_toned_light_ai" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-163907_auto_x2_colored_toned_light_ai_auto_x2_colored_toned_light_ai.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-163907_auto_x2_colored_toned_light_ai_auto_x2_colored_toned_light_ai.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screenshot-2022-07-10-163907_auto_x2_colored_toned_light_ai_auto_x2_colored_toned_light_ai.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163907_auto_x2_colored_toned_light_ai_auto_x2_colored_toned_light_ai.jpg 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1393" loading="lazy"></figure><p>Você encontrará o pgAgent na categoria <em><em>Add-ons, tools and utilities</em> </em>(Add-ons, ferramentas e utilitários). Marque a caixa de seleção dele para instalá-lo.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163926_auto_x2_colored_toned_light_ai--1-_auto_x2_colored_toned_light_ai.jpg" class="kg-image" alt="Screenshot-2022-07-10-163926_auto_x2_colored_toned_light_ai--1-_auto_x2_colored_toned_light_ai" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-163926_auto_x2_colored_toned_light_ai--1-_auto_x2_colored_toned_light_ai.jpg 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-163926_auto_x2_colored_toned_light_ai--1-_auto_x2_colored_toned_light_ai.jpg 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screenshot-2022-07-10-163926_auto_x2_colored_toned_light_ai--1-_auto_x2_colored_toned_light_ai.jpg 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163926_auto_x2_colored_toned_light_ai--1-_auto_x2_colored_toned_light_ai.jpg 2000w" sizes="(min-width: 720px) 720px" width="2000" height="1360" loading="lazy"></figure><p>Em seguida, ele solicitará que você escolha um diretório onde deseja instalar o pgAgent.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163956.png" class="kg-image" alt="Screenshot-2022-07-10-163956" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-163956.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163956.png 690w" width="690" height="540" loading="lazy"></figure><p>O Stack Builder abrirá o assistente de instalação do pgAgent.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164018.png" class="kg-image" alt="Screenshot-2022-07-10-164018" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-164018.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164018.png 683w" width="683" height="531" loading="lazy"></figure><p>Aqui, você escolhe se deseja instalá-lo em <em>Upgrade Mode</em> (Modo de atualização). Caso você já tenha scripts no seu PostgreSQL, e se você não quiser alterá-los automaticamente durante a atualização, marque a caixa.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164038.png" class="kg-image" alt="Screenshot-2022-07-10-164038" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-164038.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164038.png 687w" width="687" height="535" loading="lazy"></figure><p>Na tela <em>PostgreSQL Installation Details</em> (Detalhes da instalação do PostgreSQL), forneça o usuário e a senha que você digitou quando instalou o PostgreSQL.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164125.png" class="kg-image" alt="Screenshot-2022-07-10-164125" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-164125.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164125.png 687w" width="687" height="537" loading="lazy"></figure><p>Se você inserir os dados incorretamente, aparecerá uma janela com erro de conexão. Portanto, guarde sempre esses dados de acesso, tanto do PostgreSQL quanto do banco de dados.</p><blockquote><em><em><strong><strong><em><em>OBSERVAÇÃO:</em></em></strong></strong> Você fará o login no PostgreSQL com o usuário e a senha que você fornece nes</em>s<em>e estágio para poder visualizar<em><em> </em></em></em>as tarefas <em><em><em>do pgAgent</em></em>.</em></em></blockquote><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164233.png" class="kg-image" alt="Screenshot-2022-07-10-164233" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-164233.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164233.png 692w" width="692" height="535" loading="lazy"></figure><p>Depois de adicionar esses dados, a instalação começa:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164250.png" class="kg-image" alt="Screenshot-2022-07-10-164250" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-164250.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164250.png 687w" width="687" height="532" loading="lazy"></figure><p>Demora alguns segundos para terminar.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164304.png" class="kg-image" alt="Screenshot-2022-07-10-164304" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-164304.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164304.png 685w" width="685" height="532" loading="lazy"></figure><p>Clique no botão <em><em>Finish</em> </em>(Finalizar)<em><em>.</em></em></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164320.png" class="kg-image" alt="Screenshot-2022-07-10-164320" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-164320.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-164320.png 760w" sizes="(min-width: 720px) 720px" width="760" height="520" loading="lazy"></figure><p>Depois de instalado, o Stack Builder mostrará uma tela de <em><em>instalação concluída. </em></em>Ali, você verá instruções sobre como instalar e desinstalar utilitários.</p><p>Se o Stack Builder estiver instalado, basta executá-lo para instalar outros utilitários. Para desinstalá-los, use o applet <em>Add/Remove Programs</em> (Adicionar/Remover Programas do Painel de Controle do seu sistema).</p><p>Com tudo instalado, abra o programa pgAdmin. Ele pedirá a senha, que você inseriu quando o instalou, para abrir o programa.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-190229.png" class="kg-image" alt="Screenshot-2022-07-10-190229" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-190229.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-190229.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screenshot-2022-07-10-190229.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-190229.png 1920w" sizes="(min-width: 720px) 720px" width="1920" height="1021" loading="lazy"></figure><p>Os trabalhos do<em><em> pgAgent</em></em> estarão visíveis para você na árvore de navegação no lado esquerdo do painel.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-152307-1.png" class="kg-image" alt="Screenshot-2022-07-10-152307-1" width="342" height="601" loading="lazy"></figure><p>Acima, você pode ver uma visão ampliada da árvore do navegação.</p><h1 id="como-criar-um-trabalho-no-pgagent"><strong>Como criar um trabalho no pgAgent</strong></h1><p>Para criar um novo trabalho, clique com o botão direito do mouse no botão <em><em>pgAgent Jobs</em></em> e clique em <em><em>Create</em></em> (Criar).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-152329-1.png" class="kg-image" alt="Screenshot-2022-07-10-152329-1" width="573" height="207" loading="lazy"></figure><p>Você verá um menu, e lá é só clicar em <em><em>Create</em></em> &gt; <em><em>pgAgent Job</em> </em>(Criar &gt; Tarefa do pgAgent).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-191902.png" class="kg-image" alt="Screenshot-2022-07-10-191902" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-191902.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-191902.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-191902.png 1128w" sizes="(min-width: 720px) 720px" width="1128" height="686" loading="lazy"></figure><p>A <em><em>caixa de diálogo criar</em></em> do <em><em>pgAgent</em></em> possui quatro abas.</p><p>A primeira é a guia <em><em>General. </em></em>Aqui você insere o nome do trabalho e seleciona uma categoria (<em><em>Job class</em></em>).</p><p>Essa categoria é apenas para fins de categorização/organização interna sua – e não afeta a execução do trabalho. Você pode selecionar uma com base na função do trabalho. Como eu quero exportar os dados para um CSV, escolhi a categoria <em><em>Data Export</em> </em>(Exportação de dados).</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-152531-1.png" class="kg-image" alt="Screenshot-2022-07-10-152531-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-152531-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-152531-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-152531-1.png 1127w" sizes="(min-width: 720px) 720px" width="1127" height="691" loading="lazy"></figure><p>Em seguida, clicamos na aba <em><em>Steps</em> </em>(etapas). No canto superior direito da aba, haverá um sinal de +. Clique nele para adicionar uma nova linha de etapa.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-153345-1.png" class="kg-image" alt="Screenshot-2022-07-10-153345-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-153345-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-153345-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screenshot-2022-07-10-153345-1.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-153345-1.png 1920w" sizes="(min-width: 720px) 720px" width="1920" height="1021" loading="lazy"></figure><p>Quando você clica em Editar a linha (ícone de um lápis), há duas seções<em><em>: General</em></em> e <em><em>Code</em></em>.</p><p>Na seção <em><em>General:</em></em></p><ol><li>Adicione o nome da etapa.</li><li>Em seguida, você habilita ou desabilita a etapa. Seu trabalho será executado somente se a etapa estiver habilitada.</li><li>Dependendo do fato de seu trabalho ser local ou remoto, você pode escolher o tipo de conexão. Vou escolher uma conexão remota para exemplificar uma string de conexão.</li><li>Uma conexão remota permite que você adicione manualmente a string de conexão. A sintaxe dela deve ser como na <a href="https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING">string de conexão libq</a> (documentação em inglês). Vou adicionar meus detalhes de conexão nesse formato: <code>host=localhost port=5432 dbname=postgres</code></li><li>Na caixa de seleção <em><em>On Error</em></em>, você pode escolher o que deve acontecer caso ocorra um erro. Eu selecionei para o trabalho falhar.</li><li>Finalmente, você pode adicionar um comentário sobre a essa etapa. Em seguida, salve as alterações.</li></ol><p>Ao lado, vemos a seção <em><em>Code.</em></em></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-155158-1.png" class="kg-image" alt="Screenshot-2022-07-10-155158-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-155158-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-155158-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screenshot-2022-07-10-155158-1.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-155158-1.png 1920w" sizes="(min-width: 720px) 720px" width="1920" height="1020" loading="lazy"></figure><p>Como quero exportar os dados de uma visualização, chamarei a visualização e pedirei para exportar o arquivo. O código será:<br><code>COPY (select * from acc_view) TO E'C:\\test-data\\try.csv';</code></p><p>Vou salvar as alterações depois de adicionar o comando.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-153614-1.png" class="kg-image" alt="Screenshot-2022-07-10-153614-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-153614-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-153614-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screenshot-2022-07-10-153614-1.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-153614-1.png 1912w" sizes="(min-width: 720px) 720px" width="1912" height="1023" loading="lazy"></figure><p>Agora, estamos prontos para agendar esse trabalho. Na aba <em><em>Schedules, </em></em>adicionamos a <em><em>hora da data de início</em></em> e a <em>hora da data de término</em> do trabalho para iniciar e terminar.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163332-1.png" class="kg-image" alt="Screenshot-2022-07-10-163332-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-163332-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-163332-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screenshot-2022-07-10-163332-1.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163332-1.png 1918w" sizes="(min-width: 720px) 720px" width="1918" height="1022" loading="lazy"></figure><p><em><em>SQL</em></em> é a última aba. Ela mostra o código gerado pela Interface Gráfica (GUI), pois você também pode criar scripts por código. Se você desejar editar esse código, mostrarei como fazer depois.</p><h1 id="como-visualizar-os-trabalhos-criados-no-pgagent"><strong>Como visualizar os trabalhos criados no pgAgent</strong></h1><p>Assim que um novo trabalho for criado, ele será exibido em <em><em>Steps do pgAgent</em></em> na árvore de navegação.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163417-1.png" class="kg-image" alt="Screenshot-2022-07-10-163417-1" width="340" height="208" loading="lazy"></figure><p>Seus <em><em>agendamentos (schedules)</em></em> e <em><em>etapas (steps)</em></em> serão exibidos quando você estender o trabalho agendado.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163540-1.png" class="kg-image" alt="Screenshot-2022-07-10-163540-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-163540-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-163540-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screenshot-2022-07-10-163540-1.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163540-1.png 1920w" sizes="(min-width: 720px) 720px" width="1920" height="745" loading="lazy"></figure><p>Para ver se o trabalho foi executado (se falhou ou se foi bem-sucedido), selecione o trabalho pelo nome e clique na guia <em><em>Statistics (Estatísticas)</em></em> no painel. Aqui, você pode ver o número de vezes que o trabalho foi executado, hora de início e término, seu status e o id. Na coluna <em><em>Status</em></em>, a sigla <em><em>s</em></em> significa sucesso e <em><em>f</em></em> significa falha<em><em>.</em></em></p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163639-1.png" class="kg-image" alt="Screenshot-2022-07-10-163639-1" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-163639-1.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-163639-1.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screenshot-2022-07-10-163639-1.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-163639-1.png 1920w" sizes="(min-width: 720px) 720px" width="1920" height="1020" loading="lazy"></figure><p>Para depurar o motivo de um trabalho ter falhado, basta clicar no nome da etapa em <em>Steps</em> (Etapas<em>),</em> na árvore de navegação, e clicar na aba de estatísticas no painel. Na coluna <em><em>Output</em> <em>(Sa</em>í<em>da)</em></em>, você pode ver o motivo de o trabalho ter falhado.</p><p>No meu caso, não foi possível acessar o diretório para o qual eu estava tentando copiar os dados. Depois de alterar o caminho, meu trabalho foi executado com sucesso (observe a primeira linha).</p><h1 id="como-editar-trabalhos-no-pgagent"><strong>Como editar trabalhos no pgAgent</strong></h1><p>Para editar um trabalho no pgAgent, selecione o trabalho que deseja alterar e clique na guia <em><em>Properties</em> </em>(Propriedades) no painel.</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-201542.png" class="kg-image" alt="Screenshot-2022-07-10-201542" srcset="https://www.freecodecamp.org/portuguese/news/content/images/size/w600/2022/07/Screenshot-2022-07-10-201542.png 600w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1000/2022/07/Screenshot-2022-07-10-201542.png 1000w, https://www.freecodecamp.org/portuguese/news/content/images/size/w1600/2022/07/Screenshot-2022-07-10-201542.png 1600w, https://www.freecodecamp.org/portuguese/news/content/images/2022/07/Screenshot-2022-07-10-201542.png 1920w" sizes="(min-width: 720px) 720px" width="1920" height="1020" loading="lazy"></figure><p>Clique no ícone de lápis no canto superior esquerdo, ele abrirá um assistente onde você poderá editar todos os detalhes.</p><h1 id="conclus-o"><strong>Conclusão</strong></h1><p>Nem sempre é viável criar agendadores em seu código. Quando fazer isso é uma opção, ela pode ser muito útil.</p><p>O agendamento de trabalho, juntamente com a exportação de dados no formato CSV, é um recurso poderoso do PostgreSQL. Vou tentar explicar como criar um trabalho dinamicamente em um próximo tutorial. Ótimo aprendizado para você!</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
