{"id":6756,"date":"2026-07-12T02:06:52","date_gmt":"2026-07-12T10:06:52","guid":{"rendered":"https:\/\/www.gudusoft.com\/postgresql-data-lineage\/"},"modified":"2026-07-12T02:06:52","modified_gmt":"2026-07-12T10:06:52","slug":"postgresql-data-lineage","status":"publish","type":"page","link":"https:\/\/www.gudusoft.com\/pt\/linhagem-de-dados-postgresql\/","title":{"rendered":"Linhagem de dados do PostgreSQL: Linhagem em n\u00edvel de coluna a partir de views e SQL"},"content":{"rendered":"<p><strong>linhagem de dados do PostgreSQL<\/strong> \u00e9 o mapa em n\u00edvel de coluna de como os dados se movem pelas suas views, CTEs e DMLs do PostgreSQL: quais colunas da tabela base alimentam cada coluna de view ou relat\u00f3rio e quais jun\u00e7\u00f5es, filtros, convers\u00f5es e agrega\u00e7\u00f5es transformam os dados ao longo do caminho. O pr\u00f3prio cat\u00e1logo do PostgreSQL informa que os objetos dependem uns dos outros \u2014 <code>pg_depend<\/code> Os registros indicam que uma view faz refer\u00eancia a uma tabela, mas n\u00e3o dizem nada sobre como as colunas se transformam. Construir uma linhagem real significa analisar o pr\u00f3prio SQL, e \u00e9 exatamente isso que estamos fazendo. <strong>Gudu SQLFlow<\/strong> faz isso, com um analisador de dialeto PostgreSQL dedicado em vez de uma gram\u00e1tica ANSI gen\u00e9rica.<\/p>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained\" style=\"background-color:#eef7fb;padding-top:24px;padding-bottom:24px\"><div class=\"wp-block-group__inner-container\">\n\n<p><strong>Experimente em 30 segundos:<\/strong> Cole qualquer consulta ou defini\u00e7\u00e3o de visualiza\u00e7\u00e3o do PostgreSQL no <a href=\"https:\/\/sqlflow.gudusoft.com\/?utm_source=gudusoft&amp;utm_medium=website&amp;utm_campaign=postgresql-data-lineage\" target=\"_blank\" rel=\"noreferrer noopener\">Visualizador de linhagem SQLFlow gratuito<\/a> e obtenha um diagrama de linhagem interativo em n\u00edvel de coluna. A vers\u00e3o em nuvem possui um plano gratuito.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Por que o pg_depend n\u00e3o consegue responder a perguntas sobre linhagem?<\/h2>\n\n\n\n<p>O PostgreSQL mant\u00e9m registros de depend\u00eancias meticulosos. <code>pg_depend<\/code> e <code>pg_rewrite<\/code> saiba que <code>receita_regional<\/code> n\u00e3o pode ser descartado enquanto fizer refer\u00eancia a <code>v_pedidos_enriquecidos<\/code>, e <code>esquema_de_informa\u00e7\u00e3o<\/code> As visualiza\u00e7\u00f5es exp\u00f5em quais tabelas uma visualiza\u00e7\u00e3o acessa. Isso \u00e9 o rastreamento de depend\u00eancias em n\u00edvel de objeto, criado para <code>GOTEJAR ... CASCATA<\/code> Seguran\u00e7a \u2014 n\u00e3o linhagem.<\/p>\n\n\n\n<p>O que o cat\u00e1logo n\u00e3o pode lhe dizer: quais colunas espec\u00edficas alimentam o sistema. <code>receita<\/code>, se <code>quantia<\/code> foi lan\u00e7ado ou agregado no caminho, seja <code>status<\/code> filtra o resultado sem nunca aparecer nele, e mostra como o caminho completo se parece quando as visualiza\u00e7\u00f5es se acumulam em tr\u00eas ou quatro n\u00edveis de profundidade. Responder a perguntas como &quot;de onde vem esse n\u00famero?&quot; ou &quot;o que acontece se eu remover essa coluna?&quot; exige reconstruir a l\u00f3gica de transforma\u00e7\u00e3o a partir do texto SQL armazenado nas defini\u00e7\u00f5es de visualiza\u00e7\u00e3o \u2014 um problema de an\u00e1lise sint\u00e1tica, n\u00e3o uma consulta de cat\u00e1logo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Como o SQLFlow constr\u00f3i a linhagem de dados do PostgreSQL<\/h2>\n\n\n\n<ol><li><strong>Ingerir SQL.<\/strong> Cole consultas, carregue arquivos de script, conecte-se ao PostgreSQL via JDBC para obter DDL e visualizar defini\u00e7\u00f5es diretamente ou importe um manifesto dbt para projetos dbt-on-Postgres.<\/li>\n<li><strong>Analisar com uma gram\u00e1tica espec\u00edfica do PostgreSQL.<\/strong> O SQLFlow \u00e9 constru\u00eddo sobre o <a href=\"https:\/\/www.sqlparser.com\/\">Analisador SQL Geral (GSP)<\/a>, um front-end comercial para compilador SQL desenvolvido desde meados dos anos 2000 e validado com aproximadamente 13.600 conjuntos de testes por dialeto. Seu analisador sint\u00e1tico PostgreSQL lida com as constru\u00e7\u00f5es pr\u00f3prias do dialeto \u2014 CTEs grav\u00e1veis, <code>INSERIR ... EM CASO DE CONFLITO<\/code>, o <code>::<\/code> Operador de convers\u00e3o de tipo, heran\u00e7a e particionamento de DDL \u2014 e suas expans\u00f5es de resolvedor sem\u00e2ntico <code>SELECIONE *<\/code>, resolve refer\u00eancias de coluna por meio de CTEs, subconsultas e defini\u00e7\u00f5es de visualiza\u00e7\u00e3o e, em seguida, extrai relacionamentos de origem para destino em n\u00edvel de coluna.<\/li>\n<li><strong>Visualize e exporte.<\/strong> O resultado \u00e9 um diagrama interativo que voc\u00ea pode rastrear a montante e a jusante de qualquer coluna, export\u00e1vel como JSON, CSV ou PNG, ou consult\u00e1vel por meio de uma API REST.<\/li><\/ol>\n\n\n\n<p>O PostgreSQL \u00e9 um dos 39 dialetos para os quais o SQLFlow fornece analisadores sint\u00e1ticos \u2014 incluindo os mecanismos da fam\u00edlia Postgres: Greenplum, Amazon Redshift e EDB Postgres, cada um com seu pr\u00f3prio analisador sint\u00e1tico, pois cada um divergiu do PostgreSQL principal de maneiras relevantes para um mecanismo de linhagem. A metodologia completa \u00e9 abordada no documento. <a href=\"https:\/\/www.gudusoft.com\/pt\/ferramenta-de-linhagem-de-dados-sql\/\">Vis\u00e3o geral da ferramenta de linhagem de dados SQL<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rastreando uma cadeia de visualiza\u00e7\u00e3o aninhada at\u00e9 as tabelas base.<\/h2>\n\n\n\n<p>A l\u00f3gica \u00e9 acumulada por meio de pilhas de visualiza\u00e7\u00e3o (view-on-view) no PostgreSQL, e \u00e9 nesse ponto que o rastreamento manual de linhagem falha. Considere uma cadeia de dois n\u00edveis:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CRIAR VIEW v_orders_enriched AS SELECT o.order_id, o.customer_id, o.amount::numeric(12,2) AS amount, c.region FROM orders o JOIN customers c ON c.customer_id = o.customer_id WHERE o.status = &#039;shipped&#039;; CRIAR VIEW v_region_revenue AS SELECT region, SUM(amount) AS revenue FROM v_orders_enriched GROUP BY region;<\/code><\/pre>\n\n\n\n<p>Pergunte ao SQLFlow onde <code>v_region_revenue.revenue<\/code> vem de e resolve toda a cadeia: <code>receita<\/code> \u00e9 <code>SOMA()<\/code> sobre <code>v_orders_enriched.amount<\/code>, que \u00e9 um <code>num\u00e9rico(12,2)<\/code> elenco de <code>pedidos.quantidade<\/code>O diagrama mostra cada etapa \u2014 tabela base, vis\u00e3o intermedi\u00e1ria, agregado \u2014 como um caminho explor\u00e1vel, n\u00e3o como um palpite superficial. Ele tamb\u00e9m revela o que uma leitura ing\u00eanua n\u00e3o percebe: <code>pedidos.status<\/code> nunca aparece na sa\u00edda, mas cada valor de receita depende do <code>ONDE o.status = &#039;enviado&#039;<\/code> filtro. O SQLFlow registra isso como linhagem indireta (mais detalhes abaixo).<\/p>\n\n\n\n<p>A mesma resolu\u00e7\u00e3o funciona em qualquer profundidade. Em um esquema real onde as visualiza\u00e7\u00f5es se empilham em cinco n\u00edveis de profundidade e metade delas usa <code>SELECIONE *<\/code>O SQLFlow expande os asteriscos com base nas defini\u00e7\u00f5es reais das tabelas obtidas via JDBC, de modo que a linhagem permane\u00e7a precisa em n\u00edvel de coluna, mesmo quando o texto SQL n\u00e3o nomeia as colunas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Constru\u00e7\u00f5es do PostgreSQL que quebram analisadores sint\u00e1ticos gen\u00e9ricos<\/h2>\n\n\n\n<p>Ferramentas que tratam o PostgreSQL como &quot;aproximadamente ANSI SQL&quot; falham justamente nas instru\u00e7\u00f5es que carregam o maior fluxo de dados. Todas essas instru\u00e7\u00f5es s\u00e3o tratadas pelo analisador de dialeto PostgreSQL do SQLFlow:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Construir<\/th><th>Por que isso \u00e9 importante para a linhagem<\/th><\/tr><\/thead><tbody>\n<tr><td>CTEs grav\u00e1veis (<code>COM ... INSERIR\/ATUALIZAR\/EXCLUIR ... RETORNANDO<\/code>)<\/td><td>Uma \u00fanica instru\u00e7\u00e3o l\u00ea e escreve: a sa\u00edda DML da CTE alimenta a consulta externa. A linhagem deve conectar a tabela modificada, a <code>RETORNANDO<\/code> colunas e o objetivo final em um gr\u00e1fico.<\/td><\/tr>\n<tr><td><code>INSERIR ... EM CASO DE CONFLITO, ATUALIZAR<\/code><\/td><td>As opera\u00e7\u00f5es de upsert encaminham os dados por dois caminhos \u2014 o caminho de inser\u00e7\u00e3o e o caminho de atualiza\u00e7\u00e3o atrav\u00e9s do <code>EXCLU\u00cdDO<\/code> pseudo-tabela. Ambas s\u00e3o fluxos de colunas reais para a tabela de destino.<\/td><\/tr>\n<tr><td>Heran\u00e7a de tabelas e particionamento declarativo<\/td><td>Consultas em uma tabela pai leem implicitamente suas tabelas filhas. O SQLFlow analisa o DDL de heran\u00e7a e particionamento para que a linhagem seja anexada corretamente no n\u00edvel pai, em vez de fragmentada por parti\u00e7\u00e3o.<\/td><\/tr>\n<tr><td>CTEs encadeadas e visualiza\u00e7\u00f5es aninhadas<\/td><td>As refer\u00eancias de coluna devem ser resolvidas em todas as camadas intermedi\u00e1rias, incluindo as CTEs que fazem refer\u00eancia a CTEs anteriores, at\u00e9 chegar \u00e0s tabelas base f\u00edsicas.<\/td><\/tr>\n<tr><td><code>::<\/code> colunas de elenco e express\u00e3o<\/td><td>Cada coluna de sa\u00edda \u00e9 mapeada para suas fontes por meio das fun\u00e7\u00f5es e convers\u00f5es aplicadas, para que voc\u00ea possa ver n\u00e3o apenas <em>onde<\/em> um valor veio de mas <em>O que aconteceu com ele?<\/em>.<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Linhagem direta versus indireta: as colunas de filtro que voc\u00ea perderia se n\u00e3o as visse.<\/h2>\n\n\n\n<p>O SQLFlow distingue <strong>linhagem direta<\/strong> \u2014 valores de coluna que fluem fisicamente para uma sa\u00edda \u2014 de <strong>linhagem indireta (de impacto)<\/strong> \u2014 colunas usadas em <code>ONDE<\/code> cl\u00e1usulas, <code>JUNTAR<\/code> condi\u00e7\u00f5es e <code>AGRUPAR POR<\/code> teclas que moldam o resultado sem chegar at\u00e9 ele. No exemplo acima, <code>pedidos.quantidade<\/code> \u00e9 linhagem direta para <code>receita<\/code>; <code>pedidos.status<\/code> e ambos <code>id_do_cliente<\/code> As chaves de jun\u00e7\u00e3o s\u00e3o indiretas.<\/p>\n\n\n\n<p>A distin\u00e7\u00e3o pode ser alterada no diagrama e modifica decis\u00f5es reais. Se voc\u00ea planeja alterar o dom\u00ednio de <code>pedidos.status<\/code>A linhagem direta indica que nada depende dela; a linhagem indireta mostra todos os relat\u00f3rios de receita que filtra silenciosamente. A maioria das ferramentas de linhagem n\u00e3o modela esse tipo de relacionamento.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">De uma \u00fanica consulta a um ambiente PostgreSQL completo.<\/h2>\n\n\n\n<p>Para uma \u00fanica cadeia de visualiza\u00e7\u00e3o complexa, o n\u00edvel gratuito do SQLFlow Cloud \u00e9 suficiente: colar, analisar, detalhar. Al\u00e9m disso:<\/p>\n\n\n\n<ul><li><strong>Varreduras completas do banco de dados:<\/strong> Conecte-se via JDBC (ou use o extrator de metadados Grabit) para obter todas as defini\u00e7\u00f5es de visualiza\u00e7\u00e3o e objeto e construir um reposit\u00f3rio de linhagem persistente. Implanta\u00e7\u00f5es corporativas realizam varreduras em lote em conjuntos de mais de 100 bancos de dados e mais de um milh\u00e3o de colunas, com novas varreduras incrementais.<\/li>\n<li><strong>Integra\u00e7\u00e3o de cat\u00e1logo:<\/strong> Os adaptadores de exporta\u00e7\u00e3o enviam a linhagem em n\u00edvel de coluna para o DataHub, Microsoft Purview e OpenMetadata, permitindo que o SQLFlow funcione como o mecanismo de linhagem por tr\u00e1s do cat\u00e1logo que voc\u00ea j\u00e1 utiliza.<\/li>\n<li><strong>Ambientes isolados por ar:<\/strong> <a href=\"https:\/\/www.gudusoft.com\/pt\/sqlflow-on-premise-versao\/\">SQLFlow no local<\/a> Executa em Docker ou Kubernetes dentro da sua rede por $500\/m\u00eas ou $4.800 (pagamento \u00fanico) por tipo de banco de dados, instal\u00e1vel em dois servidores. O texto SQL nunca sai da sua infraestrutura.<\/li>\n<li><strong>Privacidade por design:<\/strong> O SQLFlow realiza apenas an\u00e1lises est\u00e1ticas do c\u00f3digo SQL e dos metadados do esquema. Ele nunca l\u00ea as linhas das suas tabelas.<\/li><\/ul>\n\n\n\n<p>A partir da vers\u00e3o 8.2.3, voc\u00ea tamb\u00e9m pode consultar o gr\u00e1fico resultante em linguagem natural \u2014 \u201cquais visualiza\u00e7\u00f5es dependem de <code>pedidos.quantidade<\/code>?\u201d \u2014 com cada tabela e coluna na resposta validada em rela\u00e7\u00e3o \u00e0 linhagem analisada antes de ser exibida.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">E quanto \u00e0s ferramentas de linhagem PostgreSQL de c\u00f3digo aberto?<\/h2>\n\n\n\n<p>Analisadores de c\u00f3digo aberto como <code>linhagem sql<\/code> e <code>sqlglot<\/code> S\u00e3o realmente boas em extrair a linhagem de tabelas e colunas b\u00e1sicas de consultas individuais e, para um punhado de instru\u00e7\u00f5es SELECT simples, podem ser tudo o que voc\u00ea precisa. As lacunas aparecem no PostgreSQL de produ\u00e7\u00e3o: resolu\u00e7\u00e3o <code>SELECIONE *<\/code> atrav\u00e9s de cadeias de visualiza\u00e7\u00e3o requer metadados de esquema ativos; CTEs grav\u00e1veis e <code>EM CONFLITO<\/code> As opera\u00e7\u00f5es de upsert exigem gram\u00e1ticas que correspondam exatamente ao dialeto; a linhagem indireta por meio de filtros e chaves de jun\u00e7\u00e3o geralmente n\u00e3o \u00e9 modelada; e extrair a linhagem n\u00e3o \u00e9 o mesmo que visualiz\u00e1-la, armazen\u00e1-la e compar\u00e1-la em milhares de objetos. Se voc\u00ea estiver avaliando, execute sua pilha de visualiza\u00e7\u00e3o mais profunda e sua opera\u00e7\u00e3o de upsert mais complexa em ambas e compare os gr\u00e1ficos.<\/p>\n\n\n\n<p>Se o seu sistema operacional utiliza diferentes mecanismos de processamento, a mesma fam\u00edlia de analisadores sint\u00e1ticos os abrange com o mesmo formato de sa\u00edda \u2014 consulte as p\u00e1ginas complementares para obter mais detalhes. <a href=\"https:\/\/www.gudusoft.com\/pt\/linhagem-de-dados-mysql\/\">linhagem de dados MySQL<\/a>, <a href=\"https:\/\/www.gudusoft.com\/pt\/linhagem-de-dados-de-redshift\/\">Linhagem de dados Redshift<\/a>, e <a href=\"https:\/\/www.gudusoft.com\/pt\/linhagem-de-dados-greenplum\/\">linhagem de dados Greenplum<\/a>ou o <a href=\"https:\/\/www.gudusoft.com\/pt\/base-de-conhecimento-de-linhagem-de-dados\/\">base de conhecimento de linhagem de dados<\/a> para conceitos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Perguntas frequentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">O PostgreSQL possui linhagem de dados integrada?<\/h3>\n\n\n<p>N\u00e3o. O PostgreSQL rastreia depend\u00eancias em n\u00edvel de objeto em <code>pg_depend<\/code> \u2014 quais visualiza\u00e7\u00f5es fazem refer\u00eancia a quais tabelas \u2014 para fins de integridade, como <code>GOTEJAR ... CASCATA<\/code>N\u00e3o registra como as colunas s\u00e3o transformadas. A linhagem em n\u00edvel de coluna precisa ser derivada da an\u00e1lise do SQL nas defini\u00e7\u00f5es de visualiza\u00e7\u00e3o e nos scripts, que \u00e9 o que o SQLFlow faz.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O SQLFlow precisa acessar os dados da minha tabela?<\/h3>\n\n\n<p>N\u00e3o. O SQLFlow realiza an\u00e1lise est\u00e1tica do c\u00f3digo SQL e, opcionalmente, l\u00ea metadados do esquema (defini\u00e7\u00f5es de tabelas e colunas) para resolver refer\u00eancias. Ele nunca l\u00ea linhas. Na edi\u00e7\u00e3o On-Premise, at\u00e9 mesmo o texto SQL permanece dentro da sua rede.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">O SQLFlow consegue rastrear a linhagem por meio de CTEs grav\u00e1veis e upserts com ON CONFLICT?<\/h3>\n\n\n<p>Sim. O analisador de dialeto do PostgreSQL lida com isso. <code>COM ... INSERIR\/ATUALIZAR\/EXCLUIR ... RETORNANDO<\/code> declara\u00e7\u00f5es e <code>INSERIR ... EM CASO DE CONFLITO, ATUALIZAR<\/code>, mapeando os fluxos de colunas de inser\u00e7\u00e3o e atualiza\u00e7\u00e3o para a tabela de destino.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como s\u00e3o tratadas as tabelas particionadas e herdadas?<\/h3>\n\n\n<p>O SQLFlow analisa a heran\u00e7a do PostgreSQL e o DDL de particionamento declarativo, de modo que a linhagem das consultas em uma tabela pai seja anexada no n\u00edvel pai, em vez de ser fragmentada em arestas por parti\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Como fa\u00e7o para obter a linhagem de um banco de dados PostgreSQL inteiro, e n\u00e3o apenas de uma consulta espec\u00edfica?<\/h3>\n\n\n<p>Conecte o SQLFlow ao banco de dados via JDBC ou extraia metadados com o ingestor Grabit. O SQLFlow coleta todas as defini\u00e7\u00f5es de DDL e de visualiza\u00e7\u00e3o, analisa-as em conjunto e mant\u00e9m um reposit\u00f3rio de linhagem persistente e atualizado incrementalmente \u2014 escal\u00e1vel para ambientes com mais de 100 bancos de dados.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Qual o pre\u00e7o do SQLFlow?<\/h3>\n\n\n<p>O SQLFlow Cloud \u00e9 gratuito a partir de um primeiro momento; contas premium custam \u00a349,99\/m\u00eas. O SQLFlow On-Premise custa \u00a3500\/m\u00eas ou \u00a34.800 (pagamento \u00fanico) por tipo de banco de dados selecionado, mais \u00a3100\/m\u00eas ou \u00a31.000 (pagamento \u00fanico) por tipo de banco de dados adicional.<\/p>\n\n\n\n<div class=\"wp-block-group alignfull has-background is-layout-constrained\" style=\"background-color:#60d5f6;padding-top:32px;padding-bottom:32px\"><div class=\"wp-block-group__inner-container\">\n\n<h2 class=\"wp-block-heading\">Agora, rastreie sua linhagem do PostgreSQL.<\/h2>\n\n\n<p>Cole uma defini\u00e7\u00e3o de visualiza\u00e7\u00e3o no visualizador gratuito e veja o gr\u00e1fico em n\u00edvel de coluna ou entre em contato conosco para analisarmos todo o seu ambiente PostgreSQL.<\/p>\n\n\n<div class=\"wp-block-buttons is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/sqlflow.gudusoft.com\/?utm_source=gudusoft&amp;utm_medium=website&amp;utm_campaign=postgresql-data-lineage\" target=\"_blank\" rel=\"noreferrer noopener\">Experimente o SQLFlow gratuitamente<\/a><\/div>\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.gudusoft.com\/pt\/contato\/\">Solicite uma demonstra\u00e7\u00e3o empresarial<\/a><\/div>\n<\/div>\n\n<\/div><\/div>\n\n\n\n<script type=\"application\/ld+json\">{\n    \"@context\": \"https:\\\/\\\/schema.org\",\n    \"@graph\": [\n        {\n            \"@type\": \"SoftwareApplication\",\n            \"name\": \"Gudu SQLFlow\",\n            \"applicationCategory\": \"DeveloperApplication\",\n            \"applicationSubCategory\": \"SQL Data Lineage Tool\",\n            \"operatingSystem\": \"Web, Linux, Windows, macOS\",\n            \"url\": \"https:\\\/\\\/www.gudusoft.com\\\/postgresql-data-lineage\\\/\",\n            \"description\": \"Automated PostgreSQL data lineage: SQLFlow parses views, writable CTEs, ON CONFLICT upserts, and partitioned-table DDL to produce interactive column-level lineage diagrams.\",\n            \"featureList\": \"PostgreSQL dialect parser, column-level lineage, nested view chain resolution, writable CTE analysis, INSERT ON CONFLICT lineage, inheritance and partitioning support, indirect\\\/impact lineage, JDBC ingestion, DataHub\\\/Purview\\\/OpenMetadata export, AI lineage query\",\n            \"softwareVersion\": \"8.2.3\",\n            \"offers\": [\n                {\n                    \"@type\": \"Offer\",\n                    \"name\": \"SQLFlow Cloud Free\",\n                    \"price\": \"0\",\n                    \"priceCurrency\": \"USD\"\n                },\n                {\n                    \"@type\": \"Offer\",\n                    \"name\": \"SQLFlow Cloud Premium\",\n                    \"price\": \"49.99\",\n                    \"priceCurrency\": \"USD\",\n                    \"priceSpecification\": {\n                        \"@type\": \"UnitPriceSpecification\",\n                        \"price\": \"49.99\",\n                        \"priceCurrency\": \"USD\",\n                        \"billingIncrement\": 1,\n                        \"unitText\": \"MONTH\"\n                    }\n                },\n                {\n                    \"@type\": \"Offer\",\n                    \"name\": \"SQLFlow On-Premise\",\n                    \"price\": \"4800\",\n                    \"priceCurrency\": \"USD\"\n                }\n            ],\n            \"publisher\": {\n                \"@type\": \"Organization\",\n                \"name\": \"Gudu Software\",\n                \"url\": \"https:\\\/\\\/www.gudusoft.com\\\/\"\n            }\n        },\n        {\n            \"@type\": \"FAQPage\",\n            \"mainEntity\": [\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Does PostgreSQL have built-in data lineage?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"No. PostgreSQL tracks object-level dependencies in pg_depend for integrity purposes like DROP CASCADE, but it does not record how columns are transformed. Column-level lineage has to be derived by parsing the SQL in view definitions and scripts, which is what SQLFlow does.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Does SQLFlow need access to my table data?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"No. SQLFlow performs static analysis of SQL code and optionally reads schema metadata to resolve references. It never reads rows. With the On-Premise edition, even the SQL text stays inside your network.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"Can SQLFlow trace lineage through writable CTEs and ON CONFLICT upserts?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"Yes. The PostgreSQL dialect parser handles WITH ... INSERT\\\/UPDATE\\\/DELETE ... RETURNING statements and INSERT ... ON CONFLICT DO UPDATE, mapping both the insert and update column flows into the target table.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"How are partitioned and inherited tables handled?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"SQLFlow parses PostgreSQL inheritance and declarative partitioning DDL, so lineage for queries against a parent table is attached at the parent level rather than splintering into per-partition edges.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"How do I get lineage for an entire PostgreSQL database, not just one query?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"Connect SQLFlow to the database over JDBC or extract metadata with the Grabit ingester. SQLFlow pulls all DDL and view definitions, analyzes them together, and maintains a persistent, incrementally updated lineage repository scaling to estates of 100+ databases.\"\n                    }\n                },\n                {\n                    \"@type\": \"Question\",\n                    \"name\": \"How much does SQLFlow cost?\",\n                    \"acceptedAnswer\": {\n                        \"@type\": \"Answer\",\n                        \"text\": \"SQLFlow Cloud starts free; premium accounts are $49.99\\\/month. SQLFlow On-Premise is $500\\\/month or $4,800 one-time per selected database type, plus $100\\\/month or $1,000 one-time per additional database type.\"\n                    }\n                }\n            ]\n        }\n    ]\n}<\/script>","protected":false},"excerpt":{"rendered":"<p>PostgreSQL data lineage is the column-level map of how data moves through your PostgreSQL views, CTEs, and DML: which base-table columns feed each view or report column, and which joins, filters, casts, and aggregates transform the data along the way. PostgreSQL&#8217;s own catalog tells you that objects depend on each other \u2014 pg_depend records that a view references a table \u2014 but it says nothing about how columns transform. Building real lineage means parsing the SQL itself, and that is exactly what Gudu SQLFlow does, with a dedicated PostgreSQL dialect parser rather than a generic ANSI grammar. Try it in\u2026<\/p>","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":5}},"_links":{"self":[{"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/pages\/6756"}],"collection":[{"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/comments?post=6756"}],"version-history":[{"count":0,"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/pages\/6756\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gudusoft.com\/pt\/wp-json\/wp\/v2\/media?parent=6756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}