mirror of
https://github.com/supabase/supabase.git
synced 2026-10-05 17:35:10 +03:00
Adding a prompts folder (#29131)
* adds migration prompt * Adds a prompt for coding style * Update examples/prompts/code-format-sql.md Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> * Update examples/prompts/database-create-migration.md Co-authored-by: Charis <26616127+charislam@users.noreply.github.com> --------- Co-authored-by: Tyler <dshukertjr@gmail.com> Co-authored-by: Charis <26616127+charislam@users.noreply.github.com>
This commit is contained in:
2 files changed
+189
No files matched your search
@@ -0,0 +1,141 @@
|
||||
# PostgreSQL SQL Style Guide
|
||||
|
||||
## General
|
||||
|
||||
- Use lowercase for SQL reserved words to maintain consistency and readability.
|
||||
- Employ consistent, descriptive identifiers for tables, columns, and other database objects.
|
||||
- Use white space and indentation to enhance the readability of your code.
|
||||
- Store dates in ISO 8601 format (`yyyy-mm-ddThh:mm:ss.sssss`).
|
||||
- Include comments for complex logic, using '/* ... */' for block comments and '--' for line comments.
|
||||
|
||||
## Naming Conventions
|
||||
|
||||
- Avoid SQL reserved words and ensure names are unique and under 63 characters.
|
||||
- Use snake_case for tables and columns.
|
||||
- Prefer plurals for table names
|
||||
- Prefer singular names for columns.
|
||||
|
||||
## Tables
|
||||
|
||||
- Avoid prefixes like 'tbl_' and ensure no table name matches any of its column names.
|
||||
- Always add an `id` column of type `identity generated always` unless otherwise specified.
|
||||
- Create all tables in the `public` schema unless otherwise specified.
|
||||
- Always add the schema to SQL queries for clarity.
|
||||
- Always add a comment to describe what the table does. The comment can be up to 1024 characters.
|
||||
|
||||
## Columns
|
||||
|
||||
- Use singular names and avoid generic names like 'id'.
|
||||
- For references to foreign tables, use the singular of the table name with the `_id` suffix. For example `user_id` to reference the `users` table
|
||||
- Always use lowercase except in cases involving acronyms or when readability would be enhanced by an exception.
|
||||
|
||||
#### Examples:
|
||||
|
||||
```sql
|
||||
create table books (
|
||||
id bigint generated always as identity primary key,
|
||||
title text not null,
|
||||
author_id bigint references authors (id)
|
||||
);
|
||||
comment on table books is 'A list of all the books in the library.';
|
||||
```
|
||||
|
||||
|
||||
## Queries
|
||||
|
||||
- When the query is shorter keep it on just a few lines. As it gets larger start adding newlines for readability
|
||||
- Add spaces for readability.
|
||||
|
||||
Smaller queries:
|
||||
|
||||
|
||||
```sql
|
||||
select *
|
||||
from employees
|
||||
where end_date is null;
|
||||
|
||||
update employees
|
||||
set end_date = '2023-12-31'
|
||||
where employee_id = 1001;
|
||||
```
|
||||
|
||||
Larger queries:
|
||||
|
||||
```sql
|
||||
select
|
||||
first_name,
|
||||
last_name
|
||||
from
|
||||
employees
|
||||
where
|
||||
start_date between '2021-01-01' and '2021-12-31'
|
||||
and
|
||||
status = 'employed';
|
||||
```
|
||||
|
||||
|
||||
### Joins and Subqueries
|
||||
|
||||
- Format joins and subqueries for clarity, aligning them with related SQL clauses.
|
||||
- Prefer full table names when referencing tables. This helps for readability.
|
||||
|
||||
```sql
|
||||
select
|
||||
employees.employee_name,
|
||||
departments.department_name
|
||||
from
|
||||
employees
|
||||
join
|
||||
departments on employees.department_id = departments.department_id
|
||||
where
|
||||
employees.start_date > '2022-01-01';
|
||||
```
|
||||
|
||||
## Aliases
|
||||
|
||||
- Use meaningful aliases that reflect the data or transformation applied, and always include the 'as' keyword for clarity.
|
||||
|
||||
```sql
|
||||
select count(*) as total_employees
|
||||
from employees
|
||||
where end_date is null;
|
||||
```
|
||||
|
||||
|
||||
## Complex queries and CTEs
|
||||
|
||||
- If a query is extremely complex, prefer a CTE.
|
||||
- Make sure the CTE is clear and linear. Prefer readability over performance.
|
||||
- Add comments to each block.
|
||||
|
||||
```sql
|
||||
with department_employees as (
|
||||
-- Get all employees and their departments
|
||||
select
|
||||
employees.department_id,
|
||||
employees.first_name,
|
||||
employees.last_name,
|
||||
departments.department_name
|
||||
from
|
||||
employees
|
||||
join
|
||||
departments on employees.department_id = departments.department_id
|
||||
),
|
||||
employee_counts as (
|
||||
-- Count how many employees in each department
|
||||
select
|
||||
department_name,
|
||||
count(*) as num_employees
|
||||
from
|
||||
department_employees
|
||||
group by
|
||||
department_name
|
||||
)
|
||||
select
|
||||
department_name,
|
||||
num_employees
|
||||
from
|
||||
employee_counts
|
||||
order by
|
||||
department_name;
|
||||
```
|
||||
@@ -0,0 +1,48 @@
|
||||
<!-- SUGGESTION: include the `code-format-sql.md` prompt for coding style. -->
|
||||
|
||||
# Database: Create migration
|
||||
|
||||
You are a Postgres Expert who loves creating secure database schemas.
|
||||
|
||||
This project uses the migrations provided by the Supabase CLI.
|
||||
|
||||
## Creating a migration file
|
||||
|
||||
Given the context of the user's message, create a database migration file inside the folder `supabase/migrations/`.
|
||||
|
||||
The file MUST following this naming convention:
|
||||
|
||||
The file MUST be named in the format `YYYYMMDDHHmmss_short_description.sql` with proper casing for months, minutes, and seconds in UTC time:
|
||||
|
||||
1. `YYYY` - Four digits for the year (e.g., `2024`).
|
||||
2. `MM` - Two digits for the month (01 to 12).
|
||||
3. `DD` - Two digits for the day of the month (01 to 31).
|
||||
4. `HH` - Two digits for the hour in 24-hour format (00 to 23).
|
||||
5. `mm` - Two digits for the minute (00 to 59).
|
||||
6. `ss` - Two digits for the second (00 to 59).
|
||||
7. Add an appropriate description for the migration.
|
||||
|
||||
For example:
|
||||
|
||||
```
|
||||
20240906123045_create_profiles.sql
|
||||
```
|
||||
|
||||
|
||||
## SQL Guidelines
|
||||
|
||||
Write Postgres-compatible SQL code for Supabase migration files that:
|
||||
|
||||
- Includes a header comment with metadata about the migration, such as the purpose, affected tables/columns, and any special considerations.
|
||||
- Includes thorough comments explaining the purpose and expected behavior of each migration step.
|
||||
- Write all SQL in lowercase.
|
||||
- Add copious comments for any destructive SQL commands, including truncating, dropping, or column alterations.
|
||||
- When creating a new table, you MUST enable Row Level Security (RLS) even if the table is intended for public access.
|
||||
- When creating RLS Policies
|
||||
- Ensure the policies cover all relevant access scenarios (e.g. select, insert, update, delete) based on the table's purpose and data sensitivity.
|
||||
- If the table is intended for public access the policy can simply return `true`.
|
||||
- RLS Policies should be granular: one policy for `select`, one for `insert` etc) and for each supabase role (`anon` and `authenticated`). DO NOT combine Policies even if the functionality is the same for both roles.
|
||||
- Include comments explaining the rationale and intended behavior of each security policy
|
||||
|
||||
The generated SQL code should be production-ready, well-documented, and aligned with Supabase's best practices.
|
||||
|
||||
Reference in new issue
Block a user