Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tranSMART-Foundation/transmart-data #16

Open
wants to merge 5 commits into
base: release-16.2
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions ddl/postgres/GLOBAL/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ general_db_dump.sql:

roles.sql: cluster_dump.sql
php ../_scripts/filter_type.php $< "Roles" | \
egrep 'ROLE (biomart_user|deapp|i2b2metadata|i2b2demodata|tm_cz|tm_lz|tm_wz|biomart|searchapp|amapp|fmapp|galaxy|gwas_plink|ts_batch)\b' \
egrep 'ROLE (biomart_user|deapp|i2b2metadata|i2b2demodata|tm_cz|tm_lz|tm_wz|biomart|searchapp|amapp|fmapp|galaxy|gwas_plink|ts_batch|tm_dataloader)\b' \
> $@

extensions.sql: general_db_dump.sql
Expand All @@ -37,14 +37,14 @@ tablespace_%:
test `$(PSQL_COMMAND) -c "select exists (select spcname from pg_tablespace where spcname = '$*')" -tA` \
= 't' || { \
$(MAKE) $(TABLESPACES)$*; \
$(PSQL_COMMAND) -c "CREATE TABLESPACE $* LOCATION '$(TABLESPACES)$*'"; }
$(PSQL_COMMAND_NO_TRANSACTION) -c "CREATE TABLESPACE $* LOCATION '$(TABLESPACES)$*'"; }

tablespaces: $(TB_TARGETS)

createdb:
test `$(PSQL_COMMAND) -d template1 -c "select exists (select datname from pg_database where datname = '$(PGDATABASE)')" -tA` \
= 'f' || (echo -e "\e[31mERROR\e[m: Database $(PGDATABASE) already exists or connection error"; false)
$(PSQL_COMMAND) -d template1 -c "CREATE DATABASE $(PGDATABASE) TEMPLATE template0 \
$(PSQL_COMMAND_NO_TRANSACTION) -d template1 -c "CREATE DATABASE $(PGDATABASE) TEMPLATE template0 \
ENCODING='UTF-8' LC_COLLATE='en_US.UTF-8'"

# Don't depend on the SQL file, otherwise make'll try to create it
Expand All @@ -61,10 +61,10 @@ drop_roles:
$(PSQL_COMMAND) -d template1 -f drop_roles.sql

drop_database:
$(PSQL_COMMAND) -d template1 -c "DROP DATABASE IF EXISTS $(PGDATABASE)"
$(PSQL_COMMAND_NO_TRANSACTION) -d template1 -c "DROP DATABASE IF EXISTS $(PGDATABASE)"

$(TBDROP_TARGETS):
$(PSQL_COMMAND) -d template1 -c "DROP TABLESPACE IF EXISTS $(subst drop_tb_,,$@)"
$(PSQL_COMMAND_NO_TRANSACTION) -d template1 -c "DROP TABLESPACE IF EXISTS $(subst drop_tb_,,$@)"

drop_tablespaces: $(TBDROP_TARGETS)

Expand Down
5 changes: 4 additions & 1 deletion ddl/postgres/GLOBAL/roles.sql
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,9 @@ ALTER ROLE i2b2metadata WITH SUPERUSER INHERIT NOCREATEROLE CREATEDB LOGIN NOREP
CREATE ROLE searchapp;
ALTER ROLE searchapp WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION PASSWORD 'md544dcc093141b5e1cfcdc6232c560da01';
CREATE ROLE tm_cz;
ALTER ROLE tm_cz WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION PASSWORD 'md5b1cbce950ddc93c5ccec424c0c19a29d';
ALTER ROLE tm_cz WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md5b1cbce950ddc93c5ccec424c0c19a29d';
CREATE ROLE tm_dataloader;
ALTER ROLE tm_dataloader WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md5c69b875875e7b2db84dfa50880db4287';
CREATE ROLE tm_lz;
ALTER ROLE tm_lz WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION PASSWORD 'md5f5fb4487b17dbf2f090d87b91670f53f';
CREATE ROLE tm_wz;
Expand All @@ -30,3 +32,4 @@ CREATE ROLE ts_batch;
ALTER ROLE ts_batch WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION;
ALTER ROLE biomart_user SET search_path TO biomart_user, searchapp, biomart, deapp, i2b2demodata, i2b2metadata, amapp, fmapp, galaxy, gwas_plink, public;
ALTER ROLE tm_cz SET search_path TO "$user", tm_wz, tm_lz, deapp, i2b2metadata, i2b2demodata, deapp, biomart, ts_batch;
ALTER ROLE tm_dataloader SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;
3 changes: 2 additions & 1 deletion ddl/postgres/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,8 @@ SCHEMAS = \
fmapp \
galaxy \
gwas_plink \
ts_batch
ts_batch \
tm_dataloader

