Type references resolve against the database. A plan now verifies that every type the project references will exist once it applies.
The type vocabulary is part of the provider contract. An introspector can capture the types the engine and its extensions provide (NativeType) and record which extension provides an object (ProvidedBy).
Extensions now include their types. A plan that drops an extension now blocks when data still depends on its types.
Types are a category.TypeObject is the common base of everything a type reference can resolve to: EnumType, DomainType, CompositeType, and now NativeType.
Changed
IsImplicit and ProvidedBy live on every database element. An implicit object, like a container-only schema, or a native type, is never created, dropped, managed, or imported, whatever its kind.
Fixed
Schema-qualified engine types no longer block planning. A reference like pg_catalog.tsvector on an imported column previously demanded a declaration nobody could write.