{"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\/es\/linaje-de-datos-de-postgresql\/","title":{"rendered":"Linaje de datos de PostgreSQL: Linaje a nivel de columna desde vistas y SQL"},"content":{"rendered":"<p><strong>Linaje de datos de PostgreSQL<\/strong> es el mapa a nivel de columna de c\u00f3mo se mueven los datos a trav\u00e9s de sus vistas, CTE y DML de PostgreSQL: qu\u00e9 columnas de la tabla base alimentan cada columna de vista o informe, y qu\u00e9 uniones, filtros, conversiones y agregaciones transforman los datos en el proceso. El propio cat\u00e1logo de PostgreSQL le indica que los objetos dependen unos de otros. <code>pg_depend<\/code> registra que una vista hace referencia a una tabla, pero no dice nada sobre c\u00f3mo se transforman las columnas. Construir un linaje real significa analizar el SQL en s\u00ed, y eso es exactamente lo que <strong>Flujo de SQL de Gudu<\/strong> S\u00ed, con un analizador de dialecto espec\u00edfico para PostgreSQL en lugar de una 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>Pru\u00e9balo en 30 segundos:<\/strong> Pegue cualquier consulta o definici\u00f3n de vista de PostgreSQL en el <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 linaje SQLFlow gratuito<\/a> y obtenga un diagrama de linaje interactivo a nivel de columna. La edici\u00f3n en la nube tiene un nivel gratuito.<\/p>\n\n<\/div><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfPor qu\u00e9 pg_depend no puede responder preguntas sobre el linaje?<\/h2>\n\n\n\n<p>PostgreSQL mantiene registros de dependencias meticulosos. <code>pg_depend<\/code> y <code>pg_rewrite<\/code> saber que <code>v_region_revenue<\/code> no se puede eliminar mientras haga referencia a <code>v_orders_enriched<\/code>, y <code>esquema_de_informaci\u00f3n<\/code> Las vistas exponen a qu\u00e9 tablas accede una vista. Eso es seguimiento de dependencias a nivel de objeto, creado para <code>CA\u00cdDA ... CASCADA<\/code> Seguridad, no linaje.<\/p>\n\n\n\n<p>Lo que el cat\u00e1logo no puede decirle: qu\u00e9 columnas espec\u00edficas alimentan <code>ganancia<\/code>, si <code>cantidad<\/code> fue fundido o agregado en el camino, ya sea <code>estado<\/code> Filtra el resultado sin aparecer nunca en \u00e9l, y muestra c\u00f3mo se ve la ruta completa cuando las vistas se apilan a tres o cuatro niveles de profundidad. Responder a &quot;\u00bfde d\u00f3nde viene este n\u00famero?&quot; o &quot;\u00bfqu\u00e9 falla si elimino esta columna?&quot; requiere reconstruir la l\u00f3gica de transformaci\u00f3n a partir del texto SQL almacenado en las definiciones de vista; un problema de an\u00e1lisis sint\u00e1ctico, no una consulta de cat\u00e1logo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo SQLFlow crea el linaje de datos de PostgreSQL<\/h2>\n\n\n\n<ol><li><strong>Ingerir SQL.<\/strong> Pegue consultas, cargue archivos de script, con\u00e9ctese a PostgreSQL a trav\u00e9s de JDBC para obtener DDL y ver definiciones directamente, o importe un manifiesto dbt para proyectos dbt-on-Postgres.<\/li>\n<li><strong>Analizar con una gram\u00e1tica espec\u00edfica de PostgreSQL.<\/strong> SQLFlow est\u00e1 construido sobre la base de <a href=\"https:\/\/www.sqlparser.com\/\">Analizador SQL general (GSP)<\/a>, un front-end de compilador SQL comercial desarrollado desde mediados de la d\u00e9cada de 2000 y validado contra aproximadamente 13.600 conjuntos de prueba por dialecto. Su analizador PostgreSQL maneja las construcciones propias del dialecto: CTEs modificables, <code>INSERTAR ... SOBRE EL CONFLICTO<\/code>, el <code>::<\/code> Operador de conversi\u00f3n, herencia y particionamiento DDL: y su resolvedor sem\u00e1ntico se expande <code>SELECCIONAR *<\/code>Resuelve las referencias de columna a trav\u00e9s de CTEs, subconsultas y definiciones de vista, y luego extrae las relaciones de origen a destino con granularidad de columna.<\/li>\n<li><strong>Visualizar y exportar.<\/strong> El resultado es un diagrama interactivo que permite seguir el flujo de datos desde cualquier columna, tanto aguas arriba como aguas abajo, y que se puede exportar como JSON, CSV o PNG, o consultar a trav\u00e9s de una API REST.<\/li><\/ol>\n\n\n\n<p>PostgreSQL es uno de los 39 dialectos para los que SQLFlow incluye analizadores, incluidos los motores de la familia Postgres Greenplum, Amazon Redshift y EDB Postgres, cada uno con su propio analizador porque cada uno se ha desviado del n\u00facleo de PostgreSQL de maneras que importan para un motor de linaje. La metodolog\u00eda completa se cubre en el <a href=\"https:\/\/www.gudusoft.com\/es\/herramienta-de-linaje-de-datos-sql\/\">Descripci\u00f3n general de la herramienta de linaje de datos SQL<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rastreo de una cadena de vistas anidadas hasta las tablas base<\/h2>\n\n\n\n<p>Las pilas de vistas superpuestas son la forma predeterminada en que se acumula la l\u00f3gica en PostgreSQL, y es donde el rastreo manual del linaje falla. Consideremos una cadena de dos niveles:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE 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;; CREATE 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>Preg\u00fantale a SQLFlow d\u00f3nde <code>v_region_revenue.revenue<\/code> proviene de y resuelve la cadena completa: <code>ganancia<\/code> es <code>SUMA()<\/code> encima <code>v_orders_enriched.amount<\/code>, que es un <code>num\u00e9rico(12,2)<\/code> reparto de <code>pedidos.cantidad<\/code>El diagrama muestra cada salto \u2014tabla base, vista intermedia, agregado\u2014 como una ruta explorable, no como una simple suposici\u00f3n. Tambi\u00e9n pone de manifiesto lo que una lectura ingenua pasa por alto: <code>estado de los pedidos<\/code> nunca aparece en la salida, sin embargo, cada cifra de ingresos depende de la <code>DONDE o.status = &#039;enviado&#039;<\/code> filtro. SQLFlow registra eso como linaje indirecto (m\u00e1s abajo).<\/p>\n\n\n\n<p>La misma resoluci\u00f3n funciona a cualquier profundidad. En un esquema real donde las vistas se apilan a cinco niveles de profundidad y la mitad de ellas utilizan <code>SELECCIONAR *<\/code>SQLFlow expande los asteriscos en funci\u00f3n de las definiciones de tabla reales obtenidas a trav\u00e9s de JDBC, de modo que el linaje se mantiene preciso a nivel de columna incluso cuando el texto SQL nunca nombra las columnas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Constructos de PostgreSQL que rompen los analizadores sint\u00e1cticos gen\u00e9ricos<\/h2>\n\n\n\n<p>Las herramientas que tratan PostgreSQL como \u201cSQL est\u00e1ndar ANSI\u201d fallan precisamente en las sentencias que manejan el mayor flujo de datos. Todas estas sentencias son gestionadas por el analizador de dialecto PostgreSQL de SQLFlow:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Construir<\/th><th>Por qu\u00e9 es importante para el linaje<\/th><\/tr><\/thead><tbody>\n<tr><td>CTE modificables (<code>CON ... INSERTAR\/ACTUALIZAR\/ELIMINAR ... RETORNANDO<\/code>)<\/td><td>Una sola instrucci\u00f3n lee y escribe: la salida DML de la CTE alimenta la consulta externa. El linaje debe conectar la tabla modificada, la <code>REGRESO<\/code> columnas y el objetivo final en un gr\u00e1fico.<\/td><\/tr>\n<tr><td><code>INSERTAR ... EN CASO DE CONFLICTO, ACTUALIZAR<\/code><\/td><td>Las operaciones Upsert enrutan los datos por dos rutas: la ruta de inserci\u00f3n y la ruta de actualizaci\u00f3n a trav\u00e9s de la <code>EXCLUIDO<\/code> pseudotabla. Ambos son flujos de columnas reales hacia la tabla de destino.<\/td><\/tr>\n<tr><td>Herencia de tablas y particionamiento declarativo<\/td><td>Las consultas a una tabla principal leen impl\u00edcitamente sus tablas secundarias. SQLFlow analiza el DDL de herencia y particionamiento para que el linaje se adjunte correctamente a nivel de la tabla principal en lugar de fragmentarse por partici\u00f3n.<\/td><\/tr>\n<tr><td>CTE encadenadas y vistas anidadas<\/td><td>Las referencias a columnas deben resolverse a trav\u00e9s de cada capa intermedia, incluidas las CTE que hacen referencia a CTE anteriores, hasta llegar a las tablas base f\u00edsicas.<\/td><\/tr>\n<tr><td><code>::<\/code> columnas de expresiones y ladrones<\/td><td>Cada columna de salida se asigna a sus fuentes a trav\u00e9s de las funciones y conversiones aplicadas, por lo que puede ver no solo <em>d\u00f3nde<\/em> un valor provino de pero <em>\u00bfQu\u00e9 le pas\u00f3?<\/em>.<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Linaje directo vs. indirecto: las columnas de filtro que de otro modo pasar\u00edas por alto.<\/h2>\n\n\n\n<p>SQLFlow distingue <strong>linaje directo<\/strong> \u2014 valores de columna que fluyen f\u00edsicamente a una salida \u2014 desde <strong>linaje indirecto (de impacto)<\/strong> \u2014 columnas utilizadas en <code>D\u00d3NDE<\/code> cl\u00e1usulas, <code>UNIRSE<\/code> condiciones y <code>AGRUPACI\u00d3N POR<\/code> claves que dan forma al resultado sin llegar a \u00e9l. En el ejemplo anterior, <code>pedidos.cantidad<\/code> es linaje directo para <code>ganancia<\/code>; <code>estado de los pedidos<\/code> y ambos <code>ID del cliente<\/code> Las claves de uni\u00f3n son indirectas.<\/p>\n\n\n\n<p>La distinci\u00f3n se puede activar o desactivar en el diagrama y cambia las decisiones reales. Si planea cambiar el dominio de <code>estado de los pedidos<\/code>El linaje directo indica que nada depende de \u00e9l; el linaje indirecto muestra todos los informes de ingresos que filtra silenciosamente. La mayor\u00eda de las herramientas de linaje no modelan este tipo de relaci\u00f3n en absoluto.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Desde una sola consulta hasta todo un entorno PostgreSQL.<\/h2>\n\n\n\n<p>Para una \u00fanica cadena de vistas compleja, el nivel gratuito de SQLFlow Cloud es suficiente: pegar, analizar, explorar. M\u00e1s all\u00e1 de eso:<\/p>\n\n\n\n<ul><li><strong>Escaneos de bases de datos completas:<\/strong> Con\u00e9ctese mediante JDBC (o utilice el extractor de metadatos Grabit) para obtener todas las definiciones de vistas y objetos y crear un repositorio de linaje persistente. Las implementaciones empresariales escanean por lotes conjuntos de m\u00e1s de 100 bases de datos y m\u00e1s de un mill\u00f3n de columnas, con reescaneos incrementales.<\/li>\n<li><strong>Integraci\u00f3n del cat\u00e1logo:<\/strong> Los adaptadores de exportaci\u00f3n env\u00edan el linaje a nivel de columna a DataHub, Microsoft Purview y OpenMetadata, de modo que SQLFlow puede funcionar como el motor de linaje detr\u00e1s del cat\u00e1logo que ya utiliza.<\/li>\n<li><strong>Entornos aislados del aire:<\/strong> <a href=\"https:\/\/www.gudusoft.com\/es\/version-local-de-sqlflow\/\">SQLFlow local<\/a> Se ejecuta en Docker o Kubernetes dentro de su red por $500\/mes o $4,800 por \u00fanica vez por tipo de base de datos, instalable en dos servidores. El texto SQL nunca sale de su infraestructura.<\/li>\n<li><strong>Privacidad desde el dise\u00f1o:<\/strong> SQLFlow realiza un an\u00e1lisis est\u00e1tico \u00fanicamente del c\u00f3digo SQL y los metadatos del esquema. Nunca lee las filas de las tablas.<\/li><\/ul>\n\n\n\n<p>Desde la versi\u00f3n 8.2.3 tambi\u00e9n puede consultar el gr\u00e1fico resultante en lenguaje natural: &quot;qu\u00e9 vistas dependen de <code>pedidos.cantidad<\/code>?\u201d \u2014 con cada tabla y columna de la respuesta validada contra el linaje analizado antes de ser mostrada.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00bfQu\u00e9 hay de las herramientas de linaje de c\u00f3digo abierto para PostgreSQL?<\/h2>\n\n\n\n<p>Analizadores sint\u00e1cticos de c\u00f3digo abierto como <code>sqllineage<\/code> y <code>sqlglot<\/code> Son realmente buenos para extraer el linaje a nivel de tabla y a nivel de columna b\u00e1sica de consultas individuales, y para un pu\u00f1ado de sentencias SELECT limpias pueden ser todo lo que necesite. Las deficiencias aparecen en PostgreSQL de producci\u00f3n: resolver <code>SELECCIONAR *<\/code> a trav\u00e9s de cadenas de vistas requiere metadatos de esquema en vivo; CTEs escribibles y <code>SOBRE EL CONFLICTO<\/code> Las operaciones de inserci\u00f3n\/actualizaci\u00f3n requieren gram\u00e1ticas exactas para cada dialecto; el linaje indirecto mediante filtros y claves de uni\u00f3n generalmente no se modela; y extraer el linaje no es lo mismo que visualizarlo, almacenarlo y compararlo entre miles de objetos. Si est\u00e1 evaluando, ejecute su pila de vistas m\u00e1s profunda y su operaci\u00f3n de inserci\u00f3n\/actualizaci\u00f3n m\u00e1s compleja en ambas y compare los gr\u00e1ficos.<\/p>\n\n\n\n<p>Si su propiedad mezcla motores, la misma familia de analizadores los cubre con el mismo formato de salida; consulte las p\u00e1ginas complementarias para <a href=\"https:\/\/www.gudusoft.com\/es\/linaje-de-datos-de-mysql\/\">Linaje de datos de MySQL<\/a>, <a href=\"https:\/\/www.gudusoft.com\/es\/linaje-de-datos-de-desplazamiento-al-rojo\/\">Linaje de datos de Redshift<\/a>, y <a href=\"https:\/\/www.gudusoft.com\/es\/linaje-de-datos-de-greenplum\/\">Linaje de datos de Greenplum<\/a>, o el <a href=\"https:\/\/www.gudusoft.com\/es\/base-de-conocimiento-de-linaje-de-datos\/\">base de conocimiento del linaje de datos<\/a> para conceptos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Preguntas frecuentes<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPostgreSQL tiene linaje de datos integrado?<\/h3>\n\n\n<p>No. PostgreSQL rastrea las dependencias a nivel de objeto en <code>pg_depend<\/code> \u2014 qu\u00e9 vistas hacen referencia a qu\u00e9 tablas \u2014 por motivos de integridad como <code>CA\u00cdDA ... CASCADA<\/code>No registra c\u00f3mo se transforman las columnas. El linaje a nivel de columna debe derivarse analizando el SQL en las definiciones de vista y los scripts, que es lo que hace SQLFlow.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfSQLFlow necesita acceso a los datos de mi tabla?<\/h3>\n\n\n<p>No. SQLFlow realiza un an\u00e1lisis est\u00e1tico del c\u00f3digo SQL y, opcionalmente, lee los metadatos del esquema (definiciones de tablas y columnas) para resolver las referencias. Nunca lee filas. Con la edici\u00f3n local, incluso el texto SQL permanece dentro de su red.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfPuede SQLFlow rastrear el linaje a trav\u00e9s de CTEs modificables y de las operaciones de inserci\u00f3n\/actualizaci\u00f3n ON CONFLICT?<\/h3>\n\n\n<p>S\u00ed. El analizador de dialectos de PostgreSQL maneja <code>CON ... INSERTAR\/ACTUALIZAR\/ELIMINAR ... RETORNANDO<\/code> declaraciones y <code>INSERTAR ... EN CASO DE CONFLICTO, ACTUALIZAR<\/code>, mapeando los flujos de inserci\u00f3n y actualizaci\u00f3n de columnas en la tabla de destino.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfC\u00f3mo se gestionan las tablas particionadas y heredadas?<\/h3>\n\n\n<p>SQLFlow analiza la herencia de PostgreSQL y el DDL de particionamiento declarativo, de modo que el linaje de las consultas contra una tabla principal se adjunta al nivel de la tabla principal en lugar de dividirse en aristas por partici\u00f3n.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfC\u00f3mo puedo obtener el linaje de una base de datos PostgreSQL completa, no solo de una consulta?<\/h3>\n\n\n<p>Conecte SQLFlow a la base de datos mediante JDBC o extraiga los metadatos con el ingester Grabit. SQLFlow recopila todas las definiciones DDL y de vistas, las analiza conjuntamente y mantiene un repositorio de linaje persistente y actualizado incrementalmente, escalable a entornos de m\u00e1s de 100 bases de datos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u00bfCu\u00e1nto cuesta SQLFlow?<\/h3>\n\n\n<p>SQLFlow Cloud comienza siendo gratuito; las cuentas premium cuestan 49,99 \u20ac al mes. SQLFlow On-Premise cuesta 500 \u20ac al mes o 4800 \u20ac por \u00fanica vez por cada tipo de base de datos seleccionado, m\u00e1s 100 \u20ac al mes o 1000 \u20ac por \u00fanica vez por cada tipo de base de datos 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\">Rastrea ahora el linaje de tu PostgreSQL.<\/h2>\n\n\n<p>Pegue la definici\u00f3n de una vista en el visualizador gratuito y vea el gr\u00e1fico a nivel de columna, o cont\u00e1ctenos para que analicemos toda su infraestructura de 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\">Prueba SQLFlow gratis<\/a><\/div>\n\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/www.gudusoft.com\/es\/contacto\/\">Solicite una demostraci\u00f3n para empresas.<\/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\/es\/wp-json\/wp\/v2\/pages\/6756"}],"collection":[{"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/comments?post=6756"}],"version-history":[{"count":0,"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/pages\/6756\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.gudusoft.com\/es\/wp-json\/wp\/v2\/media?parent=6756"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}