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.3 kB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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. id,
  44. title,
  45. status,
  46. category,
  47. description,
  48. download_times,
  49. license,
  50. task,
  51. release_id,
  52. user_id,
  53. repo_id,
  54. created_unix,
  55. 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;
  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. CREATE OR REPLACE FUNCTION public.udpate_dataset_file_name_delete() RETURNS trigger AS
  102. $def$
  103. BEGIN
  104. 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;
  105. return NEW;
  106. END;
  107. $def$
  108. LANGUAGE plpgsql;
  109. DROP TRIGGER IF EXISTS es_udpate_dataset_file_name_delete on public.attachment;
  110. CREATE TRIGGER es_udpate_dataset_file_name_delete
  111. AFTER DELETE ON public.attachment
  112. FOR EACH ROW EXECUTE PROCEDURE udpate_dataset_file_name_delete();
  113. CREATE OR REPLACE FUNCTION public.update_dataset() RETURNS trigger AS
  114. $def$
  115. BEGIN
  116. UPDATE public.dataset_es
  117. SET description=NEW.description,
  118. title=NEW.title,
  119. category=NEW.category,
  120. download_times=NEW.download_times,
  121. file_name=(select array_to_string(array_agg(name order by created_unix desc),',') from public.attachment where dataset_id=NEW.id)
  122. where id=NEW.id;
  123. return new;
  124. END
  125. $def$
  126. LANGUAGE plpgsql;
  127. DROP TRIGGER IF EXISTS es_update_dataset on public.dataset;
  128. CREATE TRIGGER es_update_dataset
  129. AFTER UPDATE ON public.dataset
  130. FOR EACH ROW EXECUTE PROCEDURE update_dataset();
  131. CREATE OR REPLACE FUNCTION public.delete_dataset() RETURNS trigger AS
  132. $def$
  133. declare
  134. BEGIN
  135. DELETE FROM public.dataset_es where id=OLD.id;
  136. return new;
  137. END
  138. $def$
  139. LANGUAGE plpgsql;
  140. DROP TRIGGER IF EXISTS es_delete_dataset on public.dataset;
  141. CREATE TRIGGER es_delete_dataset
  142. AFTER DELETE ON public.dataset
  143. FOR EACH ROW EXECUTE PROCEDURE delete_dataset();