diff --git a/apps/studio/components/interfaces/Settings/Logs/LogSelection.tsx b/apps/studio/components/interfaces/Settings/Logs/LogSelection.tsx
index fb62e0e5360..1913b4ba78a 100644
--- a/apps/studio/components/interfaces/Settings/Logs/LogSelection.tsx
+++ b/apps/studio/components/interfaces/Settings/Logs/LogSelection.tsx
@@ -42,6 +42,8 @@ const LogSelection = ({ log, onClose, queryType, isLoading, error }: LogSelectio
case 'database':
return
+ case 'pg_cron':
+ return
case 'fn_edge':
return
diff --git a/apps/studio/components/interfaces/Settings/Logs/LogTable.tsx b/apps/studio/components/interfaces/Settings/Logs/LogTable.tsx
index ba438fac150..f83f79c0f8d 100644
--- a/apps/studio/components/interfaces/Settings/Logs/LogTable.tsx
+++ b/apps/studio/components/interfaces/Settings/Logs/LogTable.tsx
@@ -173,6 +173,9 @@ const LogTable = ({
case 'auth':
columns = AuthColumnRenderer
break
+ case 'pg_cron':
+ columns = DatabasePostgresColumnRender
+ break
default:
if (firstRow && isDefaultLogPreviewFormat(firstRow)) {
diff --git a/apps/studio/components/interfaces/Settings/Logs/Logs.constants.ts b/apps/studio/components/interfaces/Settings/Logs/Logs.constants.ts
index 4168bea354c..8323db71696 100644
--- a/apps/studio/components/interfaces/Settings/Logs/Logs.constants.ts
+++ b/apps/studio/components/interfaces/Settings/Logs/Logs.constants.ts
@@ -363,6 +363,7 @@ export enum LogsTableName {
POSTGREST = 'postgrest_logs',
SUPAVISOR = 'supavisor_logs',
WAREHOUSE = 'warehouse_logs',
+ PG_CRON = 'pg_cron',
}
export const LOGS_TABLES = {
@@ -376,6 +377,7 @@ export const LOGS_TABLES = {
postgrest: LogsTableName.POSTGREST,
supavisor: LogsTableName.SUPAVISOR,
warehouse: LogsTableName.WAREHOUSE,
+ pg_cron: LogsTableName.POSTGRES,
}
export const LOGS_SOURCE_DESCRIPTION = {
@@ -389,6 +391,7 @@ export const LOGS_SOURCE_DESCRIPTION = {
[LogsTableName.POSTGREST]: 'RESTful API web server logs',
[LogsTableName.SUPAVISOR]: 'Cloud-native Postgres connection pooler logs',
[LogsTableName.WAREHOUSE]: 'Logs obtained from a data warehouse collection',
+ [LogsTableName.PG_CRON]: 'Logs obtained from pg_cron',
}
export const genQueryParams = (params: { [k: string]: string }) => {
diff --git a/apps/studio/components/interfaces/Settings/Logs/Logs.types.ts b/apps/studio/components/interfaces/Settings/Logs/Logs.types.ts
index f9c055618af..565c00e41b1 100644
--- a/apps/studio/components/interfaces/Settings/Logs/Logs.types.ts
+++ b/apps/studio/components/interfaces/Settings/Logs/Logs.types.ts
@@ -88,6 +88,7 @@ export type QueryType =
| 'supavisor'
| 'postgrest'
| 'warehouse'
+ | 'pg_cron'
export type Mode = 'simple' | 'custom'
diff --git a/apps/studio/components/interfaces/Settings/Logs/Logs.utils.ts b/apps/studio/components/interfaces/Settings/Logs/Logs.utils.ts
index b4c4732ee15..5d941ede204 100644
--- a/apps/studio/components/interfaces/Settings/Logs/Logs.utils.ts
+++ b/apps/studio/components/interfaces/Settings/Logs/Logs.utils.ts
@@ -211,6 +211,17 @@ limit ${limit}
${orderBy}
limit ${limit}
`
+
+ case 'pg_cron':
+ return `select identifier, postgres_logs.timestamp, id, event_message, parsed.error_severity
+from postgres_logs
+ cross join unnest(metadata) as m
+ cross join unnest(m.parsed) as parsed
+where parsed.application_name = 'pg_cron'
+${where}
+${orderBy}
+limit ${limit}
+`
}
}
diff --git a/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx b/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx
index ae123766bdf..d24b38bfa3f 100644
--- a/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx
+++ b/apps/studio/components/layouts/LogsLayout/LogsSidebarMenuV2.tsx
@@ -164,6 +164,12 @@ export function LogsSidebarMenuV2() {
url: `/project/${ref}/logs/edge-functions-logs`,
items: [],
},
+ {
+ name: 'Cron Jobs',
+ key: 'pg_cron',
+ url: `/project/${ref}/logs/pgcron-logs`,
+ items: [],
+ },
]
const filteredLogs = BASE_COLLECTIONS.filter((collection) => {
diff --git a/apps/studio/pages/project/[ref]/logs/pgcron-logs.tsx b/apps/studio/pages/project/[ref]/logs/pgcron-logs.tsx
new file mode 100644
index 00000000000..25ba5c01e35
--- /dev/null
+++ b/apps/studio/pages/project/[ref]/logs/pgcron-logs.tsx
@@ -0,0 +1,24 @@
+import { useRouter } from 'next/router'
+
+import { LogsTableName } from 'components/interfaces/Settings/Logs/Logs.constants'
+import LogsPreviewer from 'components/interfaces/Settings/Logs/LogsPreviewer'
+import LogsLayout from 'components/layouts/LogsLayout/LogsLayout'
+import type { NextPageWithLayout } from 'types'
+
+export const LogPage: NextPageWithLayout = () => {
+ const router = useRouter()
+ const { ref } = router.query
+
+ return (
+
+ )
+}
+
+LogPage.getLayout = (page) => {page}
+
+export default LogPage