psql $(DATABASE) -v ON_ERROR_STOP=1<<<'copy (select temp_images.jsonb_object_agg(object) from temp_images.image_search_json group by image_id) to stdout;' > images.jsonl
insert into temp_images.image_search_json (image_id, object)select i.id, jsonb_build_object('true_uploader_id', u.id, 'true_uploader', u.name) from images i left join users u on u.id = i.user_id;
SQL
uploaders:image_search_json
psql $(DATABASE) -v ON_ERROR_STOP=1 <<-SQL
insert into temp_images.image_search_json (image_id, object)select i.id, jsonb_build_object('uploader_id', (case when i.anonymous ='t'then null else u.id end), 'uploader', (case when i.anonymous ='t'then null else lower(u.name) end)) from images i left join users u on u.id = i.user_id;
SQL
deleters:image_search_json
psql $(DATABASE) -v ON_ERROR_STOP=1 <<-SQL
insert into temp_images.image_search_json (image_id, object)select i.id, jsonb_build_object('deleted_by_user_id', u.id, 'deleted_by_user', lower(u.name)) from images i left join users u on u.id = i.deleted_by_id;
insert into temp_images.image_search_json (image_id, object)select gi.image_id, jsonb_build_object('gallery_interactions', jsonb_agg(jsonb_build_object('id', gi.gallery_id, 'position', gi.position))) from gallery_interactions gi group by image_id;
insert into temp_images.image_search_json (image_id, object)select s.image_id, jsonb_build_object('source_url', jsonb_agg(lower(s.source)), 'source_count', count(*)) from image_sources s group by image_id;
insert into temp_images.image_search_json (image_id, object)select ih.image_id, jsonb_build_object('hidden_by_user_ids', jsonb_agg(ih.user_id), 'hidden_by_users', jsonb_agg(lower(u.name))) from image_hides ih inner join users u on u.id = ih.user_id group by image_id;
insert into temp_images.image_search_json (image_id, object)select iv.image_id, jsonb_build_object('downvoter_ids', jsonb_agg(iv.user_id), 'downvoters', jsonb_agg(lower(u.name))) from image_votes iv inner join users u on u.id = iv.user_id where iv.up =false group by image_id;
insert into temp_images.image_search_json (image_id, object)select iv.image_id, jsonb_build_object('upvoter_ids', jsonb_agg(iv.user_id), 'upvoters', jsonb_agg(lower(u.name))) from image_votes iv inner join users u on u.id = iv.user_id where iv.up =true group by image_id;
insert into temp_images.image_search_json (image_id, object)selectif.image_id, jsonb_build_object('favourited_by_user_ids', jsonb_agg(if.user_id), 'favourited_by_users', jsonb_agg(lower(u.name))) from image_faves if inner join users u on u.id =if.user_id group by image_id;
insert into temp_images.image_search_json (image_id, object)select image_id, jsonb_build_object('namespaced_tags', jsonb_build_object('name', jsonb_agg(lower(tag_name)))) from temp_images.tags_with_aliases group by image_id;
SQL
tags_with_aliases:image_search_json
psql $(DATABASE) -v ON_ERROR_STOP=1 <<-SQL
create unlogged table if not exists temp_images.tags_with_aliases (image_id bigint not null, tag_name text not null);
truncate temp_images.tags_with_aliases;
insert into temp_images.tags_with_aliases (image_id, tag_name)select it.image_id, t.name from image_taggings it inner join tags t on t.id = it.tag_id;
insert into temp_images.tags_with_aliases (image_id, tag_name)select it.image_id, t.name from image_taggings it left outer join tags t on t.aliased_tag_id = it.tag_id where t.name is not null;
SQL
image_search_json:
psql $(DATABASE) -v ON_ERROR_STOP=1 <<-SQL
drop schema if exists temp_images cascade;
create schema temp_images;
create unlogged table temp_images.image_search_json (image_id bigint not null, object jsonb not null);
create function temp_images.wilson_995(succ bigint, fail bigint) returns double precision as '