010-kestra-runtime.sql 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. -- Keep the orchestration runtime isolated from the DataOps application role.
  2. -- This file is safe both during first-volume initialization and as a compose
  3. -- bootstrap job for an existing local acceptance volume.
  4. DO $$
  5. BEGIN
  6. CREATE ROLE kestra_runtime LOGIN PASSWORD 'kestra-local-test-password';
  7. EXCEPTION
  8. WHEN duplicate_object THEN
  9. ALTER ROLE kestra_runtime LOGIN PASSWORD 'kestra-local-test-password';
  10. END $$;
  11. SELECT 'CREATE DATABASE kestra OWNER kestra_runtime'
  12. WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'kestra')\gexec
  13. ALTER DATABASE kestra OWNER TO kestra_runtime;
  14. \connect kestra
  15. DO $$
  16. DECLARE
  17. item record;
  18. object_kind text;
  19. BEGIN
  20. FOR item IN
  21. SELECT n.nspname AS schema_name, c.relname AS object_name, c.relkind
  22. FROM pg_class c
  23. JOIN pg_namespace n ON n.oid = c.relnamespace
  24. JOIN pg_roles r ON r.oid = c.relowner
  25. WHERE r.rolname = 'dataops'
  26. AND n.nspname NOT IN ('pg_catalog', 'information_schema')
  27. AND n.nspname !~ '^pg_toast'
  28. AND c.relkind IN ('r', 'p', 'v', 'm')
  29. LOOP
  30. object_kind := CASE item.relkind
  31. WHEN 'S' THEN 'SEQUENCE'
  32. WHEN 'v' THEN 'VIEW'
  33. WHEN 'm' THEN 'MATERIALIZED VIEW'
  34. ELSE 'TABLE'
  35. END;
  36. EXECUTE format(
  37. 'ALTER %s %I.%I OWNER TO kestra_runtime',
  38. object_kind,
  39. item.schema_name,
  40. item.object_name
  41. );
  42. END LOOP;
  43. END $$;
  44. GRANT ALL ON SCHEMA public TO kestra_runtime;
  45. GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO kestra_runtime;
  46. GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO kestra_runtime;