如何在服务端调用Postgres函数?现有RPC仅支持客户端调用
在服务端调用Postgres函数的方法
方法一:使用Supabase服务端SDK
服务端同样可以通过Supabase SDK调用Postgres函数,只需用服务端专用密钥初始化客户端,权限比客户端SDK更高。示例代码:
const { createClient } = require('@supabase/supabase-js'); // 用服务端密钥初始化客户端 const supabase = createClient(process.env.SUPABASE_URL, process.env.SUPABASE_SERVICE_ROLE_KEY); async function invokePostgresFunction() { const { data, error } = await supabase.rpc('hello_world'); if (error) { console.error('函数调用失败:', error); return; } console.log('函数返回数据:', data); } invokePostgresFunction();
方法二:直接使用Postgres客户端库(如pg)
如果需要更灵活的数据库操作,可直接用Postgres官方客户端库连接数据库,通过SQL语句调用函数。示例代码:
const { Pool } = require('pg'); // 配置数据库连接(连接字符串可从Supabase控制台获取) const pool = new Pool({ connectionString: process.env.DATABASE_URL, }); async function callFunction() { const client = await pool.connect(); try { // 直接执行函数调用的SQL语句 const result = await client.query('SELECT hello_world()'); console.log('函数返回结果:', result.rows[0]); } catch (err) { console.error('调用出错:', err); } finally { // 释放数据库连接 client.release(); } } callFunction();
注意事项
- 确保服务端使用的密钥(如
SUPABASE_SERVICE_ROLE_KEY)拥有执行目标Postgres函数的权限 - 目标Postgres函数需配置正确的权限(例如设置为
PUBLIC,或给对应的数据库角色授权执行权限)
内容的提问来源于stack exchange,提问作者Kirk Strobeck
相关产品推荐
相关产品推荐

