setup
SET experimental_enable_unique_without_index_constraints = true;
CREATE TABLE parent (id INT PRIMARY KEY);
CREATE TABLE tbl (
  id INT PRIMARY KEY,
  name STRING NOT NULL,
  price DECIMAL(8,2),
  INDEX sec (name) STORING (price) WHERE (id > 0),
  CONSTRAINT myfk FOREIGN KEY (id) REFERENCES parent (id),
  CONSTRAINT mycheck1 CHECK (id > 0)
);
COMMENT ON TABLE tbl IS 'tbl is good table';
COMMENT ON INDEX tbl@tbl_pkey IS 'tbl_pkey is a primary key';
COMMENT ON COLUMN tbl.id IS 'id is a identifier';
COMMENT ON CONSTRAINT myfk ON tbl IS 'must have a parent';
ALTER TABLE tbl CONFIGURE ZONE USING gc.ttlseconds=10;
COMMENT ON CONSTRAINT tbl_pkey ON tbl IS 'primary key';
ALTER TABLE tbl ADD CONSTRAINT mycheck2 CHECK (id < 10) NOT VALID;
ALTER TABLE tbl ADD CONSTRAINT myuwi1 UNIQUE WITHOUT INDEX (price);
ALTER TABLE tbl ADD CONSTRAINT myuwi2 UNIQUE WITHOUT INDEX (price) NOT VALID;
ALTER TABLE tbl ADD CONSTRAINT myfk2 FOREIGN KEY (id) REFERENCES parent (id) NOT VALID;
CREATE FUNCTION f(a INT) RETURNS INT LANGUAGE SQL AS $$ SELECT a + 1 $$;
ALTER TABLE tbl ADD CONSTRAINT mycheck3 CHECK (f(id) > 1);
----

decompose
parent
----
BackReferencedIDs:
  - 105
ElementState:
- Column:
    columnId: 1
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: false
    isInaccessible: false
    isSystemColumn: false
    pgAttributeNum: 0
    tableId: 104
  Status: PUBLIC
- Column:
    columnId: 4.294967292e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 104
  Status: PUBLIC
- Column:
    columnId: 4.294967293e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 104
  Status: PUBLIC
- Column:
    columnId: 4.294967294e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 104
  Status: PUBLIC
- Column:
    columnId: 4.294967295e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 104
  Status: PUBLIC
- ColumnFamily:
    familyId: 0
    name: primary
    tableId: 104
  Status: PUBLIC
- ColumnName:
    columnId: 1
    name: id
    tableId: 104
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967292e+09
    name: crdb_internal_origin_timestamp
    tableId: 104
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967293e+09
    name: crdb_internal_origin_id
    tableId: 104
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967294e+09
    name: tableoid
    tableId: 104
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967295e+09
    name: crdb_internal_mvcc_timestamp
    tableId: 104
  Status: PUBLIC
- ColumnNotNull:
    columnId: 1
    indexIdForValidation: 0
    tableId: 104
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 1
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: false
    isVirtual: false
    tableId: 104
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: IntFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 20
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 64
    typeName: INT8
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967292e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 104
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: DecimalFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 1700
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: DECIMAL
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967293e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 104
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: IntFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 23
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 32
    typeName: INT4
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967294e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 104
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: OidFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 26
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: OID
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967295e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 104
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: DecimalFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 1700
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: DECIMAL
  Status: PUBLIC
- IndexColumn:
    columnId: 1
    direction: ASC
    implicit: false
    indexId: 1
    invertedKind: 0
    kind: KEY
    ordinalInKind: 0
    tableId: 104
  Status: PUBLIC
- IndexData:
    indexId: 1
    tableId: 104
  Status: PUBLIC
- IndexName:
    indexId: 1
    name: parent_pkey
    tableId: 104
  Status: PUBLIC
- Namespace:
    databaseId: 100
    descriptorId: 104
    name: parent
    schemaId: 101
  Status: PUBLIC
- Owner:
    descriptorId: 104
    owner: root
  Status: PUBLIC
