schema

package
v1.43.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 1, 2025 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Index

Constants

View Source
const (
	TableNamespace           = "namespace_config"
	TableTransaction         = "relation_tuple_transaction"
	TableTuple               = "relation_tuple"
	TableCaveat              = "caveat"
	TableRelationshipCounter = "relationship_counter"

	ColXID               = "xid"
	ColTimestamp         = "timestamp"
	ColMetadata          = "metadata"
	ColNamespace         = "namespace"
	ColConfig            = "serialized_config"
	ColCreatedXid        = "created_xid"
	ColDeletedXid        = "deleted_xid"
	ColSnapshot          = "snapshot"
	ColObjectID          = "object_id"
	ColRelation          = "relation"
	ColUsersetNamespace  = "userset_namespace"
	ColUsersetObjectID   = "userset_object_id"
	ColUsersetRelation   = "userset_relation"
	ColCaveatName        = "name"
	ColCaveatDefinition  = "definition"
	ColCaveatContextName = "caveat_name"
	ColCaveatContext     = "caveat_context"
	ColExpiration        = "expiration"

	ColCounterName         = "name"
	ColCounterFilter       = "serialized_filter"
	ColCounterCurrentCount = "current_count"
	ColCounterSnapshot     = "updated_revision_snapshot"
)

Variables

View Source
var IndexExpiringRelationships = common.IndexDefinition{
	Name:       `ix_relation_tuple_expired`,
	ColumnsSQL: `relation_tuple (expiration) WHERE expiration IS NOT NULL`,
}

IndexExpiringRelationships is an index for (possibly) expiring relationships. It is used for the GC process which checks for expired relationships.

View Source
var IndexGCDeadRelationships = common.IndexDefinition{
	Name:       `ix_gc_index`,
	ColumnsSQL: `relation_tuple (deleted_xid DESC) WHERE deleted_xid < '9223372036854775807'::xid8`,
}

IndexGCDeadRelationships is an index for the GC process to quickly find dead relationships to be garbage collected.

View Source
var IndexRelationTupleTransactionTimestamp = common.IndexDefinition{
	Name:       `ix_relation_tuple_transaction_by_timestamp`,
	ColumnsSQL: `relation_tuple_transaction(timestamp)`,
}

IndexRelationTupleTransactionTimestamp adds an index to relation_tuple_transaction table to support optimized revision lookup.

View Source
var IndexRelationshipAliveByResourceRelationSubjectCovering = common.IndexDefinition{
	Name: `ix_relation_tuple_alive_by_resource_rel_subject_covering`,
	ColumnsSQL: `relation_tuple (namespace, relation, userset_namespace)
    			 INCLUDE (userset_object_id, userset_relation, caveat_name, caveat_context)
    			 WHERE deleted_xid = '9223372036854775807'::xid8`,
}

IndexRelationshipAliveByResourceRelationSubjectCovering is an index for alive relationships by resource, relation, and subject. In includes the caveat information for the relationship.

View Source
var IndexRelationshipBySubject = common.IndexDefinition{
	Name:       `ix_relation_tuple_by_subject`,
	ColumnsSQL: `userset_object_id, userset_namespace, userset_relation, namespace, relation`,
	Shapes: []queryshape.Shape{
		queryshape.CheckPermissionSelectDirectSubjects,
		queryshape.CheckPermissionSelectIndirectSubjects,
	},
}

IndexRelationshipBySubject is an index for relationships by subject. It is used for the reverse lookup of relationships.

View Source
var IndexRelationshipBySubjectRelation = common.IndexDefinition{
	Name:       `ix_relation_tuple_by_subject_relation`,
	ColumnsSQL: `userset_namespace, userset_relation, namespace, relation`,
	Shapes: []queryshape.Shape{

		queryshape.CheckPermissionSelectDirectSubjects,
		queryshape.CheckPermissionSelectIndirectSubjects,
	},
}

IndexRelationshipBySubjectRelation is an index for relationships by subject and relation.

View Source
var IndexSortedRelationTupleTransaction = common.IndexDefinition{
	Name:       `ix_relation_tuple_transaction_xid_desc_timestamp`,
	ColumnsSQL: `relation_tuple_transaction (xid DESC, timestamp)`,
}

IndexSortedRelationTupleTransaction adds an index to relation_tuple_transaction table to support garbage collection. This is in support of the query for selecting the most recent transaction: `SELECT xid, snapshot FROM relation_tuple_transaction WHERE timestamp < $1 ORDER BY xid DESC LIMIT 1`

EXPLAIN before the index: Limit (cost=0.56..1.78 rows=1 width=558) (actual time=5706.155..5706.156 rows=1 loops=1) -> Index Scan Backward using pk_rttx on relation_tuple_transaction (cost=0.56..30428800.04 rows=25023202 width=558) (actual time=5706.154..5706.155 rows=1 loops=1)

Filter: ("timestamp" < (now() - '04:00:00'::interval))
Rows Removed by Filter: 6638121

Planning Time: 0.098 ms Execution Time: 5706.192 ms

View Source
var IndexWatchAPI = common.IndexDefinition{
	Name:       `ix_watch_api_index`,
	ColumnsSQL: `relation_tuple (created_xid)`,
}

IndexWatchAPI is an index for the Watch API. It is used for the Watch API, and provides filtering of alive relationships.

View Source
var NoIndexingHint common.IndexingHint = nil
View Source
var UniqueLivingRelationshipIndex = common.IndexDefinition{
	Name: `uq_relation_tuple_living_xid`,
	ColumnsSQL: `relation_tuple (namespace, object_id, relation, userset_namespace, userset_object_id,
				                 userset_relation, deleted_xid)`,
	Shapes: []queryshape.Shape{
		queryshape.CheckPermissionSelectDirectSubjects,
		queryshape.CheckPermissionSelectIndirectSubjects,
	},
}

UniqueLivingRelationshipIndex is an index for unique living relationships.

Functions

func CreateIndexConcurrently

func CreateIndexConcurrently(ctx context.Context, conn *pgx.Conn, index common.IndexDefinition) error

CreateIndexConcurrently creates an index concurrently, dropping the existing index if it exists to ensure that indexes are not left in a partially constructed state. See: https://www.shayon.dev/post/2024/225/stop-relying-on-if-not-exists-for-concurrent-index-creation-in-postgresql/

func IndexingHintForQueryShape added in v1.43.0

func IndexingHintForQueryShape(schema common.SchemaInformation, qs queryshape.Shape) common.IndexingHint

IndexingHintForQueryShape returns an indexing hint for the given query shape, if any.

func Schema

func Schema(colOptimizationOpt common.ColumnOptimizationOption, expirationDisabled bool) *common.SchemaInformation

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL