Skip to content

Object Coverage

llms.txt lists every page for an agent

Each row is a CREATE command a pinned server has, or one form of a command where chant treats the forms apart (CREATE TYPE ... AS ENUM is declared, CREATE TYPE ... AS RANGE is not). The commands come from the servers’ own sources at each pinned version (scripts/sql-create-commands.ts), and a test fails when a pinned server has a command with no row here, so a new server release cannot add a kind nobody looked at.

  • declared: a tag declares it, and import writes it as that declaration.
  • refused: no declaration holds it yet. chant import --from <env> fails when the server has one, naming every such object (kind, schema, name) at once, and chant import schema.sql fails on the statement. Nothing is left out without a word.
  • out of scope: the environment’s, not a schema’s: import never reads it.

--skip-undeclarable (--parser-option skipUndeclarable for a file) imports everything else and lists the refused objects as warnings, for an adopter who keeps those objects by hand for now:

Terminal window
chant import --from prod --skip-undeclarable
chant import schema.sql --parser-option skipUndeclarable

What a managed provider, an extension or the server’s configuration files define is never refused: an extension’s aggregates and casts are the extension’s, declared with it, and a quota from users.xml is the server’s. An import with --type, --name or --owned asks only for objects chant can hold, and does not look for the rest.

Pinned majors: 14.24, 15.19, 16.15, 17.11, 18.6. 23 declared, 21 refused, 2 out of scope.

CommandKindStatusDeclared by, or why not
CREATE ACCESS METHODaccess methodrefusedno tag declares an access method; an extension usually installs one, and the extension is declared instead
CREATE AGGREGATEaggregatedeclaredPostgres::Aggregate
CREATE CASTcastdeclaredPostgres::Cast: the database’s, named by its two types; read where a type or its function is in scope
CREATE COLLATIONcollationdeclaredPostgres::Collation
CREATE CONVERSIONconversionrefusedno tag declares an encoding conversion
CREATE DATABASEdatabaseout of scopea project’s schema lives in one database, which the environment provides (sql.profiles.<env>)
CREATE DOMAINdomaindeclaredPostgres::Domain
CREATE EVENT TRIGGERevent triggerdeclaredPostgres::EventTrigger: the database’s, not a schema’s; creating one takes a superuser
CREATE EXTENSIONextensiondeclaredPostgres::Extension
CREATE FOREIGN DATA WRAPPERforeign data wrapperrefusedno tag declares a foreign data wrapper yet; one an extension installs comes with the extension
CREATE FOREIGN TABLEforeign tablerefusedno tag declares a foreign table yet
CREATE FUNCTIONfunctiondeclaredPostgres::Function
CREATE FUNCTION (RETURN or BEGIN ATOMIC body)routine with a SQL-standard bodyrefusedthe server stores a SQL-standard body parsed and prints it back rewritten, so a declaration cannot be compared with it; declare the routine with a string body (AS $$ … $$)
CREATE GROUPgroupdeclaredPostgres::Role: an alias of CREATE ROLE
CREATE INDEXindexdeclaredPostgres::Index
CREATE LANGUAGEprocedural languagerefusedno tag declares a procedural language; an extension installs one, and the extension is declared instead
CREATE MATERIALIZED VIEWmaterialized viewdeclaredPostgres::MaterializedView
CREATE OPERATORoperatorrefusedno tag declares an operator yet
CREATE OPERATOR CLASSoperator classrefusedno tag declares an operator class yet
CREATE OPERATOR FAMILYoperator familyrefusedno tag declares an operator family yet
CREATE POLICYpolicydeclaredPostgres::Policy: read where the profile manages access (sql.profiles.<env>.access)
CREATE PROCEDUREproceduredeclaredPostgres::Procedure
CREATE PUBLICATIONpublicationrefusedno tag declares a publication yet
CREATE ROLEroledeclaredPostgres::Role: import reads only the roles a build declares, since a role is the cluster’s
CREATE RULErulerefusedno tag declares a rewrite rule; a view’s own rule is the view’s
CREATE SCHEMAschemadeclaredPostgres::Schema
CREATE SEQUENCEsequencedeclaredPostgres::Sequence
CREATE SERVERforeign serverrefusedno tag declares a foreign server yet
CREATE STATISTICSextended statisticsrefusedno tag declares extended statistics yet
CREATE SUBSCRIPTIONsubscriptionrefusedno tag declares a subscription yet
CREATE TABLEtabledeclaredPostgres::Table
CREATE TABLE AStable from a querydeclaredPostgres::Table: the server keeps no query, so the table it made reads as a CREATE TABLE
CREATE TABLESPACEtablespaceout of scopea tablespace is the cluster’s, a directory on the server; a table’s TABLESPACE clause is kept
CREATE TEXT SEARCH CONFIGURATIONtext search configurationrefusedno tag declares a text search configuration yet
CREATE TEXT SEARCH DICTIONARYtext search dictionaryrefusedno tag declares a text search dictionary yet
CREATE TEXT SEARCH PARSERtext search parserrefusedno tag declares a text search parser; one is C code an extension installs
CREATE TEXT SEARCH TEMPLATEtext search templaterefusedno tag declares a text search template; one is C code an extension installs
CREATE TRANSFORMtransformrefusedno tag declares a transform; an extension installs one
CREATE TRIGGERtriggerdeclaredPostgres::Trigger
CREATE TYPE (AS ENUM)enum typedeclaredPostgres::Enum
CREATE TYPE (AS (…))composite typedeclaredPostgres::CompositeType
CREATE TYPE (AS RANGE)range typedeclaredPostgres::RangeType: its multirange type comes with it (MULTIRANGE_TYPE_NAME)
CREATE TYPE (INPUT, OUTPUT, or a shell type)base typerefusedno tag declares a base type; its input and output functions are C code an extension installs
CREATE USERuserdeclaredPostgres::Role: an alias of CREATE ROLE … LOGIN
CREATE USER MAPPINGuser mappingrefusedno tag declares a user mapping yet
CREATE VIEWviewdeclaredPostgres::View