- PrimaryIndex:
    constraintId: 1
    geoConfig: null
    indexId: 1
    invisibility: 0
    isConcurrently: false
    isCreatedExplicitly: false
    isInverted: false
    isNotVisible: false
    isUnique: true
    sharding: null
    sourceIndexId: 0
    tableId: 104
    temporaryIndexId: 0
  Status: PUBLIC
- SchemaChild:
    childObjectId: 104
    schemaId: 101
  Status: PUBLIC
- Table:
    isTemporary: false
    tableId: 104
  Status: PUBLIC
- TableData:
    databaseId: 100
    tableId: 104
  Status: PUBLIC
- UserPrivileges:
    descriptorId: 104
    privileges: "2"
    userName: admin
    withGrantOption: "2"
  Status: PUBLIC
- UserPrivileges:
    descriptorId: 104
    privileges: "2"
    userName: root
    withGrantOption: "2"
  Status: PUBLIC

decompose
tbl
----
BackReferencedIDs:
ElementState:
- CheckConstraint:
    columnIds:
    - 1
    constraintId: 3
    expr: id > 0:::INT8
    fromHashShardedColumn: false
    indexIdForValidation: 0
    referencedColumnIds:
    - 1
    tableId: 105
    usesFunctionIds: []
    usesSequenceIds: []
    usesTypeIds: []
  Status: PUBLIC
- CheckConstraint:
    columnIds:
    - 1
    constraintId: 8
    expr: '[FUNCTION 100106](id) > 1:::INT8'
    fromHashShardedColumn: false
    indexIdForValidation: 0
    referencedColumnIds:
    - 1
    tableId: 105
    usesFunctionIds:
    - 106
    usesSequenceIds: []
    usesTypeIds: []
  Status: PUBLIC
- CheckConstraintUnvalidated:
    columnIds:
    - 1
    constraintId: 4
    expr: id < 10:::INT8
    referencedColumnIds:
    - 1
    tableId: 105
    usesFunctionIds: []
    usesSequenceIds: []
    usesTypeIds: []
  Status: PUBLIC
- Column:
    columnId: 1
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: false
    isInaccessible: false
    isSystemColumn: false
    pgAttributeNum: 0
    tableId: 105
  Status: PUBLIC
- Column:
    columnId: 2
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: false
    isInaccessible: false
    isSystemColumn: false
    pgAttributeNum: 0
    tableId: 105
  Status: PUBLIC
- Column:
    columnId: 3
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: false
    isInaccessible: false
    isSystemColumn: false
    pgAttributeNum: 0
    tableId: 105
  Status: PUBLIC
- Column:
    columnId: 4.294967292e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 105
  Status: PUBLIC
- Column:
    columnId: 4.294967293e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 105
  Status: PUBLIC
- Column:
    columnId: 4.294967294e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 105
  Status: PUBLIC
- Column:
    columnId: 4.294967295e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 105
  Status: PUBLIC
- ColumnComment:
    columnId: 1
    comment: id is a identifier
    pgAttributeNum: 1
    tableId: 105
  Status: PUBLIC
- ColumnFamily:
    familyId: 0
    name: primary
    tableId: 105
  Status: PUBLIC
- ColumnName:
    columnId: 1
    name: id
    tableId: 105
  Status: PUBLIC
- ColumnName:
    columnId: 2
    name: name
    tableId: 105
  Status: PUBLIC
- ColumnName:
    columnId: 3
    name: price
    tableId: 105
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967292e+09
    name: crdb_internal_origin_timestamp
    tableId: 105
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967293e+09
    name: crdb_internal_origin_id
    tableId: 105
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967294e+09
    name: tableoid
    tableId: 105
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967295e+09
    name: crdb_internal_mvcc_timestamp
    tableId: 105
  Status: PUBLIC
- ColumnNotNull:
    columnId: 1
    indexIdForValidation: 0
    tableId: 105
  Status: PUBLIC
