linhagem de dados do PostgreSQL é o mapa em nível 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ório e quais junções, filtros, conversões e agregações transformam os dados ao longo do caminho. O próprio catálogo do PostgreSQL informa que os objetos dependem uns dos outros — pg_depend Os registros indicam que uma view faz referência a uma tabela, mas não dizem nada sobre como as colunas se transformam. Construir uma linhagem real significa analisar o próprio SQL, e é exatamente isso que estamos fazendo. Gudu SQLFlow faz isso, com um analisador de dialeto PostgreSQL dedicado em vez de uma gramática ANSI genérica.
Experimente em 30 segundos: Cole qualquer consulta ou definição de visualização do PostgreSQL no Visualizador de linhagem SQLFlow gratuito e obtenha um diagrama de linhagem interativo em nível de coluna. A versão em nuvem possui um plano gratuito.
Por que o pg_depend não consegue responder a perguntas sobre linhagem?
O PostgreSQL mantém registros de dependências meticulosos. pg_depend e pg_rewrite saiba que receita_regional não pode ser descartado enquanto fizer referência a v_pedidos_enriquecidos, e esquema_de_informação As visualizações expõem quais tabelas uma visualização acessa. Isso é o rastreamento de dependências em nível de objeto, criado para GOTEJAR ... CASCATA Segurança — não linhagem.
O que o catálogo não pode lhe dizer: quais colunas específicas alimentam o sistema. receita, se quantia foi lançado ou agregado no caminho, seja status filtra o resultado sem nunca aparecer nele, e mostra como o caminho completo se parece quando as visualizações se acumulam em três ou quatro níveis de profundidade. Responder a perguntas como "de onde vem esse número?" ou "o que acontece se eu remover essa coluna?" exige reconstruir a lógica de transformação a partir do texto SQL armazenado nas definições de visualização — um problema de análise sintática, não uma consulta de catálogo.
Como o SQLFlow constrói a linhagem de dados do PostgreSQL
- Ingerir SQL. Cole consultas, carregue arquivos de script, conecte-se ao PostgreSQL via JDBC para obter DDL e visualizar definições diretamente ou importe um manifesto dbt para projetos dbt-on-Postgres.
- Analisar com uma gramática específica do PostgreSQL. O SQLFlow é construído sobre o Analisador SQL Geral (GSP), 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ático PostgreSQL lida com as construções próprias do dialeto — CTEs graváveis,
INSERIR ... EM CASO DE CONFLITO, o::Operador de conversão de tipo, herança e particionamento de DDL — e suas expansões de resolvedor semânticoSELECIONE *, resolve referências de coluna por meio de CTEs, subconsultas e definições de visualização e, em seguida, extrai relacionamentos de origem para destino em nível de coluna. - Visualize e exporte. O resultado é um diagrama interativo que você pode rastrear a montante e a jusante de qualquer coluna, exportável como JSON, CSV ou PNG, ou consultável por meio de uma API REST.
O PostgreSQL é um dos 39 dialetos para os quais o SQLFlow fornece analisadores sintáticos — incluindo os mecanismos da família Postgres: Greenplum, Amazon Redshift e EDB Postgres, cada um com seu próprio analisador sintático, pois cada um divergiu do PostgreSQL principal de maneiras relevantes para um mecanismo de linhagem. A metodologia completa é abordada no documento. Visão geral da ferramenta de linhagem de dados SQL.
Rastreando uma cadeia de visualização aninhada até as tabelas base.
A lógica é acumulada por meio de pilhas de visualização (view-on-view) no PostgreSQL, e é nesse ponto que o rastreamento manual de linhagem falha. Considere uma cadeia de dois níveis:
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 = 'shipped'; CRIAR VIEW v_region_revenue AS SELECT region, SUM(amount) AS revenue FROM v_orders_enriched GROUP BY region;
Pergunte ao SQLFlow onde v_region_revenue.revenue vem de e resolve toda a cadeia: receita é SOMA() sobre v_orders_enriched.amount, que é um numérico(12,2) elenco de pedidos.quantidadeO diagrama mostra cada etapa — tabela base, visão intermediária, agregado — como um caminho explorável, não como um palpite superficial. Ele também revela o que uma leitura ingênua não percebe: pedidos.status nunca aparece na saída, mas cada valor de receita depende do ONDE o.status = 'enviado' filtro. O SQLFlow registra isso como linhagem indireta (mais detalhes abaixo).
A mesma resolução funciona em qualquer profundidade. Em um esquema real onde as visualizações se empilham em cinco níveis de profundidade e metade delas usa SELECIONE *O SQLFlow expande os asteriscos com base nas definições reais das tabelas obtidas via JDBC, de modo que a linhagem permaneça precisa em nível de coluna, mesmo quando o texto SQL não nomeia as colunas.
Construções do PostgreSQL que quebram analisadores sintáticos genéricos
Ferramentas que tratam o PostgreSQL como "aproximadamente ANSI SQL" falham justamente nas instruções que carregam o maior fluxo de dados. Todas essas instruções são tratadas pelo analisador de dialeto PostgreSQL do SQLFlow:
| Construir | Por que isso é importante para a linhagem |
|---|---|
CTEs graváveis (COM ... INSERIR/ATUALIZAR/EXCLUIR ... RETORNANDO) | Uma única instrução lê e escreve: a saída DML da CTE alimenta a consulta externa. A linhagem deve conectar a tabela modificada, a RETORNANDO colunas e o objetivo final em um gráfico. |
INSERIR ... EM CASO DE CONFLITO, ATUALIZAR | As operações de upsert encaminham os dados por dois caminhos — o caminho de inserção e o caminho de atualização através do EXCLUÍDO pseudo-tabela. Ambas são fluxos de colunas reais para a tabela de destino. |
| Herança de tabelas e particionamento declarativo | Consultas em uma tabela pai leem implicitamente suas tabelas filhas. O SQLFlow analisa o DDL de herança e particionamento para que a linhagem seja anexada corretamente no nível pai, em vez de fragmentada por partição. |
| CTEs encadeadas e visualizações aninhadas | As referências de coluna devem ser resolvidas em todas as camadas intermediárias, incluindo as CTEs que fazem referência a CTEs anteriores, até chegar às tabelas base físicas. |
:: colunas de elenco e expressão | Cada coluna de saída é mapeada para suas fontes por meio das funções e conversões aplicadas, para que você possa ver não apenas onde um valor veio de mas O que aconteceu com ele?. |
Linhagem direta versus indireta: as colunas de filtro que você perderia se não as visse.
O SQLFlow distingue linhagem direta — valores de coluna que fluem fisicamente para uma saída — de linhagem indireta (de impacto) — colunas usadas em ONDE cláusulas, JUNTAR condições e AGRUPAR POR teclas que moldam o resultado sem chegar até ele. No exemplo acima, pedidos.quantidade é linhagem direta para receita; pedidos.status e ambos id_do_cliente As chaves de junção são indiretas.
A distinção pode ser alterada no diagrama e modifica decisões reais. Se você planeja alterar o domínio de pedidos.statusA linhagem direta indica que nada depende dela; a linhagem indireta mostra todos os relatórios de receita que filtra silenciosamente. A maioria das ferramentas de linhagem não modela esse tipo de relacionamento.
De uma única consulta a um ambiente PostgreSQL completo.
Para uma única cadeia de visualização complexa, o nível gratuito do SQLFlow Cloud é suficiente: colar, analisar, detalhar. Além disso:
- Varreduras completas do banco de dados: Conecte-se via JDBC (ou use o extrator de metadados Grabit) para obter todas as definições de visualização e objeto e construir um repositório de linhagem persistente. Implantações corporativas realizam varreduras em lote em conjuntos de mais de 100 bancos de dados e mais de um milhão de colunas, com novas varreduras incrementais.
- Integração de catálogo: Os adaptadores de exportação enviam a linhagem em nível de coluna para o DataHub, Microsoft Purview e OpenMetadata, permitindo que o SQLFlow funcione como o mecanismo de linhagem por trás do catálogo que você já utiliza.
- Ambientes isolados por ar: SQLFlow no local Executa em Docker ou Kubernetes dentro da sua rede por $500/mês ou $4.800 (pagamento único) por tipo de banco de dados, instalável em dois servidores. O texto SQL nunca sai da sua infraestrutura.
- Privacidade por design: O SQLFlow realiza apenas análises estáticas do código SQL e dos metadados do esquema. Ele nunca lê as linhas das suas tabelas.
A partir da versão 8.2.3, você também pode consultar o gráfico resultante em linguagem natural — “quais visualizações dependem de pedidos.quantidade?” — com cada tabela e coluna na resposta validada em relação à linhagem analisada antes de ser exibida.
E quanto às ferramentas de linhagem PostgreSQL de código aberto?
Analisadores de código aberto como linhagem sql e sqlglot São realmente boas em extrair a linhagem de tabelas e colunas básicas de consultas individuais e, para um punhado de instruções SELECT simples, podem ser tudo o que você precisa. As lacunas aparecem no PostgreSQL de produção: resolução SELECIONE * através de cadeias de visualização requer metadados de esquema ativos; CTEs graváveis e EM CONFLITO As operações de upsert exigem gramáticas que correspondam exatamente ao dialeto; a linhagem indireta por meio de filtros e chaves de junção geralmente não é modelada; e extrair a linhagem não é o mesmo que visualizá-la, armazená-la e compará-la em milhares de objetos. Se você estiver avaliando, execute sua pilha de visualização mais profunda e sua operação de upsert mais complexa em ambas e compare os gráficos.
Se o seu sistema operacional utiliza diferentes mecanismos de processamento, a mesma família de analisadores sintáticos os abrange com o mesmo formato de saída — consulte as páginas complementares para obter mais detalhes. linhagem de dados MySQL, Linhagem de dados Redshift, e linhagem de dados Greenplumou o base de conhecimento de linhagem de dados para conceitos.
Perguntas frequentes
O PostgreSQL possui linhagem de dados integrada?
Não. O PostgreSQL rastreia dependências em nível de objeto em pg_depend — quais visualizações fazem referência a quais tabelas — para fins de integridade, como GOTEJAR ... CASCATANão registra como as colunas são transformadas. A linhagem em nível de coluna precisa ser derivada da análise do SQL nas definições de visualização e nos scripts, que é o que o SQLFlow faz.
O SQLFlow precisa acessar os dados da minha tabela?
Não. O SQLFlow realiza análise estática do código SQL e, opcionalmente, lê metadados do esquema (definições de tabelas e colunas) para resolver referências. Ele nunca lê linhas. Na edição On-Premise, até mesmo o texto SQL permanece dentro da sua rede.
O SQLFlow consegue rastrear a linhagem por meio de CTEs graváveis e upserts com ON CONFLICT?
Sim. O analisador de dialeto do PostgreSQL lida com isso. COM ... INSERIR/ATUALIZAR/EXCLUIR ... RETORNANDO declarações e INSERIR ... EM CASO DE CONFLITO, ATUALIZAR, mapeando os fluxos de colunas de inserção e atualização para a tabela de destino.
Como são tratadas as tabelas particionadas e herdadas?
O SQLFlow analisa a herança do PostgreSQL e o DDL de particionamento declarativo, de modo que a linhagem das consultas em uma tabela pai seja anexada no nível pai, em vez de ser fragmentada em arestas por partição.
Como faço para obter a linhagem de um banco de dados PostgreSQL inteiro, e não apenas de uma consulta específica?
Conecte o SQLFlow ao banco de dados via JDBC ou extraia metadados com o ingestor Grabit. O SQLFlow coleta todas as definições de DDL e de visualização, analisa-as em conjunto e mantém um repositório de linhagem persistente e atualizado incrementalmente — escalável para ambientes com mais de 100 bancos de dados.
Qual o preço do SQLFlow?
O SQLFlow Cloud é gratuito a partir de um primeiro momento; contas premium custam £49,99/mês. O SQLFlow On-Premise custa £500/mês ou £4.800 (pagamento único) por tipo de banco de dados selecionado, mais £100/mês ou £1.000 (pagamento único) por tipo de banco de dados adicional.
Agora, rastreie sua linhagem do PostgreSQL.
Cole uma definição de visualização no visualizador gratuito e veja o gráfico em nível de coluna ou entre em contato conosco para analisarmos todo o seu ambiente PostgreSQL.