Course · ← 0009 Georeferencing · 0011 Topology → · engine layer
Lesson 0010 · ~14 minutes
Geodatabase and spatial extension are not two words for the same thing. One is a data model with behaviour on top of a database; the other is a type system inside one. Knowing which you are buying decides who owns your rules.
The dividing question is where does a rule live. In a geodatabase, much of the behaviour is knowable only through the Esri stack. In PostGIS, a constraint is a constraint — QGIS, a Python script, a Java service and psql all hit the same wall.
ArcGIS Pro supports three types — file, mobile, and enterprise.1
| Type | Storage | Concurrency |
|---|---|---|
| File | A folder of files on disk | Designed for a single editor; no geodatabase versioning1 |
| Mobile | One SQLite file, .geodatabase | Field capture and disconnected use; SQL access needs no licence because SQLite needs none1 |
| Enterprise | Inside a real DBMS (PostgreSQL, SQL Server, Oracle…) | Multiuser, effectively unlimited size, supports version-based workflows1 |
Versioning is the enterprise geodatabase's headline feature and the reason people pay for it: it lets many editors work concurrently without locking datasets or overwriting each other's edits.1 Long transactions — a subdivision that takes three weeks and several approvals — are exactly the land-administration workflow it was designed for. Archiving is its temporal sibling, retaining the history of changes.
Enterprise geodatabase versioning is a system-time mechanism: who edited what, when, in which branch. It is not the bi-temporal, legally-meaningful lifespan LADM asks for. You still model begin_real_world yourself. Treating DBMS versioning as your legal history is a category error — it answers "when did the database change" and never "when did the right begin".
PostGIS puts geometry in a typed column and indexes it. The index is what makes spatial queries viable: PostGIS primarily uses GiST, implementing an R-tree, which groups nearby objects by their minimum bounding rectangle; SP-GiST offers quad-tree style spatial partitioning as an alternative.2
-- the SRID in the type is a constraint, not a comment (lesson 0008)
CREATE TABLE spatial_unit (
id bigserial PRIMARY KEY,
label text NOT NULL,
geom geometry(Polygon, 32637) NOT NULL,
capture_method text NOT NULL,
accuracy_class text NOT NULL
);
CREATE INDEX spatial_unit_geom_idx ON spatial_unit USING GIST (geom);
-- geometry → planar, fast, metres in a projected CRS ← cadastral work
-- geography → spheroidal, slower, correct over long distances
Two more choices worth knowing. geometry vs geography: use geometry in a projected national CRS for cadastral data — planar maths, full function coverage, and areas that mean something. geography earns its keep for continent-spanning distance work, not parcels. And portable single files: GeoPackage (an OGC standard, SQLite-based) is the neutral answer to Esri's file geodatabase and the sane default for handing data to someone else.
| If you need… | Answer |
|---|---|
| Parcel fabric, geodatabase topology, utility network | Enterprise geodatabase — these are Esri behaviours (lessons 0011, 0013, 0014) |
| Any client to enforce the same rules | PostGIS constraints and triggers |
| Legally meaningful history | Your own bi-temporal model — neither product gives it |
| Offline field capture | Mobile geodatabase, or GeoPackage plus your own sync |
| Handover to district staff in year four | Whatever they can actually operate — lesson 0006 |
A note on the hybrid, because it is common and it confuses people: an enterprise geodatabase can sit inside PostgreSQL/PostGIS. You then have Esri's model and behaviour layered over open storage — and PostGIS spatial operators are available as an enterprise-geodatabase-specific feature.1 Useful, but do not mistake it for portability: the tables are there, and the meaning is still in Esri's schema.
Esri, Types of geodatabases — the authoritative statement of what each type is and is not:
pro.arcgis.com — Types of geodatabases
For the other side, the PostGIS spatial index FAQ is short and unusually clear about when indexes help and why: postgis.net — How do I use spatial indexes?