- ColumnNotNull:
    columnId: 2
    indexIdForValidation: 0
    tableId: 105
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 1
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: false
    isVirtual: false
    tableId: 105
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: IntFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 20
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 64
    typeName: INT8
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 2
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: false
    isVirtual: false
    tableId: 105
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: StringFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 25
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: STRING
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 3
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 105
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: DecimalFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 1700
      precision: 8
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 2
    typeName: DECIMAL(8,2)
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967292e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 105
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: DecimalFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 1700
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: DECIMAL
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967293e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 105
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: IntFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 23
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 32
    typeName: INT4
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967294e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 105
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: OidFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 26
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: OID
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967295e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 105
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: DecimalFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 1700
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: DECIMAL
  Status: PUBLIC
- ConstraintComment:
    comment: must have a parent
    constraintId: 2
    tableId: 105
  Status: PUBLIC
- ConstraintComment:
    comment: primary key
    constraintId: 1
    tableId: 105
  Status: PUBLIC
- ConstraintWithoutIndexName:
    constraintId: 2
    name: myfk
    tableId: 105
  Status: PUBLIC
- ConstraintWithoutIndexName:
    constraintId: 3
    name: mycheck1
    tableId: 105
  Status: PUBLIC
- ConstraintWithoutIndexName:
    constraintId: 4
    name: mycheck2
    tableId: 105
  Status: PUBLIC
- ConstraintWithoutIndexName:
    constraintId: 5
    name: myuwi1
    tableId: 105
  Status: PUBLIC
- ConstraintWithoutIndexName:
    constraintId: 6
    name: myuwi2
    tableId: 105
  Status: PUBLIC
- ConstraintWithoutIndexName:
    constraintId: 7
    name: myfk2
    tableId: 105
  Status: PUBLIC
- ConstraintWithoutIndexName:
    constraintId: 8
    name: mycheck3
    tableId: 105
  Status: PUBLIC
- ForeignKeyConstraint:
    columnIds:
    - 1
    compositeKeyMatchMethod: SIMPLE
    constraintId: 2
    indexIdForValidation: 0
    onDeleteAction: NO_ACTION
    onUpdateAction: NO_ACTION
    referencedColumnIds:
    - 1
    referencedTableId: 104
    tableId: 105
  Status: PUBLIC
- ForeignKeyConstraintUnvalidated:
    columnIds:
    - 1
    compositeKeyMatchMethod: SIMPLE
    constraintId: 7
    onDeleteAction: NO_ACTION
    onUpdateAction: NO_ACTION
    referencedColumnIds:
    - 1
    referencedTableId: 104
    tableId: 105
  Status: PUBLIC
- IndexColumn:
    columnId: 1
    direction: ASC
    implicit: false
    indexId: 1
    invertedKind: 0
    kind: KEY
    ordinalInKind: 0
    tableId: 105
  Status: PUBLIC
- IndexColumn:
    columnId: 1
    direction: ASC
    implicit: false
    indexId: 2
    invertedKind: 0
    kind: KEY_SUFFIX
    ordinalInKind: 0
    tableId: 105
  Status: PUBLIC
- IndexColumn:
    columnId: 2
    direction: ASC
    implicit: false
    indexId: 1
    invertedKind: 0
    kind: STORED
    ordinalInKind: 0
    tableId: 105
  Status: PUBLIC
- IndexColumn:
    columnId: 2
    direction: ASC
    implicit: false
    indexId: 2
    invertedKind: 0
    kind: KEY
    ordinalInKind: 0
    tableId: 105
  Status: PUBLIC
- IndexColumn:
    columnId: 3
    direction: ASC
    implicit: false
    indexId: 1
    invertedKind: 0
    kind: STORED
    ordinalInKind: 1
    tableId: 105
  Status: PUBLIC
- IndexColumn:
    columnId: 3
    direction: ASC
    implicit: false
    indexId: 2
    invertedKind: 0
    kind: STORED
    ordinalInKind: 0
    tableId: 105
  Status: PUBLIC
- IndexComment:
    comment: tbl_pkey is a primary key
    indexId: 1
    tableId: 105
  Status: PUBLIC
- IndexData:
    indexId: 1
    tableId: 105
  Status: PUBLIC
- IndexData:
    indexId: 2
    tableId: 105
  Status: PUBLIC
