Skip to content
GEOSAT
Back to blog
Open GIS
Open GIS2026-09-23GEOSAT6 min read

ArcGIS and QGIS on PostGIS: what to share and what to validate

Design a shared database without confusing SQL connectivity with editing or versioning equivalence.

Editorial review: 2026-09-23

PostGISQGISArcGISOpen GIS

A hybrid architecture can retain ArcGIS for a specialized workflow while using QGIS for other tasks. Sharing PostgreSQL/PostGIS reduces copies but does not remove differences in data models, drivers and licensing. Distinguish an ordinary spatial PostgreSQL database from an Esri-managed enterprise geodatabase.

Decide who writes first

Start with read access from both clients. Use a synthetic table with a unique, non-null integer key, homogeneous geometry type and explicit CRS. Do not declare a view column unique when it is not: clients may omit or misidentify features.

Code example
SELECT id, count(*) FROM cadastre_lab.parcels
GROUP BY id HAVING count(*) > 1;
SELECT ST_SRID(geom), GeometryType(geom), count(*)
FROM cadastre_lab.parcels GROUP BY 1, 2;

These queries assume the cadastral tutorial table. The first should return zero rows; the second should show the expected type and CRS. Reject unexpected mixtures before exposing the table as a query layer.

Connections and compatibility

In QGIS configure a PostgreSQL connection with a read-only account and inspect geometry, key and permissions. In ArcGIS Pro consult the current PostgreSQL/PostGIS support matrix for your exact release, configure required client components and test a query layer. Read availability does not establish editability through every ArcGIS mechanism.

Compare selection by identifier, attribute filters, spatial extent and null values. Test timezone-aware dates, large numbers and field names. For large tables, check that geometry and extent detection do not trigger expensive queries every time a project opens.

Writes under a contract

Do not write directly from external tools into internal tables of a versioned geodatabase. Esri metadata and procedures are part of its operational model. For QGIS exchange, design read-only views, controlled exports or a supported editing service. Validate against the documentation for your product and version.

For ordinary PostGIS tables, establish constraints and a concurrency strategy before allowing multiple writers. A SQL update does not necessarily execute validation previously implemented only in a form or service.

When to retain a boundary

Separate systems where a workflow depends on versioning, specialized networks or service behavior not yet reproduced. Integrate through a published view or traceable exchange while evaluating alternatives. Accept the architecture only after testing reading, authorized editing, rejection, recovery and rollback from actual clients. An open port and successful connection are merely the beginning of that verification.

Pick a coexistence pattern deliberately

PatternGood starting useBoundary to preserve
Both clients read ordinary PostGIS tablesShared reporting and map productionHomogeneous geometry, unique keys and supported versions
QGIS edits ordinary tables; ArcGIS readsGradual desktop transitionDatabase rules and refresh behavior
Clients consume a published feature serviceControlled service-based accessAuthentication, service capabilities and entitlements
Export/import between managed systemsSpecialized workflow retainedVersion, identity mapping and reconciliation
Direct edits to Esri-managed internal tablesAvoid as an assumed integrationGeodatabase behavior requires supported procedures

Begin with the pattern that changes the fewest responsibilities. Shared read access can remove a duplicate export without changing who owns editing. That may be a valuable first migration step even when an Esri-specific workflow remains.

The concrete ArcGIS editing limitation

Esri's PostgreSQL requirements distinguish direct database access from editing through a web feature layer. The current query-layer documentation also describes query layers in an ArcGIS Pro map as read-only. Therefore, “ArcGIS connects to PostGIS” must not be presented as “ArcGIS Pro directly edits any ordinary PostGIS table.” Verify the exact supported editing path for the installed release and licensed deployment.

The linked latest documentation can change. Record the ArcGIS Pro and Enterprise versions in your compatibility result and consult their matching documentation. A supported database version for a newer ArcGIS release does not automatically validate an older desktop estate.

Design an interoperability test dataset

Use a small table with a stable integer key, one explicit geometry type, one CRS and representative attributes. Include an accented label, a null optional value, a timezone-aware timestamp and an identifier whose formatting matters. If production uses multipart, Z or M coordinates, include those cases in separate clearly defined layers rather than assuming a mixed layer will behave consistently.

Test a view as well as a table if publication depends on joins. A join can repeat the apparent identifier and cause client selection errors. Validate uniqueness after applying the actual query, not only in the original parent table.

Compare behavior in both clients

  1. Open the same read-only object in QGIS and ArcGIS Pro.
  2. Compare total count, map extent, attribute values and coordinate placement.
  3. Select a known identifier and verify that exactly one intended feature is selected.
  4. Apply the same business filter and reconcile the returned keys.
  5. Update a permitted value through the designated writer, then refresh both readers and inspect visibility.
  6. Revoke a test reader and verify reconnection fails as expected.

Capture the actual client behavior. A successful psql connection proves network and database access, but not the map client's interpretation of keys, geometry or supported operations.

Common symptoms and their causes

SymptomInvestigation
Missing features in one clientMixed spatial properties, filter, null geometry or identifier problem
Several records selected as oneNonunique identifier in the query result
Read works but edit is unavailableUnsupported direct editing path, privilege or read-only query layer
Values appear staleRefresh, transaction state or service cache
Layer takes too long to openExtent/type discovery, expensive view or missing query indexes

Do not solve missing features by inventing a unique identifier from an unstable row order. Use a key that remains tied to the same object across refreshes. Do not bypass an Esri-managed editing path with direct SQL to make a demonstration work.

The final result should state precisely which combinations passed: client version, database version, object type, read path, write path and tested operations. That limited compatibility statement is more useful than a universal promise. Continue with PostGIS concurrency design before broadening write access.

Sources and documentation

Next step

Continue in the Open GIS collection. For a specific project, use the total-cost calculator and request an assessment.

Related articles