| name | sql-queries-postgresql-including-aurora-rds-supabase-neon |
| description | Sub-skill of sql-queries: PostgreSQL (including Aurora, RDS, Supabase, Neon) (+1). |
| version | 1.0.0 |
| category | data-analytics |
| type | reference |
| scripts_exempt | true |
PostgreSQL (including Aurora, RDS, Supabase, Neon) (+1)
PostgreSQL (including Aurora, RDS, Supabase, Neon)
Date/time:
CURRENT_DATE, CURRENT_TIMESTAMP, NOW()
date_column + INTERVAL '7 days'
date_column - INTERVAL '1 month'
DATE_TRUNC('month', created_at)
EXTRACT(YEAR FROM created_at)
EXTRACT(DOW FROM created_at)
TO_CHAR(created_at, 'YYYY-MM-DD')
String functions:
first_name || ' ' || last_name
CONCAT(first_name, ' ', last_name)
column ILIKE '%pattern%'
column ~ '^regex_pattern$'
LEFT(str, n), RIGHT(str, n)
SPLIT_PART(str, delimiter, position)
REGEXP_REPLACE(str, pattern, replacement)
Arrays and JSON:
data->>'key'
data->'nested'->'key'
data#>>'{path,to,key}'
ARRAY_AGG(column)
ANY(array_column)
array_column @> ARRAY['value']
Performance tips:
- Use
EXPLAIN ANALYZE to profile queries
- Create indexes on frequently filtered/joined columns
- Use
EXISTS over IN for correlated subqueries
- Partial indexes for common filter conditions
- Use connection pooling for concurrent access
Snowflake
Date/time:
CURRENT_DATE(), CURRENT_TIMESTAMP(), SYSDATE()
DATEADD(day, 7, date_column)
DATEDIFF(day, start_date, end_date)
DATE_TRUNC('month', created_at)
YEAR(created_at), MONTH(created_at), DAY(created_at)
DAYOFWEEK(created_at)
TO_CHAR(created_at, 'YYYY-MM-DD')
String functions:
column ILIKE '%pattern%'
REGEXP_LIKE(column, 'pattern')
column:key::string
PARSE_JSON('{"key": "value"}')
GET_PATH(variant_col, 'path.to.key')
SELECT f.value FROM table, LATERAL FLATTEN(input => array_col) f
Semi-structured data:
data:customer:name::STRING
data:items[0]:price::NUMBER
SELECT
t.id,
item.value:name::STRING as item_name,
item.value:qty::NUMBER as quantity
FROM my_table t,
LATERAL FLATTEN(input => t.data:items) item
Performance tips:
- Use clustering keys on large tables (not traditional indexes)
- Filter on clustering key columns for partition pruning
- Set appropriate warehouse size for query complexity
- Use
RESULT_SCAN(LAST_QUERY_ID()) to avoid re-running expensive queries
- Use transient tables for staging/temp data