Pinned release: 26.8.15.10. 12 declared, 7 refused, 1 out of scope.

CommandKindStatusDeclared by, or why not
CREATE DATABASEdatabasedeclaredClickHouse::Database
CREATE DICTIONARYdictionarydeclaredClickHouse::Dictionary
CREATE FUNCTIONSQL functiondeclaredClickHouse::Function
CREATE FUNCTION (LANGUAGE WASM, or with a driver)non-SQL functionrefusedonly a SQL function (CREATE FUNCTION f AS (x) -> …) is declared
CREATE HANDLERHTTP handlerrefusedan HTTP handler is server-level configuration, not a schema object
CREATE INDEXindexdeclaredClickHouse::Table: an index is part of its table: SHOW CREATE TABLE prints it, and the table’s declaration holds it
CREATE MASKING POLICYmasking policyrefusedmasking policies are available only in ClickHouse Cloud, not on the pinned server
CREATE NAMED COLLECTIONnamed collectionrefuseda named collection holds credentials (a password, a secret key), which are the environment’s and never in a build; the server hides its values, so a plan could not compare them either
CREATE QUOTAquotadeclaredClickHouse::Quota: import reads only the access objects a build declares
CREATE RESOURCEworkload resourcerefuseda resource is server-level scheduling (a disk’s reads or writes), configured with the server, not a schema object
CREATE ROLEroledeclaredClickHouse::Role: import reads only the access objects a build declares
CREATE ROW POLICYrow policydeclaredClickHouse::RowPolicy: import reads only the access objects a build declares
CREATE SETTINGS PROFILEsettings profiledeclaredClickHouse::SettingsProfile: import reads only the access objects a build declares
CREATE TABLEtabledeclaredClickHouse::Table
CREATE TABLE (TEMPORARY)temporary tableout of scopea temporary table lives in one session
CREATE USERuserdeclaredClickHouse::User: import reads only the access objects a build declares
CREATE VIEWviewdeclaredClickHouse::View
CREATE VIEW (MATERIALIZED)materialized viewdeclaredClickHouse::MaterializedView
CREATE WINDOW VIEWwindow viewrefuseda window view is experimental, and the pinned server refuses it under its default query analyzer
CREATE WORKLOADworkloadrefuseda workload is server-level scheduling, configured with the server, not a schema object

A kind becomes declarable in three steps: a tag that declares it, the catalog reader reading it (src/postgres/live/catalog.ts, src/clickhouse/live/catalog.ts), and its row flipped to declared with the entity type, its reason taken out. The row’s flip is what stops import refusing the kind. After moving a pin, run npx tsx scripts/sql-create-commands.ts and give each new command a row.

chant