Thanks for that. I can now get PuppetDB to start following your instructions. I'm running on Ubuntu 18 which uses PostgreSQL 10 and this version of PostgreSQL doesn't like some aspects of the SQL being performed by the JAR.
Excerpt from the log file ...
-------------------------------------------------------------------------------------------------------------------------------------
2018-07-24 22:05:52,203 INFO [p.p.c.services] Finished gc packages
2018-07-24 22:05:52,204 INFO [p.p.c.services] Starting database garbage collection
2018-07-24 22:05:52,250 WARN [c.z.h.p.ProxyConnection] PDBWritePool - Connection org.postgresql.jdbc.PgConnection@6e32d291 marked as broken because of SQLSTATE(0A000), ErrorCode(0)
java.sql.BatchUpdateException: Batch entry 0 with recursive live_paths(key, path, value) as (select key, key as path, value from (select (jsonb_each(stable||volatile)).* from factsets) as base_case union all select sub_path as key, sub_paths.path||'#~'||sub_path as path, sub_value as value from (select * from (select path, case jsonb_typeof(value) when 'object' then (jsonb_each(value)).key when 'array' then generate_series(0, jsonb_array_length(value - 1))::text end as sub_path, case jsonb_typeof(value) when 'object' then (jsonb_each(value)).value when 'array' then jsonb_array_elements(value) end as sub_value from live_paths) as candidates where candidates.sub_path is not null) as sub_paths) delete from fact_paths fp where not exists (select 1 from live_paths where live_paths.path = fp.path) was aborted: ERROR: set-returning functions are not allowed in CASE
Hint: You might be able to move the set-returning function into a LATERAL FROM item.
Position: 559 Call getNextException to see other errors in the batch.
at org.postgresql.jdbc.BatchResultHandler.handleError(BatchResultHandler.java:145)
at org.postgresql.core.ResultHandlerDelegate.handleError(ResultHandlerDelegate.java:50)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2179)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:479)
at org.postgresql.jdbc.PgStatement.executeBatch(PgStatement.java:835)
at com.zaxxer.hikari.pool.ProxyStatement.executeBatch(ProxyStatement.java:128)
at com.zaxxer.hikari.pool.HikariProxyStatement.executeBatch(HikariProxyStatement.java)
at clojure.java.jdbc$execute_batch.invokeStatic(jdbc.clj:533)
at clojure.java.jdbc$execute_batch.invoke(jdbc.clj:526)
at clojure.java.jdbc$db_do_commands$fn__24916.invoke(jdbc.clj:873)
at clojure.java.jdbc$db_transaction_STAR_.invokeStatic(jdbc.clj:784)
at clojure.java.jdbc$db_transaction_STAR_.invoke(jdbc.clj:711)
at clojure.java.jdbc$db_transaction_STAR_.invokeStatic(jdbc.clj:724)
at clojure.java.jdbc$db_transaction_STAR_.invoke(jdbc.clj:711)
at clojure.java.jdbc$db_do_commands.invokeStatic(jdbc.clj:872)
at clojure.java.jdbc$db_do_commands.invoke(jdbc.clj:857)
at puppetlabs.puppetdb.jdbc$do_commands.invokeStatic(jdbc.clj:38)
at puppetlabs.puppetdb.jdbc$do_commands.doInvoke(jdbc.clj:33)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at puppetlabs.puppetdb.scf.storage$delete_unused_fact_paths.invokeStatic(storage.clj:1127)
at puppetlabs.puppetdb.scf.storage$delete_unused_fact_paths.invoke(storage.clj:1123)
at puppetlabs.puppetdb.scf.storage$garbage_collect_BANG_$fn__32259$fn__32262.invoke(storage.clj:1439)
at puppetlabs.puppetdb.jdbc$with_transacted_connection_fn$fn__25578$fn__25579.invoke(jdbc.clj:483)
at clojure.java.jdbc$db_transaction_STAR_.invokeStatic(jdbc.clj:741)
at clojure.java.jdbc$db_transaction_STAR_.invoke(jdbc.clj:711)
at puppetlabs.puppetdb.jdbc$with_transacted_connection_fn$fn__25578.invoke(jdbc.clj:482)
at puppetlabs.puppetdb.jdbc$eval25552$retry_sql_STAR___25557$fn__25558$fn__25559.invoke(jdbc.clj:454)
at puppetlabs.puppetdb.jdbc$eval25552$retry_sql_STAR___25557$fn__25558.invoke(jdbc.clj:453)
at puppetlabs.puppetdb.jdbc$eval25552$retry_sql_STAR___25557.invoke(jdbc.clj:444)
at puppetlabs.puppetdb.jdbc$with_transacted_connection_fn.invokeStatic(jdbc.clj:480)
at puppetlabs.puppetdb.jdbc$with_transacted_connection_fn.invoke(jdbc.clj:469)
at puppetlabs.puppetdb.scf.storage$garbage_collect_BANG_$fn__32259.invoke(storage.clj:1438)
at puppetlabs.puppetdb.scf.storage.proxy$java.lang.Object$Callable$7da976d4.call(Unknown Source)
at com.codahale.metrics.Timer.time(Timer.java:101)
at puppetlabs.puppetdb.scf.storage$garbage_collect_BANG_.invokeStatic(storage.clj:1432)
at puppetlabs.puppetdb.scf.storage$garbage_collect_BANG_.invoke(storage.clj:1429)
at puppetlabs.puppetdb.cli.services$garbage_collect_BANG_.invokeStatic(services.clj:189)
at puppetlabs.puppetdb.cli.services$garbage_collect_BANG_.invoke(services.clj:180)
at puppetlabs.puppetdb.cli.services$eval40243$clean_up__40248$fn__40252$fn__40262.invoke(services.clj:259)
at puppetlabs.puppetdb.cli.services.proxy$java.lang.Object$Callable$7da976d4.call(Unknown Source)
at com.codahale.metrics.Timer.time(Timer.java:101)
at puppetlabs.puppetdb.cli.services$eval40243$clean_up__40248$fn__40252.invoke(services.clj:258)
at puppetlabs.puppetdb.cli.services$eval40243$clean_up__40248.invoke(services.clj:220)
at puppetlabs.puppetdb.cli.services$collect_garbage.invokeStatic(services.clj:373)
at puppetlabs.puppetdb.cli.services$collect_garbage.invoke(services.clj:368)
at puppetlabs.puppetdb.cli.services$start_puppetdb$fn__40323.invoke(services.clj:434)
at clojure.lang.AFn.run(AFn.java:22)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.postgresql.util.PSQLException: ERROR: set-returning functions are not allowed in CASE
Hint: You might be able to move the set-returning function into a LATERAL FROM item.
Position: 559
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2433)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2178)
... 51 common frames omitted
2018-07-24 22:05:52,263 ERROR [p.p.c.services] Error during garbage collection
clojure.lang.ExceptionInfo: Rollback failed handling "Batch entry 0 with recursive live_paths(key, path, value) as (select key, key as path, value from (select (jsonb_each(stable||volatile)).* from factsets) as base_case union all select sub_path as key, sub_paths.path||'#~'||sub_path as path, sub_value as value from (select * from (select path, case jsonb_typeof(value) when 'object' then (jsonb_each(value)).key when 'array' then generate_series(0, jsonb_array_length(value - 1))::text end as sub_path, case jsonb_typeof(value) when 'object' then (jsonb_each(value)).value when 'array' then jsonb_array_elements(value) end as sub_value from live_paths) as candidates where candidates.sub_path is not null) as sub_paths) delete from fact_paths fp where not exists (select 1 from live_paths where live_paths.path = fp.path) was aborted: ERROR: set-returning functions are not allowed in CASE
Hint: You might be able to move the set-returning function into a LATERAL FROM item.
Position: 559 Call getNextException to see other errors in the batch."
at clojure.core$ex_info.invokeStatic(core.clj:4739)
at clojure.core$ex_info.invoke(core.clj:4739)
at clojure.java.jdbc$db_transaction_STAR_$fn__24869.invoke(jdbc.clj:751)
at clojure.java.jdbc$db_transaction_STAR_.invokeStatic(jdbc.clj:747)
at clojure.java.jdbc$db_transaction_STAR_.invoke(jdbc.clj:711)
at puppetlabs.puppetdb.jdbc$with_transacted_connection_fn$fn__25578.invoke(jdbc.clj:482)
at puppetlabs.puppetdb.jdbc$eval25552$retry_sql_STAR___25557$fn__25558$fn__25559.invoke(jdbc.clj:454)
-------------------------------------------------------------------------------------------------------------------------------------
I can probably use a remote DB running on U16 with PostgreSQL 9.5 and I'm hopeful that this will get me working.
Thanks for your help thus far. I will let you know if I finally get this working.
Simon