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.8 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)
  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 and a.is_private=false)
  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,
  72. task,
  73. release_id,
  74. user_id,
  75. repo_id,
  76. created_unix,
  77. updated_unix)
  78. VALUES (
  79. NEW.id,
  80. NEW.title,
  81. NEW.status,
  82. NEW.category,
  83. NEW.description,
  84. NEW.download_times,
  85. NEW.license,
  86. NEW.task,
  87. NEW.release_id,
  88. NEW.user_id,
  89. NEW.repo_id,
  90. NEW.created_unix,
  91. NEW.updated_unix
  92. );
  93. --end if;
  94. RETURN NEW;
  95. END;
  96. $def$
  97. LANGUAGE plpgsql;
  98. DROP TRIGGER IF EXISTS es_insert_dataset on public.dataset;
  99. CREATE TRIGGER es_insert_dataset
  100. AFTER INSERT ON public.dataset
  101. FOR EACH ROW EXECUTE PROCEDURE insert_dataset_data();
  102. ALTER TABLE public.dataset ENABLE ALWAYS TRIGGER es_insert_dataset;
  103. CREATE OR REPLACE FUNCTION public.udpate_dataset_file_name_delete() RETURNS trigger AS
  104. $def$
  105. BEGIN
  106. 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 and is_private=false) where id=OLD.dataset_id;
  107. return NEW;
  108. END;
  109. $def$
  110. LANGUAGE plpgsql;
  111. DROP TRIGGER IF EXISTS es_udpate_dataset_file_name_delete on public.attachment;
  112. CREATE TRIGGER es_udpate_dataset_file_name_delete
  113. AFTER DELETE ON public.attachment
  114. FOR EACH ROW EXECUTE PROCEDURE udpate_dataset_file_name_delete();
  115. ALTER TABLE public.attachment ENABLE ALWAYS TRIGGER es_udpate_dataset_file_name_delete;
  116. CREATE OR REPLACE FUNCTION public.update_dataset() RETURNS trigger AS
  117. $def$
  118. BEGIN
  119. UPDATE public.dataset_es
  120. SET description=NEW.description,
  121. title=NEW.title,
  122. category=NEW.category,
  123. download_times=NEW.download_times,
  124. file_name=(select array_to_string(array_agg(name order by created_unix desc),'-#,#-') from public.attachment where dataset_id=NEW.id and is_private=false)
  125. where id=NEW.id;
  126. return new;
  127. END
  128. $def$
  129. LANGUAGE plpgsql;
  130. DROP TRIGGER IF EXISTS es_update_dataset on public.dataset;
  131. CREATE TRIGGER es_update_dataset
  132. AFTER UPDATE ON public.dataset
  133. FOR EACH ROW EXECUTE PROCEDURE update_dataset();
  134. ALTER TABLE public.dataset ENABLE ALWAYS TRIGGER es_update_dataset;
  135. CREATE OR REPLACE FUNCTION public.delete_dataset() RETURNS trigger AS
  136. $def$
  137. declare
  138. BEGIN
  139. DELETE FROM public.dataset_es where id=OLD.id;
  140. return new;
  141. END
  142. $def$
  143. LANGUAGE plpgsql;
  144. DROP TRIGGER IF EXISTS es_delete_dataset on public.dataset;
  145. CREATE TRIGGER es_delete_dataset
  146. AFTER DELETE ON public.dataset
  147. FOR EACH ROW EXECUTE PROCEDURE delete_dataset();
  148. ALTER TABLE public.dataset ENABLE ALWAYS TRIGGER es_delete_dataset;