Erik Nordström a51d21efbe Fix issue creating dimensional constraints
During chunk creation, the chunk's dimensional CHECK constraints are
created via an "upcall" to PL/pgSQL code. However, creating
dimensional constraints in PL/pgSQL code sometimes fails, especially
during high-concurrency inserts, because PL/pgSQL code scans metadata
using a snapshot that might not see the same metadata as the C
code. As a result, chunk creation sometimes fail during constraint
creation.

To fix this issue, implement dimensional CHECK-constraint creation in
C code. Other constraints (FK, PK, etc.) are still created via an
upcall, but should probably also be rewritten in C. However, since
these constraints don't depend on recently updated metadata, this is
left to a future change.

Fixes #5456
2023-03-24 10:55:08 +01:00

257 lines
15 KiB
Plaintext

-- This file and its contents are licensed under the Timescale License.
-- Please see the included NOTICE for copyright information and
-- LICENSE-TIMESCALE for a copy of the license.
\pset tuples_only on
-- list all extension functions
-- any change in the output of this query requires adjustments
-- in the update and downgrade scripts
-- get_telemetry_report is excluded as it will not be present
-- when built with telemetry disabled
SELECT p.oid::regprocedure::text
FROM pg_proc p
JOIN pg_depend d ON
d.objid = p.oid AND
d.deptype = 'e' AND
d.refclassid = 'pg_extension'::regclass AND
d.classid = 'pg_proc'::regclass
JOIN pg_extension e ON
e.extname = 'timescaledb' AND
e.oid = d.refobjid
WHERE proname <> 'get_telemetry_report'
ORDER BY pronamespace::regnamespace::text COLLATE "C", p.oid::regprocedure::text COLLATE "C";
_timescaledb_internal.alter_job_set_hypertable_id(integer,regclass)
_timescaledb_internal.attach_osm_table_chunk(regclass,regclass)
_timescaledb_internal.bookend_deserializefunc(bytea,internal)
_timescaledb_internal.bookend_finalfunc(internal,anyelement,"any")
_timescaledb_internal.bookend_serializefunc(internal)
_timescaledb_internal.cagg_migrate_create_plan(_timescaledb_catalog.continuous_agg,text,boolean,boolean)
_timescaledb_internal.cagg_migrate_execute_copy_data(_timescaledb_catalog.continuous_agg,_timescaledb_catalog.continuous_agg_migrate_plan_step)
_timescaledb_internal.cagg_migrate_execute_copy_policies(_timescaledb_catalog.continuous_agg,_timescaledb_catalog.continuous_agg_migrate_plan_step)
_timescaledb_internal.cagg_migrate_execute_create_new_cagg(_timescaledb_catalog.continuous_agg,_timescaledb_catalog.continuous_agg_migrate_plan_step)
_timescaledb_internal.cagg_migrate_execute_disable_policies(_timescaledb_catalog.continuous_agg,_timescaledb_catalog.continuous_agg_migrate_plan_step)
_timescaledb_internal.cagg_migrate_execute_drop_old_cagg(_timescaledb_catalog.continuous_agg,_timescaledb_catalog.continuous_agg_migrate_plan_step)
_timescaledb_internal.cagg_migrate_execute_enable_policies(_timescaledb_catalog.continuous_agg,_timescaledb_catalog.continuous_agg_migrate_plan_step)
_timescaledb_internal.cagg_migrate_execute_override_cagg(_timescaledb_catalog.continuous_agg,_timescaledb_catalog.continuous_agg_migrate_plan_step)
_timescaledb_internal.cagg_migrate_execute_plan(_timescaledb_catalog.continuous_agg)
_timescaledb_internal.cagg_migrate_execute_refresh_new_cagg(_timescaledb_catalog.continuous_agg,_timescaledb_catalog.continuous_agg_migrate_plan_step)
_timescaledb_internal.cagg_migrate_plan_exists(integer)
_timescaledb_internal.cagg_migrate_pre_validation(text,text,text)
_timescaledb_internal.cagg_watermark(integer)
_timescaledb_internal.cagg_watermark_materialized(integer)
_timescaledb_internal.calculate_chunk_interval(integer,bigint,bigint)
_timescaledb_internal.chunk_constraint_add_table_constraint(_timescaledb_catalog.chunk_constraint)
_timescaledb_internal.chunk_drop_replica(regclass,name)
_timescaledb_internal.chunk_id_from_relid(oid)
_timescaledb_internal.chunk_index_clone(oid)
_timescaledb_internal.chunk_index_replace(oid,oid)
_timescaledb_internal.chunk_status(regclass)
_timescaledb_internal.chunks_in(record,integer[])
_timescaledb_internal.chunks_local_size(name,name)
_timescaledb_internal.chunks_remote_size(name,name)
_timescaledb_internal.compressed_chunk_local_stats(name,name)
_timescaledb_internal.compressed_chunk_remote_stats(name,name)
_timescaledb_internal.compressed_data_in(cstring)
_timescaledb_internal.compressed_data_out(_timescaledb_internal.compressed_data)
_timescaledb_internal.compressed_data_recv(internal)
_timescaledb_internal.compressed_data_send(_timescaledb_internal.compressed_data)
_timescaledb_internal.continuous_agg_invalidation_trigger()
_timescaledb_internal.create_chunk(regclass,jsonb,name,name,regclass)
_timescaledb_internal.create_chunk_replica_table(regclass,name)
_timescaledb_internal.create_chunk_table(regclass,jsonb,name,name)
_timescaledb_internal.create_compressed_chunk(regclass,regclass,bigint,bigint,bigint,bigint,bigint,bigint,bigint,bigint)
_timescaledb_internal.data_node_chunk_info(name,name,name)
_timescaledb_internal.data_node_compressed_chunk_stats(name,name,name)
_timescaledb_internal.data_node_hypertable_info(name,name,name)
_timescaledb_internal.data_node_index_size(name,name,name)
_timescaledb_internal.drop_chunk(regclass)
_timescaledb_internal.drop_dist_ht_invalidation_trigger(integer)
_timescaledb_internal.drop_stale_chunks(name,integer[])
_timescaledb_internal.finalize_agg(text,name,name,name[],bytea,anyelement)
_timescaledb_internal.finalize_agg_ffunc(internal,text,name,name,name[],bytea,anyelement)
_timescaledb_internal.finalize_agg_sfunc(internal,text,name,name,name[],bytea,anyelement)
_timescaledb_internal.first_combinefunc(internal,internal)
_timescaledb_internal.first_sfunc(internal,anyelement,"any")
_timescaledb_internal.freeze_chunk(regclass)
_timescaledb_internal.generate_uuid()
_timescaledb_internal.get_approx_row_count(regclass)
_timescaledb_internal.get_chunk_colstats(regclass)
_timescaledb_internal.get_chunk_relstats(regclass)
_timescaledb_internal.get_compressed_chunk_index_for_recompression(regclass)
_timescaledb_internal.get_create_command(name)
_timescaledb_internal.get_git_commit()
_timescaledb_internal.get_os_info()
_timescaledb_internal.get_partition_for_key(anyelement)
_timescaledb_internal.get_partition_hash(anyelement)
_timescaledb_internal.get_time_type(integer)
_timescaledb_internal.health()
_timescaledb_internal.hist_combinefunc(internal,internal)
_timescaledb_internal.hist_deserializefunc(bytea,internal)
_timescaledb_internal.hist_finalfunc(internal,double precision,double precision,double precision,integer)
_timescaledb_internal.hist_serializefunc(internal)
_timescaledb_internal.hist_sfunc(internal,double precision,double precision,double precision,integer)
_timescaledb_internal.hypertable_constraint_add_table_fk_constraint(name,name,name,integer)
_timescaledb_internal.hypertable_from_main_table(regclass)
_timescaledb_internal.hypertable_invalidation_log_delete(integer)
_timescaledb_internal.hypertable_local_size(name,name)
_timescaledb_internal.hypertable_remote_size(name,name)
_timescaledb_internal.indexes_local_size(name,name)
_timescaledb_internal.indexes_remote_size(name,name,name)
_timescaledb_internal.insert_blocker()
_timescaledb_internal.interval_to_usec(interval)
_timescaledb_internal.invalidation_cagg_log_add_entry(integer,bigint,bigint)
_timescaledb_internal.invalidation_hyper_log_add_entry(integer,bigint,bigint)
_timescaledb_internal.invalidation_process_cagg_log(integer,integer,regtype,bigint,bigint,integer[],bigint[],bigint[])
_timescaledb_internal.invalidation_process_cagg_log(integer,integer,regtype,bigint,bigint,integer[],bigint[],bigint[],text[])
_timescaledb_internal.invalidation_process_hypertable_log(integer,integer,regtype,integer[],bigint[],bigint[])
_timescaledb_internal.invalidation_process_hypertable_log(integer,integer,regtype,integer[],bigint[],bigint[],text[])
_timescaledb_internal.is_main_table(name,name)
_timescaledb_internal.is_main_table(regclass)
_timescaledb_internal.last_combinefunc(internal,internal)
_timescaledb_internal.last_sfunc(internal,anyelement,"any")
_timescaledb_internal.main_table_from_hypertable(integer)
_timescaledb_internal.materialization_invalidation_log_delete(integer)
_timescaledb_internal.partialize_agg(anyelement)
_timescaledb_internal.ping_data_node(name,interval)
_timescaledb_internal.policy_compression(integer,jsonb)
_timescaledb_internal.policy_compression_check(jsonb)
_timescaledb_internal.policy_compression_execute(integer,integer,anyelement,integer,boolean,boolean)
_timescaledb_internal.policy_job_error_retention(integer,jsonb)
_timescaledb_internal.policy_job_error_retention_check(jsonb)
_timescaledb_internal.policy_recompression(integer,jsonb)
_timescaledb_internal.policy_refresh_continuous_aggregate(integer,jsonb)
_timescaledb_internal.policy_refresh_continuous_aggregate_check(jsonb)
_timescaledb_internal.policy_reorder(integer,jsonb)
_timescaledb_internal.policy_reorder_check(jsonb)
_timescaledb_internal.policy_retention(integer,jsonb)
_timescaledb_internal.policy_retention_check(jsonb)
_timescaledb_internal.process_ddl_event()
_timescaledb_internal.range_value_to_pretty(bigint,regtype)
_timescaledb_internal.recompress_chunk_segmentwise(regclass,boolean)
_timescaledb_internal.relation_size(regclass)
_timescaledb_internal.remote_txn_heal_data_node(oid)
_timescaledb_internal.restart_background_workers()
_timescaledb_internal.rxid_in(cstring)
_timescaledb_internal.rxid_out(rxid)
_timescaledb_internal.set_chunk_default_data_node(regclass,name)
_timescaledb_internal.set_dist_id(uuid)
_timescaledb_internal.set_peer_dist_id(uuid)
_timescaledb_internal.show_chunk(regclass)
_timescaledb_internal.show_connection_cache()
_timescaledb_internal.start_background_workers()
_timescaledb_internal.stop_background_workers()
_timescaledb_internal.subtract_integer_from_now(regclass,bigint)
_timescaledb_internal.time_literal_sql(bigint,regtype)
_timescaledb_internal.time_to_internal(anyelement)
_timescaledb_internal.to_date(bigint)
_timescaledb_internal.to_interval(bigint)
_timescaledb_internal.to_timestamp(bigint)
_timescaledb_internal.to_timestamp_without_timezone(bigint)
_timescaledb_internal.to_unix_microseconds(timestamp with time zone)
_timescaledb_internal.tsl_loaded()
_timescaledb_internal.unfreeze_chunk(regclass)
_timescaledb_internal.validate_as_data_node()
_timescaledb_internal.wait_subscription_sync(name,name,integer,numeric)
add_compression_policy(regclass,"any",boolean,interval,timestamp with time zone,text)
add_continuous_aggregate_policy(regclass,"any","any",interval,boolean,timestamp with time zone,text)
add_data_node(name,text,name,integer,boolean,boolean,text)
add_dimension(regclass,name,integer,anyelement,regproc,boolean)
add_job(regproc,interval,jsonb,timestamp with time zone,boolean,regproc,boolean,text)
add_reorder_policy(regclass,name,boolean,timestamp with time zone,text)
add_retention_policy(regclass,"any",boolean,interval,timestamp with time zone,text)
alter_data_node(name,text,name,integer,boolean)
alter_job(integer,interval,interval,integer,interval,boolean,jsonb,timestamp with time zone,boolean,regproc)
approximate_row_count(regclass)
attach_data_node(name,regclass,boolean,boolean)
attach_tablespace(name,regclass,boolean)
cagg_migrate(regclass,boolean,boolean)
chunk_compression_stats(regclass)
chunks_detailed_size(regclass)
compress_chunk(regclass,boolean)
create_distributed_hypertable(regclass,name,name,integer,name,name,anyelement,boolean,boolean,regproc,boolean,text,regproc,regproc,integer,name[])
create_distributed_restore_point(text)
create_hypertable(regclass,name,name,integer,name,name,anyelement,boolean,boolean,regproc,boolean,text,regproc,regproc,integer,name[],boolean)
decompress_chunk(regclass,boolean)
delete_data_node(name,boolean,boolean,boolean,boolean)
delete_job(integer)
detach_data_node(name,regclass,boolean,boolean,boolean,boolean)
detach_tablespace(name,regclass,boolean)
detach_tablespaces(regclass)
distributed_exec(text,name[],boolean)
drop_chunks(regclass,"any","any",boolean)
first(anyelement,"any")
histogram(double precision,double precision,double precision,integer)
hypertable_compression_stats(regclass)
hypertable_detailed_size(regclass)
hypertable_index_size(regclass)
hypertable_size(regclass)
interpolate(bigint,record,record)
interpolate(double precision,record,record)
interpolate(integer,record,record)
interpolate(real,record,record)
interpolate(smallint,record,record)
last(anyelement,"any")
locf(anyelement,anyelement,boolean)
move_chunk(regclass,name,name,regclass,boolean)
recompress_chunk(regclass,boolean)
refresh_continuous_aggregate(regclass,"any","any")
remove_compression_policy(regclass,boolean)
remove_continuous_aggregate_policy(regclass,boolean,boolean)
remove_reorder_policy(regclass,boolean)
remove_retention_policy(regclass,boolean)
reorder_chunk(regclass,regclass,boolean)
run_job(integer)
set_adaptive_chunking(regclass,text,regproc)
set_chunk_time_interval(regclass,anyelement,name)
set_integer_now_func(regclass,regproc,boolean)
set_number_partitions(regclass,integer,name)
set_replication_factor(regclass,integer)
show_chunks(regclass,"any","any")
show_tablespaces(regclass)
time_bucket(bigint,bigint)
time_bucket(bigint,bigint,bigint)
time_bucket(integer,integer)
time_bucket(integer,integer,integer)
time_bucket(interval,date)
time_bucket(interval,date,date)
time_bucket(interval,date,interval)
time_bucket(interval,timestamp with time zone)
time_bucket(interval,timestamp with time zone,interval)
time_bucket(interval,timestamp with time zone,text,timestamp with time zone,interval)
time_bucket(interval,timestamp with time zone,timestamp with time zone)
time_bucket(interval,timestamp without time zone)
time_bucket(interval,timestamp without time zone,interval)
time_bucket(interval,timestamp without time zone,timestamp without time zone)
time_bucket(smallint,smallint)
time_bucket(smallint,smallint,smallint)
time_bucket_gapfill(bigint,bigint,bigint,bigint)
time_bucket_gapfill(integer,integer,integer,integer)
time_bucket_gapfill(interval,date,date,date)
time_bucket_gapfill(interval,timestamp with time zone,text,timestamp with time zone,timestamp with time zone)
time_bucket_gapfill(interval,timestamp with time zone,timestamp with time zone,timestamp with time zone)
time_bucket_gapfill(interval,timestamp without time zone,timestamp without time zone,timestamp without time zone)
time_bucket_gapfill(smallint,smallint,smallint,smallint)
timescaledb_fdw_handler()
timescaledb_fdw_validator(text[],oid)
timescaledb_post_restore()
timescaledb_pre_restore()
timescaledb_experimental.add_policies(regclass,boolean,"any","any","any","any")
timescaledb_experimental.allow_new_chunks(name,regclass)
timescaledb_experimental.alter_policies(regclass,boolean,"any","any","any","any")
timescaledb_experimental.block_new_chunks(name,regclass,boolean)
timescaledb_experimental.cleanup_copy_chunk_operation(name)
timescaledb_experimental.copy_chunk(regclass,name,name,name)
timescaledb_experimental.move_chunk(regclass,name,name,name)
timescaledb_experimental.remove_all_policies(regclass,boolean)
timescaledb_experimental.remove_policies(regclass,boolean,text[])
timescaledb_experimental.show_policies(regclass)
timescaledb_experimental.subscription_exec(text)
timescaledb_experimental.time_bucket_ng(interval,date)
timescaledb_experimental.time_bucket_ng(interval,date,date)
timescaledb_experimental.time_bucket_ng(interval,timestamp with time zone)
timescaledb_experimental.time_bucket_ng(interval,timestamp with time zone,text)
timescaledb_experimental.time_bucket_ng(interval,timestamp with time zone,timestamp with time zone)
timescaledb_experimental.time_bucket_ng(interval,timestamp with time zone,timestamp with time zone,text)
timescaledb_experimental.time_bucket_ng(interval,timestamp without time zone)
timescaledb_experimental.time_bucket_ng(interval,timestamp without time zone,timestamp without time zone)