オーラベースのロゴ
オーラベースドキュメント
ドキュメント›ガイド›Query your database (SDK)

JavaScript SDK を使用してデータベースにクエリを実行する

aura.dbの日常的なフロー、安全でない呼び出しを拒否するルール、行レベルのセキュリティでテーブルを保護する方法。

9 分 読み取り·レベル 中間·2026/10/12 に改訂
この英語のテキストはフランス語のオリジナルから自動的に生成されたもので、まだレビューされていません。
このページは自動翻訳されました。英語版が正式です。
#
読む

1. 行の読み取り

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')のショートカットです。すべての呼び出しは { data, error } を返し、スローすることはありません。 クライアント オプションとエラーを参照してください。

フィルター チェーン: eq、 neq、 gt、 gte、 lt、 lte、 like、 ilike、 in、 is、および データベース リファレンスにリストされているその他のもの。行のページの場合は、 range(from, to)を使用します。

#
書く

2. 挿入、更新、削除

write.tstypescript
// 1 つの行または行の配列を挿入し、それらを取得します。
const { data } = await aura.from('todos').insert({ title: 'Write the docs' }).select()

// アップサート
await aura.from('todos').upsert({ id, title: 'Renamed' }).select()

// 更新と削除にはフィルターが必要です
await aura.from('todos').update({ done: true }).eq('id', id)
await aura.from('todos').delete().eq('id', id)

間違いを防ぐ 2 つのルール:

  • バッチ挿入では、すべての行に同じキーが必要です。 異なるキーを持つ行は、 400 と All object keys must matchを返します。不足しているキーを nullで埋めます。
  • フィルターのないupdate() および delete() は、リクエストが送信される前に、クライアント によってエラー コード unfiltered_mutationで拒否されます。すべての行を意図的に変更するには、サーバーから SQL を実行します。
#
結果

3. 1 行、複数行、カウント

count.tstypescript
// 1 行のみ: 行がないか、複数行ある場合はエラー
const one = await aura.from('todos').select('*').eq('id', id).single()
// → error.status 406 フィルタが 0 行または複数の行に一致した場合

// 0 行または 1 行: 一致するものがない場合、データは null
const maybe = await aura.from('todos').select('*').eq('id', id).maybeSingle()

// 行とその合計
const page = await aura.from('todos').select('*', { count: 'exact' }).range(0, 9)
// page.count は範囲に関わらず合計です。

// 合計のみ、行なし
const { count } = await aura.from('todos').select('*', { count: 'exact', head: true })

count: 'exact' は、一致する行をすべてカウントします。 'planned' と 'estimated' は、非常に大きなテーブルでは高速であり、おおよその速度です。

#
セキュリティ

4. テーブルを保護する

SQL で作成されたテーブルは、RLS を有効にするまで開かれます。

新しいテーブルでは、行レベルのセキュリティは から になります。公開キーを使用すると、誰でも読み書きできます。それを有効にして、必要なポリシーを追加します。

SQLsql
alter table todos enable row level security;

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

データベース ロールは、 aura_anon、 aura_authenticated 、および aura_service_roleです。 auth.uid() は、公開キーの NULL と、サインインしているユーザーのユーザー ID です。 行レベルのセキュリティを参照してください。

service_role キーは仕様により RLS をバイパスします。サーバー上に保持してください。

#
機能

5. SQL関数とrpc

サーバーから関数を作成し、 rpc()を使用してどこからでも関数を呼び出します。

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 が必要です。 これがないと、誰も関数を実行できません。リストされていないロールには 403 permission denied for functionが与えられます。 authenticated と aura_authenticated の両方が受け入れられます。
  • 数秒後に新しい関数を呼び出すことができます。 API がスキーマを再ロードするまで、 rpc() は 404 Could not find the functionを返します。
  • 生の SQL (CREATE FUNCTION) を使用した関数の作成は拒否されます。 createFunctionを使用してください。
#
サーバー

6. サーバーから SQL を実行する

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() には service_role キーが必要です。 WHEREのない DELETE は拒否され、 pg_class や pg_rolesなどのシステム カタログは読み取られません。テーブルを一覧表示するには、 admin.db.schema()を使用します。