hackathon-pgai-tirgul
Onur Tirtir 2023-05-12 17:05:31 +03:00
parent 2b4c930e33
commit eb0dc48f17
2 changed files with 56 additions and 7 deletions

View File

@ -55,7 +55,7 @@ static void
RunHintAI(void) RunHintAI(void)
{ {
elog(NOTICE, "Running the HintAI code..."); elog(NOTICE, "Running the HintAI code...");
system("psql -p 9700 -f /tmp/hint_ai_code.txt --single-transaction 2> /tmp/hint_ai_code_error.txt"); system("psql -p 9700 -X -f /tmp/hint_ai_code.txt --single-transaction 2> /tmp/hint_ai_code_error.txt 1> /tmp/hint_ai_code_output.txt");
// read the first ERROR-DETAIL-HINT block from the error file // read the first ERROR-DETAIL-HINT block from the error file
FILE *fp = fopen("/tmp/hint_ai_code_error.txt", "r"); FILE *fp = fopen("/tmp/hint_ai_code_error.txt", "r");
@ -105,6 +105,8 @@ RunHintAI(void)
} }
} }
fclose(fp);
if (error) if (error)
{ {
ereport(ERROR, (errmsg("%s", error), ereport(ERROR, (errmsg("%s", error),
@ -112,6 +114,33 @@ RunHintAI(void)
hint ? errhint("%s", hint) : 0)); hint ? errhint("%s", hint) : 0));
} }
// else, print lines from /tmp/hint_ai_code_output.txt
fp = fopen("/tmp/hint_ai_code_output.txt", "r");
if (fp == NULL)
{
elog(ERROR, "Failed to open file");
}
StringInfo outBuf = makeStringInfo();
while (true)
{
char *line = NULL;
size_t len = 0;
ssize_t read = getline(&line, &len, fp);
if (read == -1)
{
break;
}
appendStringInfoString(outBuf, line);
}
if (outBuf->len > 0)
{
ereport(NOTICE, (errmsg("The output of \"RUN HINT\":\n%s", outBuf->data)));
}
fclose(fp); fclose(fp);
} }

View File

@ -8,16 +8,36 @@ AS $$
DECLARE DECLARE
cluster_stats text; cluster_stats text;
BEGIN BEGIN
WITH citus_tables_arr AS ( WITH
SELECT array_agg(row_to_json(t.*)) d FROM public.citus_tables t citus_tables_arr AS (
SELECT array_agg(row_to_json(t.*)) d FROM (
SELECT table_name, distribution_column FROM public.citus_tables
) t
),
all_tables_arr AS (
SELECT array_agg(tablename) d from pg_tables where schemaname='public'
), ),
citus_nodes_arr AS ( citus_nodes_arr AS (
SELECT array_agg(row_to_json(t.*)) d FROM pg_catalog.pg_dist_node t SELECT array_agg(row_to_json(t.*)) d FROM (
SELECT nodename, nodeport FROM pg_catalog.pg_dist_node
) t
), ),
key_values AS ( key_values AS (
SELECT unnest(ARRAY['citus_tables', 'citus_nodes']) AS key, SELECT
unnest(ARRAY[to_json(citus_tables_arr.d), to_json(citus_nodes_arr.d)]::json[]) AS value unnest(ARRAY[
FROM citus_tables_arr, citus_nodes_arr 'citus_tables',
'all_tables',
'citus_nodes'
]) AS key,
unnest(ARRAY[
to_json(citus_tables_arr.d),
to_json(all_tables_arr.d),
to_json(citus_nodes_arr.d)
]::json[]) AS value
FROM
citus_tables_arr,
all_tables_arr,
citus_nodes_arr
) )
SELECT json_object_agg(key, value)::text INTO cluster_stats SELECT json_object_agg(key, value)::text INTO cluster_stats
FROM key_values; FROM key_values;