FULL_SCHEMA_DUMPS = $(foreach schema, $(SCHEMAS), _dumps/$(schema).sql)

Expand Down
6 changes: 3 additions & 3 deletions ddl/postgres/_scripts/classes.php
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ public function process() {
$group = 'prelude';
break;
case 'TABLE':
$regex = '/^CREATE TABLE "?(?P<group>[^"\s]+)"?/m';
$regex = '/^CREATE (?:UNLOGGED )?TABLE "?(?P<group>[^"\s]+)"?/m';
break;
case 'VIEW':
$hasCrossDep = false;
Expand Down Expand Up @@ -336,8 +336,8 @@ public function readAll() {
* always the same set of identical objects, not just equal objects */
$this->items = $this->filterItems();
}
public function writeItems() {
return $this->inner->writeItems();
public function writeItems($stream) {
return $this->inner->writeItems($stream);
}
public function getItems() {
return $this->items;
Expand Down
102 changes: 102 additions & 0 deletions ddl/postgres/tm_dataloader/_cross.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
ALTER FUNCTION _final_median(double precision[]) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION _final_median(anyarray) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION copy_security_from_other_study(character varying, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION cz_end_audit(numeric, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION cz_error_handler(numeric, character varying, character varying, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION cz_start_audit(character varying, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION cz_write_audit(numeric, character varying, character varying, character varying, numeric, numeric, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION cz_write_error(numeric, character varying, character varying, character varying, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION drop_all_indexes(character varying, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION get_last_path_component(character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_add_node(character varying, character varying, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_add_nodes(character varying, text[], numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_add_platform(character varying, character varying, character varying, character varying, character varying, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_add_root_node(character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_add_trial_nodes(character varying, character varying, text[], numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_build_metadata_xml(character varying, character varying, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_create_concept_counts(character varying, numeric, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_create_full_tree(character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_delete_1_node(character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_delete_all_data(character varying, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_delete_partition(character varying, character varying, character varying, character varying, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_fill_in_tree(character varying, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_get_hlevel(character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_get_node_name(character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_load_annotation_deapp(numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_load_clinical_data(character varying, character varying, character varying, character varying, character varying, numeric, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_load_metabolomics_annot(numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_load_mirna_annot_deapp(numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_load_proteomics_annot(numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_load_rbm_annotation(bigint) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_load_rbm_data(character varying, character varying, character varying, character varying, numeric, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_load_samples(character varying, character varying, character varying, character varying, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_load_security_data(numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_load_security_data(character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_load_study_metadata(numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_metabolomics_zscore_calc(character varying, character varying, character varying, numeric, character varying, character varying, numeric, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_mirna_zscore_calc(character varying, character varying, numeric, character varying, numeric, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_move_study_by_path(character varying, character varying, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_process_generic_hdddata(character varying, character varying, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_process_gwas_plink_data(character varying, character varying, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_process_metabolomic_data(character varying, character varying, character varying, character varying, numeric, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_process_mrna_data(character varying, character varying, character varying, character varying, numeric, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_process_proteomics_data(character varying, character varying, character varying, character varying, numeric, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_process_qpcr_mirna_data(character varying, character varying, character varying, character varying, numeric, character varying, numeric, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_process_rna_seq_data(character varying, character varying, character varying, character varying, numeric, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_process_snp_data(character varying, character varying, character varying, character varying, numeric, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_process_vcf_data(character varying, character varying, character varying, character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_rbm_zscore_calc_new(character varying, character varying, character varying, numeric, character varying, bigint, character varying, bigint, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION i2b2_rna_seq_annotation(character varying, numeric) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION replace_last_path_component(character varying, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

ALTER FUNCTION timestamp_to_timepoint(character varying, character varying) SET search_path TO "$user", tm_cz, tm_lz, tm_wz, i2b2demodata, i2b2metadata, deapp, public;

73 changes: 73 additions & 0 deletions ddl/postgres/tm_dataloader/_load_all.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
\i tm_dataloader/prelude.sql
\i tm_dataloader/functions/_final_median.sql
\i tm_dataloader/functions/copy_security_from_other_study.sql
\i tm_dataloader/functions/cz_end_audit.sql
\i tm_dataloader/functions/cz_error_handler.sql
\i tm_dataloader/functions/cz_start_audit.sql
\i tm_dataloader/functions/cz_write_audit.sql
\i tm_dataloader/functions/cz_write_error.sql
\i tm_dataloader/functions/drop_all_indexes.sql
\i tm_dataloader/functions/get_last_path_component.sql
\i tm_dataloader/functions/i2b2_add_node.sql
\i tm_dataloader/functions/i2b2_add_nodes.sql
\i tm_dataloader/functions/i2b2_add_platform.sql
\i tm_dataloader/functions/i2b2_add_root_node.sql
\i tm_dataloader/functions/i2b2_add_trial_nodes.sql
\i tm_dataloader/functions/i2b2_build_metadata_xml.sql
\i tm_dataloader/functions/i2b2_create_concept_counts.sql
\i tm_dataloader/functions/i2b2_create_full_tree.sql
\i tm_dataloader/functions/i2b2_delete_1_node.sql
\i tm_dataloader/functions/i2b2_delete_all_data.sql
\i tm_dataloader/functions/i2b2_delete_partition.sql
\i tm_dataloader/functions/i2b2_fill_in_tree.sql
\i tm_dataloader/functions/i2b2_get_hlevel.sql
\i tm_dataloader/functions/i2b2_get_node_name.sql
\i tm_dataloader/functions/i2b2_load_annotation_deapp.sql
\i tm_dataloader/functions/i2b2_load_chrom_region.sql
\i tm_dataloader/functions/i2b2_load_clinical_data.sql
\i tm_dataloader/functions/i2b2_load_metabolomics_annot.sql
\i tm_dataloader/functions/i2b2_load_mirna_annot_deapp.sql
\i tm_dataloader/functions/i2b2_load_proteomics_annot.sql
\i tm_dataloader/functions/i2b2_load_rbm_annotation.sql
\i tm_dataloader/functions/i2b2_load_rbm_data.sql
\i tm_dataloader/functions/i2b2_load_samples.sql
\i tm_dataloader/functions/i2b2_load_security_data.sql
\i tm_dataloader/functions/i2b2_load_study_metadata.sql
\i tm_dataloader/functions/i2b2_metabolomics_zscore_calc.sql
\i tm_dataloader/functions/i2b2_mirna_zscore_calc.sql
\i tm_dataloader/functions/i2b2_move_study_by_path.sql
\i tm_dataloader/functions/i2b2_process_acgh_data.sql
\i tm_dataloader/functions/i2b2_process_generic_hdddata.sql
\i tm_dataloader/functions/i2b2_process_gwas_plink_data.sql
\i tm_dataloader/functions/i2b2_process_metabolomic_data.sql
\i tm_dataloader/functions/i2b2_process_mrna_data.sql
\i tm_dataloader/functions/i2b2_process_proteomics_data.sql
\i tm_dataloader/functions/i2b2_process_qpcr_mirna_data.sql
\i tm_dataloader/functions/i2b2_process_rna_seq_data.sql
\i tm_dataloader/functions/i2b2_process_snp_data.sql
\i tm_dataloader/functions/i2b2_process_vcf_data.sql
\i tm_dataloader/functions/i2b2_proteomics_zscore_calc.sql
\i tm_dataloader/functions/i2b2_rbm_zscore_calc_new.sql
\i tm_dataloader/functions/i2b2_rna_seq_annotation.sql
\i tm_dataloader/functions/replace_last_path_component.sql
\i tm_dataloader/functions/timestamp_to_timepoint.sql
\i tm_dataloader/i2b2_load_path.sql
\i tm_dataloader/i2b2_load_path_with_count.sql
\i tm_dataloader/i2b2_load_tree_full.sql
\i tm_dataloader/lt_snp_calls_by_gsm.sql
\i tm_dataloader/lt_snp_copy_number.sql
\i tm_dataloader/lt_snp_gene_map.sql
\i tm_dataloader/lt_src_clinical_data.sql
\i tm_dataloader/lt_src_deapp_annot.sql
\i tm_dataloader/lt_src_mrna_data.sql
\i tm_dataloader/lt_src_mrna_subj_samp_map.sql
\i tm_dataloader/lt_src_mrna_xml_data.sql
\i tm_dataloader/wrk_clinical_data.sql
\i tm_dataloader/wt_num_data_types.sql
\i tm_dataloader/wt_subject_microarray_calcs.sql
\i tm_dataloader/wt_subject_microarray_logs.sql
\i tm_dataloader/wt_subject_mrna_probeset.sql
\i tm_dataloader/wt_subject_proteomics_logs.sql
\i tm_dataloader/wt_subject_proteomics_med.sql
\i tm_dataloader/wt_trial_nodes.sql
\i tm_dataloader/_misc.sql
23 changes: 23 additions & 0 deletions ddl/postgres/tm_dataloader/_misc.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
--
-- Name: median(anyelement); Type: AGGREGATE; Schema: tm_dataloader; Owner: -
--
CREATE AGGREGATE median(anyelement) (
SFUNC = array_append,
STYPE = anyarray,
INITCOND = '{}',
FINALFUNC = tm_dataloader._final_median
);

--
-- Name: median(double precision); Type: AGGREGATE; Schema: tm_dataloader; Owner: -
--
CREATE AGGREGATE median(double precision) (
SFUNC = array_append,
STYPE = double precision[],
INITCOND = '{}',
FINALFUNC = tm_dataloader._final_median
);


SET default_with_oids = false;

4 changes: 4 additions & 0 deletions ddl/postgres/tm_dataloader/dependencies.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?php
$dependencies = array (
)
;
32 changes: 32 additions & 0 deletions ddl/postgres/tm_dataloader/functions/_final_median.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
--
-- Name: _final_median(double precision[]); Type: FUNCTION; Schema: tm_dataloader; Owner: -
--
CREATE FUNCTION _final_median(double precision[]) RETURNS double precision
LANGUAGE sql IMMUTABLE
AS $_$
SELECT AVG(val)
FROM (
SELECT val
FROM unnest($1) val
ORDER BY 1
LIMIT 2 - MOD(array_upper($1, 1), 2)
OFFSET CEIL(array_upper($1, 1) / 2.0) - 1
) sub;
$_$;

--
-- Name: _final_median(anyarray); Type: FUNCTION; Schema: tm_dataloader; Owner: -
--
CREATE FUNCTION _final_median(anyarray) RETURNS numeric
LANGUAGE sql IMMUTABLE
AS $_$
SELECT AVG(val)
FROM (
SELECT val
FROM unnest($1) val
ORDER BY 1
LIMIT 2 - MOD(array_upper($1, 1), 2)
OFFSET CEIL(array_upper($1, 1) / 2.0) - 1
) sub;
$_$;

Loading