You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

dataset_foreigntable_for_es.sql 4.7 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. DROP FOREIGN TABLE public.dataset_es;
  2. CREATE FOREIGN TABLE public.dataset_es
  3. (
  4. id bigint NOT NULL,
  5. title character varying(255),
  6. status integer,
  7. category character varying(255),
  8. description text,
  9. download_times bigint,
  10. license character varying(255),
  11. task character varying(255),
  12. release_id bigint,
  13. user_id bigint,
  14. repo_id bigint,
  15. created_unix bigint,
  16. updated_unix bigint,
  17. file_name text
  18. )SERVER multicorn_es
  19. OPTIONS
  20. (
  21. host '192.168.207.94',
  22. port '9200',
  23. index 'dataset-es-index',
  24. rowid_column 'id',
  25. default_sort '_id'
  26. )
  27. ;
  28. DELETE FROM public.dataset_es;
  29. INSERT INTO public.dataset_es(
  30. id,
  31. title,
  32. status,
  33. category,
  34. description,
  35. download_times,
  36. license, task,
  37. release_id,
  38. user_id,
  39. repo_id,
  40. created_unix,
  41. updated_unix,file_name,file_type)
  42. SELECT
  43. b.id,
  44. b.title,
  45. b.status,
  46. b.category,
  47. b.description,
  48. b.download_times,
  49. b.license,
  50. b.task,
  51. b.release_id,
  52. b.user_id,
  53. b.repo_id,
  54. b.created_unix,
  55. b.updated_unix,(select array_to_string(array_agg(name order by created_unix desc),',') from public.attachment a where a.dataset_id=b.id)
  56. FROM public.dataset b,public.repository c where b.repo_id=c.id and c.is_private=false;
  57. CREATE OR REPLACE FUNCTION public.insert_dataset_data() RETURNS trigger AS
  58. $def$
  59. DECLARE
  60. privateValue boolean=false;
  61. BEGIN
  62. select into privateValue is_private from public.repository where id=NEW.repo_id;
  63. if not privateValue then
  64. INSERT INTO public.dataset_es(
  65. id,
  66. title,
  67. status,
  68. category,
  69. description,
  70. download_times,
  71. license, task,
  72. release_id,
  73. user_id,
  74. repo_id,
  75. created_unix,
  76. updated_unix)
  77. VALUES (
  78. NEW.id,
  79. NEW.title,
  80. NEW.status,
  81. NEW.category,
  82. NEW.description,
  83. NEW.download_times,
  84. NEW.license,
  85. NEW.task,
  86. NEW.release_id,
  87. NEW.user_id,
  88. NEW.repo_id,
  89. NEW.created_unix,
  90. NEW.updated_unix
  91. );
  92. end if;
  93. RETURN NEW;
  94. END;
  95. $def$
  96. LANGUAGE plpgsql;
  97. DROP TRIGGER IF EXISTS es_insert_dataset on public.dataset;
  98. CREATE TRIGGER es_insert_dataset
  99. AFTER INSERT ON public.dataset
  100. FOR EACH ROW EXECUTE PROCEDURE insert_dataset_data();
  101. ALTER TABLE public.dataset ENABLE ALWAYS TRIGGER es_insert_dataset;
  102. CREATE OR REPLACE FUNCTION public.udpate_dataset_file_name_delete() RETURNS trigger AS
  103. $def$
  104. BEGIN
  105. update public.dataset_es SET file_name=(select array_to_string(array_agg(name order by created_unix desc),',') from public.attachment where dataset_id=OLD.dataset_id) where id=OLD.dataset_id;
  106. return NEW;
  107. END;
  108. $def$
  109. LANGUAGE plpgsql;
  110. DROP TRIGGER IF EXISTS es_udpate_dataset_file_name_delete on public.attachment;
  111. CREATE TRIGGER es_udpate_dataset_file_name_delete
  112. AFTER DELETE ON public.attachment
  113. FOR EACH ROW EXECUTE PROCEDURE udpate_dataset_file_name_delete();
  114. ALTER TABLE public.attachment ENABLE ALWAYS TRIGGER es_udpate_dataset_file_name_delete;
  115. CREATE OR REPLACE FUNCTION public.update_dataset() RETURNS trigger AS
  116. $def$
  117. BEGIN
  118. UPDATE public.dataset_es
  119. SET description=NEW.description,
  120. title=NEW.title,
  121. category=NEW.category,
  122. download_times=NEW.download_times,
  123. file_name=(select array_to_string(array_agg(name order by created_unix desc),',') from public.attachment where dataset_id=NEW.id),
  124. where id=NEW.id;
  125. return new;
  126. END
  127. $def$
  128. LANGUAGE plpgsql;
  129. DROP TRIGGER IF EXISTS es_update_dataset on public.dataset;
  130. CREATE TRIGGER es_update_dataset
  131. AFTER UPDATE ON public.dataset
  132. FOR EACH ROW EXECUTE PROCEDURE update_dataset();
  133. ALTER TABLE public.dataset ENABLE ALWAYS TRIGGER es_update_dataset;
  134. CREATE OR REPLACE FUNCTION public.delete_dataset() RETURNS trigger AS
  135. $def$
  136. declare
  137. BEGIN
  138. DELETE FROM public.dataset_es where id=OLD.id;
  139. return new;
  140. END
  141. $def$
  142. LANGUAGE plpgsql;
  143. DROP TRIGGER IF EXISTS es_delete_dataset on public.dataset;
  144. CREATE TRIGGER es_delete_dataset
  145. AFTER DELETE ON public.dataset
  146. FOR EACH ROW EXECUTE PROCEDURE delete_dataset();
  147. ALTER TABLE public.dataset ENABLE ALWAYS TRIGGER es_delete_dataset;