Aurabase Logosu
aura tabanıdokümanlar
dokümanlar›Kılavuzlar›Query your database (SDK)

Veritabanınızı JavaScript SDK'sıyla sorgulayın

aura.db günlük akışları, güvenli olmayan çağrıları reddeden kurallar ve bir tablonun satır düzeyinde güvenlikle nasıl korunacağı.

9 dk. oku·Seviye orta düzey·12 Eki 2026 tarihinde revize edildi
Bu İngilizce metin, Fransızca orijinalinden otomatik olarak oluşturulmuştur ve henüz incelenmemiştir.
Bu sayfa otomatik olarak çevrildi. İngilizce versiyonu yetkilidir.
#
Oku

1. Satırları okuyun

read.tstypescript
const { data, error } = await aura
  .from('todos')
  .select('id, title, done')
  .eq('done', false)
  .order('created_at', { ascending: false })
  .limit(20)

aura.from('todos'), aura.db.from('todos') için bir kısayoldur. Her çağrı { data, error } değerini döndürür ve hiçbir zaman fırlatmaz; bkz. istemci seçenekleri ve hataları.

Filtre zinciri: eq, neq, gt, gte, lt, lte, like, ilike, in, is ve listede listelenen diğerleri veritabanı referansı. Satırlardan oluşan bir sayfa için range(from, to) kullanın.

#
Yaz

2. Ekle, güncelle ve sil

write.tstypescript
// Bir satır veya bir dizi satır ekleyin ve bunları geri alın
const { data } = await aura.from('todos').insert({ title: 'Write the docs' }).select()

// Yukarı
await aura.from('todos').upsert({ id, title: 'Renamed' }).select()

// Güncelleme ve silme filtreye ihtiyaç duyar
await aura.from('todos').update({ done: true }).eq('id', id)
await aura.from('todos').delete().eq('id', id)

İki kural sizi hatalardan korur:

  • Bir toplu eklemenin her satırda aynı anahtarlara ihtiyacı vardır. Farklı anahtarlara sahip satırlar, All object keys must match ile 400 değerini döndürür. Eksik anahtarları null ile doldurun.
  • Filtresiz update() ve delete(), herhangi bir istek gönderilmeden önce istemcisi tarafından unfiltered_mutation hata koduyla reddedilir. Her satırı bilerek değiştirmek için SQL'i bir sunucudan çalıştırın.
#
Sonuçlar

3. Bir satır, birçok satır önemlidir

count.tstypescript
// Tam olarak bir satır: hiç veya birkaç tane varsa hata
const one = await aura.from('todos').select('*').eq('id', id).single()
// → filtre sıfır veya birkaç satırla eşleştiğinde error.status 406

// Sıfır veya bir satır: hiçbir şey eşleşmediğinde veriler boştur
const maybe = await aura.from('todos').select('*').eq('id', id).maybeSingle()

// Satırlar ve toplamları
const page = await aura.from('todos').select('*', { count: 'exact' }).range(0, 9)
// page.count aralık ne olursa olsun toplamdır

// Yalnızca toplam, satır yok
const { count } = await aura.from('todos').select('*', { count: 'exact', head: true })

count: 'exact' eşleşen her satırı sayar. 'planned' ve 'estimated' çok büyük tablolarda daha hızlıdır ve yaklaşıktır.

#
Güvenlik

4. Bir masayı koruyun

SQL'de oluşturulan bir tablo siz RLS etkinleştirilene kadar açıktır

Satır düzeyinde güvenlik, yeni bir tabloda kapalı. Açık anahtar sayesinde herkes okuyabilir ve yazabilir. Etkinleştirin ve ardından ihtiyacınız olan politikaları ekleyin:

SQLsql
alter table todos enable row level security;

create policy todos_own_read on todos
  for select to aura_authenticated
  using (auth.uid() = owner);

Veritabanı rolleri aura_anon, aura_authenticated ve aura_service_role şeklindedir. auth.uid(), ortak anahtar için NULL ve oturum açmış bir kullanıcının kullanıcı kimliğidir. Satır Düzeyinde Güvenlik konusuna bakın.

Bir service_role anahtarı, tasarım gereği RLS anahtarını atlar: onu sunucunuzda tutun.

#
Fonksiyonlar

5. SQL fonksiyonları ve rpc

Bir sunucudan bir işlev oluşturun, ardından onu herhangi bir yerden rpc() ile çağırın:

server/setup.tstypescript
await admin.db.createFunction({
  name: 'add',
  args: [
    { name: 'a', data_type: 'int', mode: 'IN' },
    { name: 'b', data_type: 'int', mode: 'IN' },
  ],
  returns: 'int',
  language: 'sql',
  body: 'SELECT a + b',
  grant_execute_to: ['anon', 'authenticated'],
})
client.tstypescript
const { data } = await aura.rpc('add', { a: 1, b: 2 }) // → 3
  • grant_execute_to onu çağırmak için gereklidir. Bu olmadan hiç kimse işlevi yürütemez. Listelenmeyen bir rol 403 permission denied for function alır. Hem authenticated hem de aura_authenticated kabul edilir.
  • Yeni bir işlev birkaç saniye sonra çağrılabilir. API şemasını yeniden yükleyene kadar rpc(), 404 Could not find the function değerini döndürür.
  • Ham SQL (CREATE FUNCTION) ile işlev oluşturma reddedildi: createFunction kullanın.
#
Sunucu

6. SQL'i bir sunucudan çalıştırın

server/migrate.tstypescript
import { createAdminClient } from '@aurabase/aurabase-js'

const admin = createAdminClient(process.env.AURA_URL!, process.env.AURA_SERVICE_ROLE_KEY!)

await admin.db.sql(`
  create table if not exists todos (
    id uuid primary key default gen_random_uuid(),
    title text not null,
    done boolean not null default false,
    owner uuid,
    created_at timestamptz not null default now()
  )
`)

db.sql() bir service_role anahtarına ihtiyaç duyar. DELETE olmadan WHERE öğesini reddeder ve pg_class veya pg_roles gibi sistem kataloglarını okumaz. Tablolarınızı listelemek için admin.db.schema() kullanın.