- IndexName:
    indexId: 1
    name: tbl_pkey
    tableId: 105
  Status: PUBLIC
- IndexName:
    indexId: 2
    name: sec
    tableId: 105
  Status: PUBLIC
- Namespace:
    databaseId: 100
    descriptorId: 105
    name: tbl
    schemaId: 101
  Status: PUBLIC
- Owner:
    descriptorId: 105
    owner: root
  Status: PUBLIC
- PrimaryIndex:
    constraintId: 1
    geoConfig: null
    indexId: 1
    invisibility: 0
    isConcurrently: false
    isCreatedExplicitly: false
    isInverted: false
    isNotVisible: false
    isUnique: true
    sharding: null
    sourceIndexId: 0
    tableId: 105
    temporaryIndexId: 0
  Status: PUBLIC
- SchemaChild:
    childObjectId: 105
    schemaId: 101
  Status: PUBLIC
- SecondaryIndex:
    constraintId: 0
    expr: id > 0:::INT8
    geoConfig: null
    indexId: 2
    invisibility: 0
    isConcurrently: false
    isCreatedExplicitly: false
    isInverted: false
    isNotVisible: false
    isUnique: false
    recreateSourceId: 0
    referencedColumnIds:
    - 1
    sharding: null
    sourceIndexId: 0
    tableId: 105
    temporaryIndexId: 0
    usesFunctionIds: []
    usesSequenceIds: []
    usesTypeIds: []
  Status: PUBLIC
- Table:
    isTemporary: false
    tableId: 105
  Status: PUBLIC
- TableComment:
    comment: tbl is good table
    tableId: 105
  Status: PUBLIC
- TableData:
    databaseId: 100
    tableId: 105
  Status: PUBLIC
- TableZoneConfig:
    seqNum: 0
    tableId: 105
    zoneConfig:
      constraints: []
      gc:
        ttlSeconds: 10
      globalReads: null
      inheritedConstraints: true
      inheritedLeasePreferences: true
      leasePreferences: []
      nullVoterConstraintsIsEmpty: false
      numReplicas: null
      numVoters: null
      rangeMaxBytes: null
      rangeMinBytes: null
      subzoneSpans: []
      subzones: []
      voterConstraints: []
  Status: PUBLIC
- UniqueWithoutIndexConstraint:
    columnIds:
    - 3
    constraintId: 5
    indexIdForValidation: 0
    predicate: null
    tableId: 105
  Status: PUBLIC
- UniqueWithoutIndexConstraintUnvalidated:
    columnIds:
    - 3
    constraintId: 6
    predicate: null
    tableId: 105
  Status: PUBLIC
- UserPrivileges:
    descriptorId: 105
    privileges: "2"
    userName: admin
    withGrantOption: "2"
  Status: PUBLIC
- UserPrivileges:
    descriptorId: 105
    privileges: "2"
    userName: root
    withGrantOption: "2"
  Status: PUBLIC

setup
ALTER TABLE parent ADD COLUMN j INT CREATE FAMILY f2;
----

decompose
parent
----
BackReferencedIDs:
  - 105
ElementState:
- Column:
    columnId: 1
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: false
    isInaccessible: false
    isSystemColumn: false
    pgAttributeNum: 0
    tableId: 104
  Status: PUBLIC
- Column:
    columnId: 2
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: false
    isInaccessible: false
    isSystemColumn: false
    pgAttributeNum: 0
    tableId: 104
  Status: PUBLIC
- Column:
    columnId: 4.294967292e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 104
  Status: PUBLIC
- Column:
    columnId: 4.294967293e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 104
  Status: PUBLIC
- Column:
    columnId: 4.294967294e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 104
  Status: PUBLIC
- Column:
    columnId: 4.294967295e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 104
  Status: PUBLIC
- ColumnFamily:
    familyId: 0
    name: primary
    tableId: 104
  Status: PUBLIC
- ColumnFamily:
    familyId: 1
    name: f2
    tableId: 104
  Status: PUBLIC
- ColumnName:
    columnId: 1
    name: id
    tableId: 104
  Status: PUBLIC
