mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 09:25:06 +03:00
103 lines
2.7 KiB
Plaintext
103 lines
2.7 KiB
Plaintext
import Layout from '~/layouts/DefaultGuideLayout'
|
|
|
|
export const meta = {
|
|
id: 'pgcron',
|
|
title: 'pg_cron: Job Scheduling',
|
|
description:
|
|
'pgnet: a simple cron-based job scheduler for PostgreSQL that runs inside the database.',
|
|
}
|
|
|
|
The `pg_cron` extension is a simple cron-based job scheduler for PostgreSQL that runs inside the database.
|
|
|
|
## Usage
|
|
|
|
### Enable the extension
|
|
|
|
<Tabs
|
|
scrollable
|
|
size="small"
|
|
type="underlined"
|
|
defaultActiveId="dashboard"
|
|
>
|
|
<TabPanel id="dashboard" label="Dashboard">
|
|
|
|
1. Go to the [Database](https://app.supabase.com/project/_/database/tables) page in the Dashboard.
|
|
2. Click on **Extensions** in the sidebar.
|
|
3. Search for "pg_cron" and enable the extension.
|
|
|
|
</TabPanel>
|
|
<TabPanel id="sql" label="SQL">
|
|
|
|
```sql
|
|
-- Example: enable the "pg_cron" extension
|
|
create extension pg_cron with schema extensions;
|
|
|
|
-- If you're planning to use a non-superuser role to schedule jobs,
|
|
-- ensure that they are granted access to the cron schema and its underlying objects beforehand.
|
|
-- Failure to do so would result in jobs by these roles to not run at all.
|
|
|
|
grant usage on schema cron to {{DB user}};
|
|
grant all privileges on all tables in schema cron to {{DB user}};
|
|
|
|
|
|
-- Example: disable the "pg_cron" extension
|
|
drop extension if exists pg_cron;
|
|
```
|
|
|
|
</TabPanel>
|
|
</Tabs>
|
|
|
|
### Syntax
|
|
|
|
The schedule uses the standard cron syntax, in which \* means "run every time period", and a specific number means "but only at this time":
|
|
|
|
```bash
|
|
┌───────────── min (0 - 59)
|
|
│ ┌────────────── hour (0 - 23)
|
|
│ │ ┌─────────────── day of month (1 - 31)
|
|
│ │ │ ┌──────────────── month (1 - 12)
|
|
│ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
|
|
│ │ │ │ │ Saturday, or use names; 7 is also Sunday)
|
|
│ │ │ │ │
|
|
│ │ │ │ │
|
|
* * * * *
|
|
```
|
|
|
|
## Examples
|
|
|
|
### Delete data every week
|
|
|
|
Delete old data on Saturday at 3:30am (GMT):
|
|
|
|
```sql
|
|
select cron.schedule (
|
|
'webhook-every-minute', -- name of the cron job
|
|
'* * * * *', -- every minute
|
|
$$ delete from events where event_time < now() - interval '1 week' $$
|
|
);
|
|
```
|
|
|
|
### Run a vacuum every day
|
|
|
|
Vacuum every day at 3:00am (GMT)
|
|
|
|
```sql
|
|
SELECT cron.schedule('nightly-vacuum', '0 3 * * *', 'VACUUM');
|
|
```
|
|
|
|
### Unschedule a job
|
|
|
|
Unschedules a job called `'nightly-vacuum'`
|
|
|
|
```sql
|
|
SELECT cron.unschedule('nightly-vacuum');
|
|
```
|
|
|
|
## Resources
|
|
|
|
- [pg_cron GitHub Repository](https://github.com/citusdata/pg_cron)
|
|
|
|
export const Page = ({ children }) => <Layout meta={meta} children={children} />
|
|
|
|
export default Page
|