Base de datos de Supabase
Supabase ofrece una base de datos PostgreSQL completa con APIs auto‑generadas. Obtienes toda la potencia de PostgreSQL incluyendo consultas complejas, joins, índices y extensiones.
🗄️ Funciones de base de datos
- PostgreSQL completo: Todas las funciones SQL y extensiones
- Auto APIs: REST y GraphQL generadas automáticamente
- Editor de tablas: Interfaz visual para gestionar datos
- Editor SQL: Ejecuta consultas SQL en el dashboard
Crear tablas
Crea tablas usando SQL en el editor SQL de Supabase:
-- Create a posts table
CREATE TABLE posts (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
title TEXT NOT NULL,
content TEXT,
user_id UUID REFERENCES auth.users(id),
created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
published BOOLEAN DEFAULT false
);
-- Create an index for faster queries
CREATE INDEX posts_user_id_idx ON posts(user_id);
Operaciones CRUD
Insertar datos
// Insert a single row
const { data, error } = await supabase
.from('posts')
.insert({ title: 'My First Post', content: 'Hello World!' })
.select()
// Insert multiple rows
const { data, error } = await supabase
.from('posts')
.insert([
{ title: 'Post 1', content: 'Content 1' },
{ title: 'Post 2', content: 'Content 2' }
])
.select()
Seleccionar datos
// Select all columns
const { data } = await supabase.from('posts').select('*')
// Select specific columns
const { data } = await supabase.from('posts').select('id, title')
// Select with filters
const { data } = await supabase
.from('posts')
.select('*')
.eq('published', true)
.order('created_at', { ascending: false })
.limit(10)
Actualizar datos
const { data, error } = await supabase
.from('posts')
.update({ title: 'Updated Title', published: true })
.eq('id', postId)
.select()
Eliminar datos
const { error } = await supabase
.from('posts')
.delete()
.eq('id', postId)
Filtrado de consultas
// Equal
.eq('column', 'value')
// Not equal
.neq('column', 'value')
// Greater than / Less than
.gt('column', value)
.lt('column', value)
.gte('column', value)
.lte('column', value)
// Pattern matching
.like('column', '%pattern%')
.ilike('column', '%pattern%') // case-insensitive
// In array
.in('column', ['value1', 'value2'])
// Is null
.is('column', null)
// Contains (for arrays/JSON)
.contains('tags', ['react', 'nextjs'])
Joins y relaciones
// Fetch posts with author info
const { data } = await supabase
.from('posts')
.select(`
id,
title,
user:users (
id,
name,
email
)
`)
// Nested relations
const { data } = await supabase
.from('posts')
.select(`
*,
comments (
id,
content,
user:users (name)
)
`)
Paginación
// Range-based pagination
const { data } = await supabase
.from('posts')
.select('*')
.range(0, 9) // First 10 items (0-9)
// With count
const { data, count } = await supabase
.from('posts')
.select('*', { count: 'exact' })
.range(0, 9)
💡 Puntos clave
- • Supabase usa PostgreSQL, obtienes todo el poder de SQL
- • Las APIs auto‑generadas simplifican operaciones CRUD
- • Encadena filtros para consultas complejas
- • Usa select() con relaciones para joins eficientes
📚 Más recursos
-
Documentación de base de datos →
Guía completa de la base de datos en Supabase.
-
Referencia de consultas →
Referencia completa de la API de consultas.