- ColumnName:
    columnId: 2
    name: j
    tableId: 104
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967292e+09
    name: crdb_internal_origin_timestamp
    tableId: 104
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967293e+09
    name: crdb_internal_origin_id
    tableId: 104
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967294e+09
    name: tableoid
    tableId: 104
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967295e+09
    name: crdb_internal_mvcc_timestamp
    tableId: 104
  Status: PUBLIC
- ColumnNotNull:
    columnId: 1
    indexIdForValidation: 0
    tableId: 104
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 1
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: false
    isVirtual: false
    tableId: 104
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: IntFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 20
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 64
    typeName: INT8
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 2
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 1
    isNullable: true
    isVirtual: false
    tableId: 104
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: IntFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 20
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 64
    typeName: INT8
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967292e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 104
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: DecimalFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 1700
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: DECIMAL
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967293e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 104
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: IntFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 23
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 32
    typeName: INT4
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967294e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 104
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: OidFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 26
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: OID
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967295e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 104
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: DecimalFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 1700
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: DECIMAL
  Status: PUBLIC
- IndexColumn:
    columnId: 1
    direction: ASC
    implicit: false
    indexId: 1
    invertedKind: 0
    kind: KEY
    ordinalInKind: 0
    tableId: 104
  Status: PUBLIC
- IndexColumn:
    columnId: 2
    direction: ASC
    implicit: false
    indexId: 1
    invertedKind: 0
    kind: STORED
    ordinalInKind: 0
    tableId: 104
  Status: PUBLIC
- IndexData:
    indexId: 1
    tableId: 104
  Status: PUBLIC
- IndexName:
    indexId: 1
    name: parent_pkey
    tableId: 104
  Status: PUBLIC
- Namespace:
    databaseId: 100
    descriptorId: 104
    name: parent
    schemaId: 101
  Status: PUBLIC
- Owner:
    descriptorId: 104
    owner: root
  Status: PUBLIC
- PrimaryIndex:
    constraintId: 1
    geoConfig: null
    indexId: 1
    invisibility: 0
    isConcurrently: false
    isCreatedExplicitly: false
    isInverted: false
    isNotVisible: false
    isUnique: true
    sharding: null
    sourceIndexId: 0
    tableId: 104
    temporaryIndexId: 0
  Status: PUBLIC
- SchemaChild:
    childObjectId: 104
    schemaId: 101
  Status: PUBLIC
- Table:
    isTemporary: false
    tableId: 104
  Status: PUBLIC
- TableData:
    databaseId: 100
    tableId: 104
  Status: PUBLIC
- UserPrivileges:
    descriptorId: 104
    privileges: "2"
    userName: admin
    withGrantOption: "2"
  Status: PUBLIC
- UserPrivileges:
    descriptorId: 104
    privileges: "2"
    userName: root
    withGrantOption: "2"
  Status: PUBLIC

setup
CREATE TYPE greeting AS ENUM ('hello');
CREATE TABLE greeter (v STRING AS ('hello'::greeting::STRING) STORED);
----

decompose
greeter
----
BackReferencedIDs:
ElementState:
- Column:
    columnId: 1
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: false
    isInaccessible: false
    isSystemColumn: false
    pgAttributeNum: 0
    tableId: 109
  Status: PUBLIC
- Column:
    columnId: 2
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: false
    pgAttributeNum: 0
    tableId: 109
  Status: PUBLIC
- Column:
    columnId: 4.294967292e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 109
  Status: PUBLIC
- Column:
    columnId: 4.294967293e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 109
  Status: PUBLIC
- Column:
    columnId: 4.294967294e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 109
  Status: PUBLIC
- Column:
    columnId: 4.294967295e+09
    generatedAsIdentitySequenceOption: ""
    generatedAsIdentityType: 0
    isHidden: true
    isInaccessible: false
    isSystemColumn: true
    pgAttributeNum: 0
    tableId: 109
  Status: PUBLIC
- ColumnComputeExpression:
    columnId: 1
    expr: x'80':::@100107::STRING
    referencedColumnIds: []
    tableId: 109
    usage: REGULAR
    usesFunctionIds: []
    usesSequenceIds: []
    usesTypeIds:
    - 107
    - 108
  Status: PUBLIC
