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 3.9 kB

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