- ColumnDefaultExpression:
    columnId: 2
    expr: unique_rowid()
    referencedColumnIds: []
    tableId: 109
    usesFunctionIds: []
    usesSequenceIds: []
    usesTypeIds: []
  Status: PUBLIC
- ColumnFamily:
    familyId: 0
    name: primary
    tableId: 109
  Status: PUBLIC
- ColumnName:
    columnId: 1
    name: v
    tableId: 109
  Status: PUBLIC
- ColumnName:
    columnId: 2
    name: rowid
    tableId: 109
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967292e+09
    name: crdb_internal_origin_timestamp
    tableId: 109
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967293e+09
    name: crdb_internal_origin_id
    tableId: 109
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967294e+09
    name: tableoid
    tableId: 109
  Status: PUBLIC
- ColumnName:
    columnId: 4.294967295e+09
    name: crdb_internal_mvcc_timestamp
    tableId: 109
  Status: PUBLIC
- ColumnNotNull:
    columnId: 2
    indexIdForValidation: 0
    tableId: 109
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 1
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 109
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: StringFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 25
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: STRING
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 2
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: false
    isVirtual: false
    tableId: 109
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: IntFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 20
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 64
    typeName: INT8
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967292e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 109
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: DecimalFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 1700
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: DECIMAL
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967293e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 109
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: IntFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 23
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 32
    typeName: INT4
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967294e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 109
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: OidFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 26
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: OID
  Status: PUBLIC
- ColumnType:
    closedTypeIds: []
    columnFamilyOrderFollowsColumnId: 0
    columnId: 4.294967295e+09
    computeExpr: null
    elementCreationMetadata:
      in231OrLater: true
      in243OrLater: true
    familyId: 0
    isNullable: true
    isVirtual: false
    tableId: 109
    type:
      arrayContents: null
      arrayDimensions: []
      arrayElemType: null
      family: DecimalFamily
      geoMetadata: null
      intervalDurationField: null
      locale: null
      oid: 1700
      precision: 0
      timePrecisionIsSet: false
      tupleContents: []
      tupleLabels: []
      udtMetadata: null
      visibleType: 0
      width: 0
    typeName: DECIMAL
  Status: PUBLIC
- IndexColumn:
    columnId: 1
    direction: ASC
    implicit: false
    indexId: 1
    invertedKind: 0
    kind: STORED
    ordinalInKind: 0
    tableId: 109
  Status: PUBLIC
- IndexColumn:
    columnId: 2
    direction: ASC
    implicit: false
    indexId: 1
    invertedKind: 0
    kind: KEY
    ordinalInKind: 0
    tableId: 109
  Status: PUBLIC
- IndexData:
    indexId: 1
    tableId: 109
  Status: PUBLIC
- IndexName:
    indexId: 1
    name: greeter_pkey
    tableId: 109
  Status: PUBLIC
- Namespace:
    databaseId: 100
    descriptorId: 109
    name: greeter
    schemaId: 101
  Status: PUBLIC
- Owner:
    descriptorId: 109
    owner: root
  Status: PUBLIC
- PrimaryIndex:
    constraintId: 1
    geoConfig: null
    indexId: 1
    invisibility: 0
    isConcurrently: false
    isCreatedExplicitly: false
    isInverted: false
    isNotVisible: false
    isUnique: true
    sharding: null
    sourceIndexId: 0
    tableId: 109
    temporaryIndexId: 0
  Status: PUBLIC
- SchemaChild:
    childObjectId: 109
    schemaId: 101
  Status: PUBLIC
- Table:
    isTemporary: false
    tableId: 109
  Status: PUBLIC
- TableData:
    databaseId: 100
    tableId: 109
  Status: PUBLIC
- UserPrivileges:
    descriptorId: 109
    privileges: "2"
    userName: admin
    withGrantOption: "2"
  Status: PUBLIC
- UserPrivileges:
    descriptorId: 109
    privileges: "2"
    userName: root
    withGrantOption: "2"
  Status: PUBLIC
