{"id":10020957,"date":"2025-08-19T21:29:11","date_gmt":"2025-08-19T13:29:11","guid":{"rendered":"https:\/\/itmax.cn\/?p=10020957"},"modified":"2025-08-19T21:29:11","modified_gmt":"2025-08-19T13:29:11","slug":"%e9%99%84%e9%83%a8%e7%bd%b2%e4%bb%a3%e7%a0%81%ef%bd%9c%e4%ba%91%e6%95%b0%e6%8d%ae%e5%ba%93rds-%e5%85%a8%e6%89%98%e7%ae%a1-supabase%e6%9c%8d%e5%8a%a1%ef%bc%9a%e5%b0%8f%e7%99%bd%e8%bd%bb%e6%9d%be","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10020957","title":{"rendered":"\u9644\u90e8\u7f72\u4ee3\u7801\uff5c\u4e91\u6570\u636e\u5e93RDS \u5168\u6258\u7ba1 Supabase\u670d\u52a1\uff1a\u5c0f\u767d\u8f7b\u677e\u641e\u5b9a\u5f00\u53d1AI\u5e94\u7528\uff01"},"content":{"rendered":"<p>\u4f5c\u8005\uff1a\u65e5\u8fd1 \u6728\u4fe1 \u665f\u4f1f<\/p>\n<h2>\u524d\u8a00<\/h2>\n<p>\u4e91\u6570\u636e\u5e93 RDS  PostgreSQL\u5168\u6258\u7ba1Supabase\u670d\u52a1\uff0c\u4e3a\u5ba2\u6237\u63d0\u4f9bAI\u5e94\u7528\u5f00\u53d1\u7684\u65b0\u8303\u5f0f\u3002<br \/><img loading=\"lazy\" decoding=\"async\" width=\"723\" height=\"166\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdl9MQ\" alt=\"\" title=\"\"><br \/>\u76f8\u6bd4\u4e8e\u4f20\u7edf\u5f00\u53d1\u6a21\u578b\uff0c\u57fa\u4e8eRDS Supabase\u7684\u5f00\u53d1\u6a21\u578b\u6709\u4ee5\u4e0b\u51e0\u4e2a\u6838\u5fc3\u4f18\u52bf\uff1a<br \/>\u2022 \u5f00\u53d1\u90e8\u7f72\u6548\u7387\uff1a\u4f20\u7edf\u5e94\u7528\u901a\u5e38\u6709\u591a\u5c42\u67b6\u6784\uff0c\u5e76\u4e14\u524d\u540e\u7aef\u670d\u52a1\u4ee5\u53ca\u6570\u636e\u5e93\u4e4b\u95f4\u7d27\u5bc6\u8026\u5408\uff0cSupabase\u5219\u63d0\u4f9b\u5f00\u7bb1\u5373\u7528\u7684\u4e00\u4f53\u5316\u670d\u52a1\u80fd\u529b\uff0c\u5e94\u7528\u5f00\u53d1\u90e8\u7f72\u5468\u671f\u4ece\u6708\u7ea7\u7f29\u77ed\u81f3\u5929\u7ea7\uff0c\u5feb\u901f\u5c06\u5e94\u7528\u63a8\u5411\u5e02\u573a\u3002<br \/>\u2022 \u6210\u672c\u4f18\u5316\uff1a\u4f20\u7edf\u5e94\u7528\u9700\u8981\u5927\u91cf\u4eba\u529b\u7ef4\u62a4\u591a\u4e2a\u5e94\u7528\u7ec4\u4ef6\u4ee5\u53ca\u6570\u636e\u5e93\u7684\u8d44\u6e90\uff0c\u800c\u57fa\u4e8e\u5168\u6258\u7ba1\u7684RDS Supabase\u4ee5\u53caRDS PostgreSQL\u7684\u5168\u751f\u547d\u5468\u671f\u7ba1\u7406\u80fd\u529b\uff0c\u5728\u8d44\u6e90\u6210\u672c\u4ee5\u53ca\u4eba\u529b\u6210\u672c\u4e0a\uff0c\u5747\u80fd\u51cf\u5c0f50%\u4ee5\u4e0a\u3002<br \/>\u2022 \u53ef\u6269\u5c55\u6027\uff1a\u76f8\u6bd4\u4f20\u7edf\u5e94\u7528\u5f00\u53d1\u7684\u57fa\u4e8e\u65b0\u7ec4\u4ef6\u7684\u6269\u5c55\u6a21\u578b\uff0cRDS Supabase\u53ef\u57fa\u4e8ePostgreSQL\u7684\u63d2\u4ef6\u4ee5\u53ca\u7b2c\u4e09\u65b9\u5e94\u7528\u6269\u5c55\uff0c\u5e76\u4e14\u5728\u8d44\u6e90\u4e0a\u5177\u5907Serverless\u5f39\u6027\u6269\u5c55\u80fd\u529b\uff0c\u8f7b\u677e\u5e94\u5bf9\u6d41\u91cf\u7684\u589e\u957f\u3002<br \/><strong>\u514d\u8d39\u7533\u8bf7\u8bd5\u7528\uff1a <a href=\"https:\/\/link.segmentfault.com\/?enc=9ph5sPxrluAS3CzavPN3Sg%3D%3D.2TGIzaM7QO6hN5XwLAXT9f1BvR7%2F8VKgWvENUPAtKgotFfUBsh6Qlt7lvDbh0rHFyEWSP05hjB44Hh5TjCjzDA%3D%3D\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/page.aliyun.com\/form\/act987005680\/index.htm<\/a><\/strong><\/p>\n<h2>\u4ec0\u4e48\u662fSupabase<\/h2>\n<p>Supabase\u662f\u4e00\u4e2a\u5f00\u6e90\u7684\uff0c\u5efa\u6784\u4e8e\u5f00\u6e90PostgreSQL\u4e4b\u4e0a\u7684\u540e\u7aef\u5373\u670d\u52a1\uff08BaaS\uff09\u5e73\u53f0\uff0c\u65e8\u5728\u66ff\u4ee3Firebase\u7b49\u5546\u4e1a\u5316BaaS\u5e73\u53f0\uff0cSupabase\u6574\u5408\u4e86\u591a\u4e2a\u4f18\u79c0\u7684\u5f00\u6e90\u6846\u67b6\uff0c\u5e76\u57fa\u4e8ePostgreSQL\u8fdb\u884c\u4e86\u6df1\u5ea6\u9002\u914d\uff0c\u63d0\u4f9b\u4e86API\u5316\u7684\u6570\u636e\u5e93\u7ba1\u7406\u80fd\u529b\u3001\u7528\u6237\u7ba1\u7406\u3001\u8eab\u4efd\u8ba4\u8bc1\u3001\u5bf9\u8c61\u5b58\u50a8\u670d\u52a1\u4ee5\u53ca\u57fa\u4e8ePostgreSQL CDC\u548cWebsocket\u7684\u5b9e\u65f6\u901a\u4fe1\u670d\u52a1\uff0c\u57fa\u4e8e\u8fd9\u4e9b\u5e73\u53f0\u5316\u57fa\u7840\u80fd\u529b\uff0c\u80fd\u591f\u4f7f\u5f00\u53d1\u8005\u7b80\u5316\u5168\u6808\u5e94\u7528\u5f00\u53d1\u7684\u6d41\u7a0b\uff0c\u5e2e\u52a9\u5f00\u53d1\u8005\u5feb\u901f\u6784\u5efa\u9ad8\u6027\u80fd\uff0c\u53ef\u6269\u5c55\u7684\u5e94\u7528\u7a0b\u5e8f\uff0c\u540c\u65f6\u907f\u514d\u4f20\u7edf\u5f00\u53d1\u6d41\u7a0b\u4e2d\u9700\u8981\u7ef4\u62a4\u590d\u6742\u540e\u7aef\u57fa\u7840\u8bbe\u65bd\u7684\u95ee\u9898\u3002<br \/><img decoding=\"async\" width=\"723\" height=\"158\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdl9MX\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<h3>Supabase\u9002\u7528\u573a\u666f<\/h3>\n<p>Supabase \u901a\u8fc7\u6574\u5408\u6570\u636e\u5e93\u3001\u8ba4\u8bc1\u3001\u5b58\u50a8\u3001\u5b9e\u65f6\u901a\u4fe1\u7b49\u5f00\u7bb1\u5373\u7528\u7684\u80fd\u529b\uff0c\u4e3a\u5f00\u53d1\u8005\u548c\u4f01\u4e1a\u63d0\u4f9b\u300c\u5f00\u53d1\u5373\u4ea4\u4ed8\u300d\u7684\u540e\u7aef\u5373\u670d\u52a1\uff08BaaS\uff09\u89e3\u51b3\u65b9\u6848\u3002\u5f00\u53d1\u8005\u53ef\u57fa\u4e8e\u6b64\u5feb\u901f\u6784\u5efa\u6700\u5c0f\u53ef\u884c\u6027\u4ea7\u54c1\uff08Minimum Viable Product\uff0cMVP\uff09\u6838\u5fc3\u529f\u80fd\uff0c\u4ee5\u6700\u4f4e\u6210\u672c\u3001\u6700\u77ed\u5468\u671f\u5b8c\u6210\u4ea7\u54c1\u539f\u578b\u5f00\u53d1\u4e0e\u5e02\u573a\u9a8c\u8bc1\u3002\u8fd9\u79cd\u300c\u529f\u80fd\u6a21\u5757\u5373\u63d2\u5373\u7528\u300d\u7684\u6a21\u5f0f\uff0c\u5c06\u4f20\u7edf\u5f00\u53d1\u4e2d\u8017\u65f6\u7684\u57fa\u7840\u8bbe\u65bd\u642d\u5efa\u8f6c\u5316\u4e3a\u81ea\u52a8\u5316\u670d\u52a1\uff0c\u663e\u8457\u964d\u4f4e\u8bd5\u9519\u98ce\u9669\uff0c\u52a9\u529b\u4f01\u4e1a\u5728\u521b\u65b0\u63a2\u7d22\u9636\u6bb5\u5b9e\u73b0\u8d44\u6e90\u6700\u4f18\u914d\u7f6e\u3002<br \/>\u57fa\u4e8eSupabase\u5f00\u53d1\u7684\u5178\u578b\u5e94\u7528\u573a\u666f\uff1a<\/p>\n<table>\n<thead>\n<tr>\n<th>\u6570\u636e\u9a71\u52a8\u578b\u5e94\u7528<\/th>\n<th>AI\u5e94\u7528<\/th>\n<th>SaaS\u5e94\u7528<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u5229\u7528Realtime\u7684Broadcast\u80fd\u529b\uff0c\u53ef\u76f4\u63a5\u76d1\u542c\u6570\u636e\u5e93\u53d8\u66f4\u5b9e\u73b0\u5b9e\u65f6\u6570\u636e\u63a8\u9001\u3002\u4f8b\u5982\u7535\u5546\u5e73\u53f0\u7684\u65b0\u8ba2\u5355\u901a\u77e5\u3001\u793e\u4ea4\u5e94\u7528\u7684\u52a8\u6001\u66f4\u65b0\u7b49\u573a\u666f\uff0c\u901a\u8fc7 SQL \u914d\u7f6e\u5373\u53ef\u8fc7\u6ee4\u7279\u5b9a\u6570\u636e\u53d8\u66f4\uff0c\u907f\u514d\u524d\u7aef\u8f6e\u8be2\u5e26\u6765\u7684\u6027\u80fd\u635f\u8017\u3002<\/td>\n<td>\u5229\u7528Database\u7ba1\u7406\u3001\u5bf9\u8c61\u5b58\u50a8\u4ee5\u53caPostgreSQL\u7684\u5411\u91cf\u4ee5\u53ca\u56fe\u6570\u636e\u5e93\uff0c\u914d\u5408Langchain\u7b49\u5de5\u5177\uff0c\u53ef\u5b9e\u73b0\u77e5\u8bc6\u5e93\u7684\u7ba1\u7406\u4ee5\u53ca\u57fa\u4e8e\u5411\u91cf\u548c\u56fe\u7684\u6df7\u5408\u68c0\u7d22\u80fd\u529b\uff0c\u4f8b\u5982MCP Server\u3001\u4f01\u4e1a\u4e13\u5c5e\u77e5\u8bc6\u5e93(RAG)\u3001\u6570\u5b57\u4eba(\u667a\u80fd\u5ba2\u670d\u3001\u966a\u7ec3\u52a9\u624b)\u7b49\u573a\u666f\u3002<\/td>\n<td>\u901a\u8fc7RDS Supbase\u7ed3\u5408PG\u751f\u6001\u8f6f\u4ef6\uff0c\u53ef\u5feb\u901f\u6784\u5efa\u4f01\u4e1a\u62a5\u8868\u5e94\u7528\uff0c\u4e00\u4f53\u5316\u7ba1\u7406\u5e73\u53f0\u7b49SaaS\u5e94\u7528\u3002<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Supabase\u6838\u5fc3\u80fd\u529b<\/h3>\n<p>Supabase\u53ef\u63d0\u4f9b\u8ba4\u8bc1&#038;\u7528\u6237\u7ba1\u7406\uff08Auth\uff09\u3001\u6570\u636e\u5e93\u7ba1\u7406\uff08 REST&#038; GraphQL\uff09\u3001\u5b9e\u65f6\u901a\u4fe1\uff08Realtime\uff09\u3001\u5b58\u50a8\uff08Storage\uff09\u7b49\u80fd\u529b\u3002<br \/><strong>\u8ba4\u8bc1 &#038; \u7528\u6237\u7ba1\u7406 (Auth)<\/strong><br \/>\u2022 \u7528\u6237\u7ba1\u7406\uff1a\u63d0\u4f9b\u7528\u6237\u6ce8\u518c\u3001\u6ce8\u9500\u3001\u89d2\u8272\u7ba1\u7406\u4ee5\u53ca\u533f\u540d\u7528\u6237\u7b49\u80fd\u529b<br \/>\u2022 \u8ba4\u8bc1\u6388\u6743\uff1a\u901a\u8fc7GoTrue\u63d0\u4f9b\u4e86\u5f00\u7bb1\u5373\u7528\u7684\u591a\u79cd\u8ba4\u8bc1\u6388\u6743\u65b9\u5f0f\uff0c\u652f\u6301\u90ae\u7bb1\u3001\u5bc6\u7801\u3001\u624b\u673a\u767b\u5f55\u3001\u65e0\u5bc6\u7801\u767b\u5f55\u3001SAML SSO\u5355\u70b9\u767b\u5f55\u4ee5\u53caOAuth \u6388\u6743\uff0c\u540c\u65f6\u5177\u5907\u7075\u6d3b\u7684\u6269\u5c55\u6027\uff0c\u652f\u6301\u7b2c\u4e09\u65b9\u5e73\u53f0\u8ba4\u8bc1(Github, Google, Apple, Facebook\u7b49)<br \/>\u2022 \u4f1a\u8bdd\u7ba1\u7406\uff1a\u57fa\u4e8e\u6807\u51c6\u7684 JWT(JSON Web Tokens) \u63d0\u4f9b\u7ec6\u7c92\u5ea6\u7684\u6743\u9650\u63a7\u5236\u3002<br \/>\u2022 Auth\u6a21\u5757\u4e2d\u7684\u6bcf\u4e2a\u7528\u6237\u901a\u8fc7\u5bf9\u5e94\u7684role\u4e0ePostgreSQL\u5185\u6838\u63d0\u4f9b\u7684 Row-Level Security (RLS) \u884c\u5b89\u5168\u7b56\u7565\u7ed1\u5b9a\uff0c\u4f7f\u5f97\u591a\u4e2a\u7528\u6237\u7684\u6570\u636e\u867d\u7136\u90fd\u5b58\u5728\u4e00\u5f20\u8868\u5185\uff0c\u4f46\u662f\u6bcf\u4e2a\u7528\u6237\u53ea\u80fd\u8bbf\u95ee\u5230\u81ea\u5df1\u7684\u6570\u636e\uff0c\u8fbe\u5230\u5b89\u5168\u9694\u79bb\u7684\u6548\u679c\u3002\u4f8b\u5982\uff0c\u5728\u4efb\u52a1\u7ba1\u7406\u5e94\u7528\u4e2d\uff0c\u53ef\u8bbe\u7f6e\u201c\u7528\u6237\u4ec5\u80fd\u67e5\u770b\u81ea\u5df1\u521b\u5efa\u7684\u4efb\u52a1\u201d\u3002\u6b64\u5916\uff0cSupabase\u8eab\u4efd\u8ba4\u8bc1\u7684\u7528\u6237\u6570\u636e\u5b58\u50a8\u4e8e PostgreSQL \u7684Auth Schema\u4e2d\uff0c\u5e76\u53ef\u901a\u8fc7\u5916\u952e\u5173\u8054\u81f3\u5e94\u7528\u81ea\u5b9a\u4e49\u8868\uff08\u5982\u7528\u6237\u4e2a\u4eba\u8d44\u6599\u8868\uff09\u3002<br \/><img decoding=\"async\" width=\"723\" height=\"405\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdl9Nf\" alt=\"\" title=\"\" loading=\"lazy\"><br \/><strong>\u6570\u636e\u5e93\u7ba1\u7406(REST &#038; GraphQL)<\/strong><br \/>Supabase \u652f\u6301\u901a\u8fc7RESTful\u63a5\u53e3\u4ee5\u53caGraphQL\u63a5\u53e3\u7ba1\u7406\u5e76\u64cd\u4f5c\u6570\u636e\u5e93\u4e2d\u7684\u5e93\u3001\u8868\u3001\u51fd\u6570\u3001\u5b58\u50a8\u8fc7\u7a0b\u7b49\u5bf9\u8c61\uff0c\u76f8\u6bd4\u4f20\u7edf\u7684\u5e94\u7528DAO\u5c42\u7684\u5f00\u53d1\u65b9\u5f0f\uff0c\u901a\u8fc7API\u63a5\u53e3\u7684\u65b9\u5f0f\u64cd\u4f5c\u4e0d\u9700\u8981\u65b0\u589eDAO\u5c42\uff0c\u53ea\u9700\u8981\u589e\u52a0\u5bf9\u5e94\u8868\u7684\u4e1a\u52a1\u5904\u7406\u903b\u8f91\u5373\u53ef\u3002<br \/>\u2022 RESTful\u63a5\u53e3\uff1a\u57fa\u4e8ePostgREST\u6846\u67b6\u5b9e\u73b0\uff0c\u5b9e\u73b0API\u63a5\u53e3\u5230SQL\u7684\u8f6c\u6362\uff0c\u5e76\u4e14\u5728PostgREST\u6846\u67b6\u4e2d\u5185\u7f6e\u4e86\u4e00\u4e2a\u8fde\u63a5\u6c60\uff0c\u80fd\u591f\u5728\u627f\u63a5\u9ad8\u6d41\u91cfHTTP\u8bf7\u6c42\u65f6\uff0c\u4fdd\u8bc1PostgREST\u4e0e\u6570\u636e\u5e93\u4e4b\u95f4\u7684\u8fde\u63a5\u6570\u7a33\u7ef4\u6301\u5728\u4e00\u4e2a\u8f83\u4f4e\u7684\u6c34\u5e73\uff0c\u9632\u6b62PostgreSQL\u6570\u636e\u5e93\u51fa\u73b0\u5185\u5b58\u5360\u7528\u8fc7\u591a\u7684\u95ee\u9898<br \/>\u2022 GraphQL\uff1a\u57fa\u4e8epg_graphql\u63d2\u4ef6\u5b9e\u73b0\uff0cresult\u4e00\u822c\u8fd4\u56deJSONB\u7c7b\u4f3c\u7684\u683c\u5f0f<br \/>\u4f8b\u5982\uff0c\u521b\u5efa\u4e00\u5f20 messages \u8868\u540e\uff0cSupabase \u4f1a\u81ea\u52a8\u63d0\u4f9b \/rest\/v1\/messages \u7aef\u70b9\uff0c\u5b9e\u73b0\u6570\u636e\u7684\u589e\u5220\u6539\u67e5\u64cd\u4f5c\uff0c\u663e\u8457\u51cf\u5c11\u540e\u7aef\u5f00\u53d1\u65f6\u95f4\u3002<br \/><img decoding=\"async\" width=\"723\" height=\"263\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdl9Ng\" alt=\"\" title=\"\" loading=\"lazy\"><br \/><strong>\u5b9e\u65f6\u901a\u4fe1\uff08Realtime\uff09<\/strong><br \/>Supabase \u901a\u8fc7Realtime\u7ec4\u4ef6\u63d0\u4f9b\u5b9e\u65f6\u6d88\u606f\u901a\u4fe1\u4ee5\u53ca\u6d88\u606f\u5e7f\u64ad\u80fd\u529b\uff0c\u5ba2\u6237\u7aef\u4e0eRealtime\u4e4b\u95f4\u652f\u6301 WebSocket \u534f\u8bae\uff0c\u7ed3\u5408PostgreSQL\u6570\u636e\u5e93\u81ea\u5e26\u7684\u903b\u8f91\u590d\u5236Slot\uff0ctrigger\u89e6\u53d1\u5668\uff0c\u914d\u5408\u76d1\u542cRealtime\u7684messages\u7cfb\u7edf\u8868\u7684\u53d8\u66f4\uff0c\u80fd\u591f\u5b9e\u73b0\u5c06\u6570\u636e\u5e93\u4e2d\u7684\u7eaa\u5f55\u53d8\u66f4\u53ca\u65f6\u5e7f\u64ad\u63a8\u9001\u81f3\u591a\u4e2a\u5ba2\u6237\u7aef\uff0c\u5e76\u4e14\u5728Realtime\u4e2d\u80fd\u591f\u5b9e\u73b0\u8de8\u5730\u57df\uff0c\u591aRealtime\u670d\u52a1\u4e4b\u95f4\u7684\u6d88\u606f\u4f20\u64ad\uff0c\u8fd9\u4e00\u7279\u6027\u5728\u9700\u8981\u9ad8\u4ea4\u4e92\u6027\u7684\u573a\u666f\u4e2d\u5c24\u4e3a\u91cd\u8981\uff0c\u4f8b\u5982\u5b9e\u65f6\u804a\u5929\u5e94\u7528\u6216\u534f\u4f5c\u5de5\u5177\u3002\u4ee5\u804a\u5929\u5e94\u7528\u4e3a\u4f8b\uff0c\u5f53\u7528\u6237 A \u53d1\u9001\u6d88\u606f\u540e\uff0c\u6240\u6709\u8fde\u63a5\u81f3\u8be5\u9891\u9053\u7684\u5ba2\u6237\u7aef\uff08\u5982\u7528\u6237 B \u7684\u8bbe\u5907\uff09\u4f1a\u7acb\u5373\u6536\u5230\u66f4\u65b0\uff0c\u65e0\u9700\u8f6e\u8be2\u670d\u52a1\u5668 \u3002<br \/><img decoding=\"async\" width=\"723\" height=\"389\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdl9Ni\" alt=\"\" title=\"\" loading=\"lazy\"><br \/><strong>Storage(\u517c\u5bb9S3\u6807\u51c6\u7684OSS\u5bf9\u8c61\u5b58\u50a8)<\/strong><br \/>Storage\u4e3b\u8981\u5c01\u88c5\u7684\u517c\u5bb9S3\u6807\u51c6\u7684\u5bf9\u8c61\u5b58\u50a8\u63a5\u53e3\uff0c\u5229\u7528PostgreSQL\u5b58\u50a8\u5bf9\u5e94OSS Bucket\u4fe1\u606f\u4ee5\u53ca\u6587\u4ef6\u4fe1\u606f\uff0c\u7ed3\u5408Auth\u7684RLS\u7b56\u7565\u5bf9OSS\u8bbf\u95ee\u5b9e\u73b0\u6743\u9650\u63a7\u5236\u3002<\/p>\n<h2>RDS Supabase\uff1a\u5168\u6258\u7ba1Supabase + RDS\u4f01\u4e1a\u7ea7\u6570\u636e\u5e93\u80fd\u529b\u4fdd\u969c<\/h2>\n<p>RDS Supabase\u662f\u57fa\u4e8e\u4e91\u6570\u636e\u5e93RDS PG\u7684\u5168\u6258\u7ba1 Supabase \u5e94\u7528\u5f00\u53d1\u5e73\u53f0\uff0c\u4e3a\u4f01\u4e1a\u5ba2\u6237\u63d0\u4f9b BaaS \uff08Backend as a service\uff09\u670d\u52a1\u3002\u901a\u8fc7\u5168\u6258\u7ba1Supabase\u670d\u52a1+RDS PG\u4f01\u4e1a\u7ea7\u6570\u636e\u5e93\u80fd\u529b+\u5f00\u7bb1\u5373\u7528\u7684\u67b6\u6784\u8bbe\u8ba1\uff0cRDS Supabase\u4e3a\u4f01\u4e1a\u63d0\u4f9b\u65e0\u9700\u7ef4\u62a4\u5e95\u5c42\u57fa\u7840\u8bbe\u65bd\u7684\u540e\u7aef\u670d\u52a1\u90e8\u7f72\u65b9\u6848\uff0c\u52a0\u901f\u4f01\u4e1aAI\u5e94\u7528\u4e1a\u52a1\u4e0a\u7ebf\u8fdb\u7a0b\u3002<br \/><img decoding=\"async\" width=\"723\" height=\"411\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdl9Nj\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<h3>\u6574\u4f53\u67b6\u6784<\/h3>\n<p><img decoding=\"async\" width=\"723\" height=\"359\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdl9Nm\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<h3>RDS Supabase\u589e\u5f3a\u80fd\u529b<\/h3>\n<p>RDS Supabase \u670d\u52a1\u57fa\u4e8e\u963f\u91cc\u4e91\u6570\u636e\u5e93 RDS PostgreSQL \u6784\u5efa\uff0c\u4e3a\u4f01\u4e1a\u63d0\u4f9b\u6db5\u76d6\u8ba1\u7b97\u3001\u5b58\u50a8\u3001\u7f51\u7edc\u53ca\u5927\u6a21\u578b\u8d44\u6e90\u7684\u5168\u6258\u7ba1\u89e3\u51b3\u65b9\u6848\u3002\u8be5\u670d\u52a1\u4e0e\u5f00\u6e90\u7248 Supabase 100%\u517c\u5bb9\uff0c\u652f\u6301\u901a\u8fc7\u53ef\u89c6\u5316\u7684RDS\u63a7\u5236\u53f0\u6216 OpenAPI \u5b9e\u73b0\u5b9e\u4f8b\u7684\u7075\u6d3b\u7ba1\u7406\u3002\u76f8\u8f83\u4e8e\u5f00\u6e90\u7248 Supabase \u548c\u5f00\u6e90 PostgreSQL \u6570\u636e\u5e93\uff0cRDS Supabase \u4e0d\u4ec5\u63d0\u4f9b RDS PostgreSQL \u7684\u5b8c\u6574\u529f\u80fd\u96c6\uff0c\u66f4\u5728\u6027\u80fd\u7a33\u5b9a\u6027\u3001\u5f39\u6027\u6269\u5c55\u80fd\u529b\u53ca\u81ea\u52a8\u5316\u8fd0\u7ef4\u5c42\u9762\u5b9e\u73b0\u663e\u8457\u7a81\u7834\uff0c\u52a9\u529b\u5f00\u53d1\u8005\u9ad8\u6548\u6784\u5efa\u73b0\u4ee3\u5316\u540e\u7aef\u670d\u52a1\u3002<br \/><strong>\u6027\u80fd<\/strong><br \/>RDS PostgreSQL \u5728\u8ba1\u7b97\u4e0e\u5b58\u50a8\u5c42\u9762\u5747\u5177\u5907\u7075\u6d3b\u7684\u5f39\u6027\u80fd\u529b\u3002\u5b58\u50a8\u5c42\u9762\uff0cRDS PG\u652f\u6301\u6309\u9700\u6269\u5c55\u3001\u81ea\u52a8\u5206\u5c42\u5b58\u50a8\u7b49\u80fd\u529b\uff0c\u6ee1\u8db3\u6d77\u91cf\u6570\u636e\u7684\u9ad8\u541e\u5410\u5904\u7406\u9700\u6c42\u3002\u5728\u8ba1\u7b97\u5c42\u9762\uff0cRDS PG \u63d0\u4f9b \u4f20\u7edf Serverless \u4e0e\u627f\u8bfa\u578b Serverless \u4e24\u79cd\u5f39\u6027\u80fd\u529b\uff1a<br \/>\u2022 \u4f20\u7edf Serverless\uff1a \u9002\u7528\u4e8e\u5f00\u53d1\u6d4b\u8bd5\u3001\u5bb9\u707e\u5907\u4efd\u7b49\u5bf9 SLA \u8981\u6c42\u8f83\u4f4e\u6216\u4e1a\u52a1\u6d41\u91cf\u6ce2\u52a8\u660e\u663e\u7684\u573a\u666f\uff0c\u5b9e\u73b0\u6309\u9700\u81ea\u52a8\u6269\u7f29\u5bb9\u3002<br \/>\u2022 \u627f\u8bfa\u578b Serverless \uff1a\u901a\u8fc7 &#8216;\u6025\u5f39\u7f13\u964d&#8217; \u7b56\u7565\uff08\u5feb\u901f\u6269\u5bb9 + \u6162\u901f\u7f29\u5bb9\uff09\uff0c\u7ed3\u5408 &#8216;\u672c\u5730\u5316\u6269\u5bb9&#8217; \u673a\u5236\uff0c\u907f\u514d\u56e0\u8de8\u673a\u6269\u5bb9\u5bfc\u81f4\u7684\u4e1a\u52a1\u4e2d\u65ad\u95ee\u9898\u3002\u5176\u6838\u5fc3\u4f18\u52bf\u5728\u4e8e\uff1a<br \/>\u2022 \u4e1a\u52a1\u65e0\u635f\uff1a\u57fa\u4e8e\u57fa\u672c\u89c4\u683c\u7684\u6027\u80fd\u515c\u5e95\u4fdd\u969c\uff0c\u786e\u4fdd\u6838\u5fc3\u4e1a\u52a1\u6301\u7eed\u7a33\u5b9a\u8fd0\u884c\uff1b<br \/>\u2022 \u7a81\u7834\u74f6\u9888\uff1a\u89e3\u9664\u4f20\u7edf\u5b9e\u4f8b\u89c4\u683c\u5bf9 I\/O \u5e26\u5bbd\u7684\u9650\u5236\uff0c\u4f9d\u6258 RDS \u9ad8\u6027\u80fd\u4e91\u76d8\uff0c\u5355\u5b9e\u4f8b\u6700\u5927\u541e\u5410\u91cf\u53ef\u8fbe 4GB\/s\uff1b<br \/>\u2022 \u667a\u80fd\u8c03\u5ea6\uff1a\u901a\u8fc7\u52a8\u6001\u8d44\u6e90\u6c60\u5316\u6280\u672f\uff0c\u5b9e\u73b0\u8d44\u6e90\u5229\u7528\u6548\u7387\u4e0e\u4e1a\u52a1\u54cd\u5e94\u901f\u5ea6\u7684\u53cc\u91cd\u4f18\u5316\u3002<br \/><img decoding=\"async\" width=\"723\" height=\"435\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdl9Nn\" alt=\"\" title=\"\" loading=\"lazy\"><br \/><strong>\u5bb9\u707e<\/strong><br \/>RDS PostgreSQL\u5f00\u653e\u4e86\u7269\u7406\u590d\u5236\u6743\u9650\uff0c\u57fa\u4e8e\u539f\u751f\u539f\u7406\u7269\u7406\u4ee5\u53ca\u4e91\u76d8\u5feb\u7167\u80fd\u529b\uff0c\u5e76\u901a\u8fc7\u5168\u6258\u7ba1\u7684CEN\u7f51\u7edc\uff0c\u514d\u53bb\u4e86\u7e41\u7410\u7684\u624b\u52a8CEN\u642d\u5efa\u8fc7\u7a0b\uff0c\u5b9e\u73b0\u4e86\u4e00\u952e\u8de8Region RDS PostgreSQL\u5b9e\u4f8b\u95f4\u7684\u5bb9\u707e\u3001\u4e91\u4e0a\u4e91\u4e0b\u5bb9\u707e\u4ee5\u53ca\u8de8Region\u7684PITR\u6062\u590d\u80fd\u529b\uff0c\u6ee1\u8db3\u7528\u6237\u5728\u6210\u672c\uff0cRTO\uff0cRPO\u4e0a\u7684\u4e0d\u540c\u9700\u6c42\uff0c\u6700\u5927\u9650\u5ea6\u7684\u4fdd\u8bc1Supabase\u7684\u6570\u636e\u5b89\u5168\u3002<br \/><img decoding=\"async\" width=\"723\" height=\"328\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdl9Nr\" alt=\"\" title=\"\" loading=\"lazy\"><br \/><strong>AI\u589e\u5f3a<\/strong><br \/>RDS PostgreSQL \u901a\u8fc7\u63d2\u4ef6\u5e02\u573a\u63d0\u4f9b100+\u4e2a\u53ef\u6269\u5c55\u63d2\u4ef6\uff0c\u5f00\u53d1\u8005\u53ef\u901a\u8fc7\u5b89\u88c5 pgvector\uff08\u5411\u91cf\u68c0\u7d22\uff09\u3001Apache Age\uff08\u56fe\u6570\u636e\u5e93\uff09\u53ca RUM\uff08\u5168\u6587\u68c0\u7d22\uff09\u7b49\u63d2\u4ef6\uff0c\u7ed3\u5408 RDS Supabase \uff0c\u5feb\u901f\u6784\u5efa GraphRAG\u3001\u77e5\u8bc6\u5e93\u6df7\u5408\u641c\u7d22\u7b49 AI \u5e94\u7528\u3002<br \/>\u5728\u5411\u91cf\u6570\u636e\u5e93\u6027\u80fd\u4f18\u5316\u65b9\u9762\uff0cRDS PostgreSQL \u4e5f\u80fd\u9488\u5bf9\u6027\u63d0\u4f9bVector\u7c7b\u578b\u6784\u5efa\u548c\u67e5\u8be2\u6027\u80fd\u7684\u4f18\u5316\u3002\u4f20\u7edfpgvector\uff08\u5982\u9002\u7528\u4e8e\u9ad8\u5411\u91cf\u7eac\u5ea6\u4f46\u5c0f\u6570\u636e\u96c6\u573a\u666f\u7684ivfflat \u7d22\u5f15\uff0c\u9002\u7528\u4e8e\u5927\u6570\u636e\u96c6\u573a\u666f\u4f46\u4f4e\u5411\u91cf\u552f\u72ec\u7684HNSW \u7d22\u5f15\uff09\u5728\u9ad8\u5411\u91cf\u7eac\u5ea6\u3001\u5927\u6570\u636e\u96c6\u573a\u666f\u7684\u8868\u73b0\u5747\u4e0d\u4f73\u3002RDS PostgreSQL\u5f15\u5165\u5f00\u6e90 disk_ann \u7d22\u5f15\uff0c\u5728\u786e\u4fdd\u67e5\u8be2\u7cbe\u5ea6\u7684\u524d\u63d0\u4e0b\uff0c\u5728\u7d22\u5f15\u6784\u5efa\u901f\u5ea6\u548c\u7d22\u5f15\u7a7a\u95f4\u4e0a\u5747\u6709\u5927\u5e45\u63d0\u5347\uff1b\u540c\u65f6\uff0c\u5728\u786c\u4ef6\u5c42\u9762\uff0cRDS PostgreSQL\u901a\u8fc7\u627f\u8bfa\u578bServerless\u548c\u9ad8\u6027\u80fd\u4e91\u76d8\uff0c\u4e3a\u5411\u91cf\u7d22\u5f15\u6784\u5efa\u548c\u67e5\u8be2\u63d0\u4f9b\u66f4\u9ad8\u7684IO\u541e\u5410\u4ee5\u53ca\u66f4\u5927\u7684\u5185\u5b58\u7a7a\u95f4\u8fdb\u884c\u52a0\u901f\u3002<br \/><img decoding=\"async\" width=\"723\" height=\"298\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdl9Nt\" alt=\"\" title=\"\" loading=\"lazy\"><\/p>\n<h2>\u5b9e\u6218\u6f14\u7ec3\uff1a\u57fa\u4e8eRDS Supabase\u5f00\u53d1\u4e00\u4e2a\u7b80\u6613Agentic RAG\u5e94\u7528<\/h2>\n<h3>Project\u80cc\u666f<\/h3>\n<p>\u672c\u9879\u76ee\u6f14\u793a\u901a\u8fc7 RDS Supabase + LangChain \u5feb\u901f\u642d\u5efa\u5177\u5907\u4ee5\u4e0b\u80fd\u529b\u7684Agentic RAG \u5e94\u7528\uff1a<br \/><strong>1. \u77e5\u8bc6\u5904\u7406\u94fe\u8def<\/strong><br \/>\u2022 \u5411\u91cf\u5316\uff1a\u901a\u8fc7 DashScope Embedding \u5c06 PDF\/Word \u7b49\u683c\u5f0f\u7684\u6587\u6863\u8f6c\u6362\u4e3a\u5411\u91cf\u8868\u793a<br \/>\u2022 \u5411\u91cf\u5b58\u50a8\uff1a\u901a\u8fc7RDS Supabase + pgvector \u6784\u5efa\u9ad8\u6027\u80fd\u5411\u91cf\u6570\u636e\u5e93\uff0c\u5b58\u50a8\u5411\u91cf<br \/>\u2022 \u667a\u80fd\u51b3\u7b56\uff1aLangChain \u81ea\u52a8\u7ba1\u7406\u300c\u68c0\u7d22-\u751f\u6210\u300d\u6d41\u7a0b\uff0c\u901a\u8fc7 tool_call \u673a\u5236\u52a8\u6001\u9009\u62e9\u68c0\u7d22\u7b56\u7565<br \/><strong>2. \u5bf9\u8bdd\u4ea4\u4e92\u7cfb\u7edf<\/strong><br \/>\u2022 \u5927\u6a21\u578b\u9a71\u52a8\uff1a\u96c6\u6210\u901a\u4e49\u5343\u95ee\u4f5c\u4e3aChatbot\u6a21\u578b\uff0c\u8fdb\u884c\u81ea\u7136\u8bed\u8a00\u7406\u89e3\u548c\u751f\u6210<br \/>\u2022 \u4f1a\u8bdd\u7ba1\u7406\uff1aStreamlit \u6846\u67b6\u7ef4\u62a4\u4e0a\u4e0b\u6587\u72b6\u6001\uff0c\u652f\u6301\u8fde\u7eed\u591a\u8f6e\u5bf9\u8bdd<br \/>\u8be5\u7c7b Agentic RAG\u5e94\u7528\u53ef\u5e7f\u6cdb\u4f7f\u7528\u4e8e\u5982\u4e0b\u771f\u5b9e\u573a\u666f\u4e2d\uff1a<br \/>\u2022 \u4f01\u4e1a\u77e5\u8bc6\u5e93\u95ee\u7b54\uff1a\u5feb\u901f\u6784\u5efa\u652f\u6301 PDF\/Word \u6587\u6863\u8bed\u4e49\u68c0\u7d22\u7684\u667a\u80fd\u52a9\u624b<br \/>\u2022 \u533b\u7597\u5065\u5eb7\u54a8\u8be2\uff1a\u57fa\u4e8e\u4e13\u4e1a\u533b\u5b66\u6587\u732e\u63d0\u4f9b\u4e2a\u6027\u5316\u5065\u5eb7\u5efa\u8bae<br \/>\u2022 \u591a\u6a21\u6001\u5ba2\u670d\u7cfb\u7edf\uff1a\u7ed3\u5408 Qwen \u7684\u591a\u6a21\u6001\u80fd\u529b\uff0c\u5904\u7406\u56fe\u6587\u6df7\u5408\u54a8\u8be2<br \/>\u901a\u8fc7\u8be5\u65b9\u6848\uff0c\u5f00\u53d1\u8005\u53ef\u5728RDS\u63a7\u5236\u53f0\u5feb\u901f\u5b8c\u6210\u4ece\u6570\u636e\u51c6\u5907\u5230\u5e94\u7528\u90e8\u7f72\u7684\u5168\u6d41\u7a0b\uff0c\u76f8\u8f83\u4f20\u7edf\u5f00\u53d1\u6a21\u5f0f\u6548\u7387\u6709\u5927\u5e45\u5ea6\u63d0\u5347\u3002<\/p>\n<h3>\u64cd\u4f5c\u6b65\u9aa4<\/h3>\n<ol>\n<li>\u767b\u5f55\u4e91\u6570\u636e\u5e93RDS\u63a7\u5236\u53f0\uff0c\u521b\u5efa RDS Supabase\u3002<\/li>\n<li>\u5b89\u88c5vector\u63d2\u4ef6\u3001\u5efa\u8868\u3001\u8bbe\u51fd\u6570\uff0c\u4f7fpg\u62e5\u6709\u5904\u7406\u5411\u91cf\u7684\u80fd\u529b<\/li>\n<\/ol>\n<pre><code>-- Enable the pgvector extension to work with embedding vectors\ncreate extension if not exists vector;\n-- Create a table to store your documents\ncreate table\n  documents (\n    id uuid primary key,\n    content text, -- corresponds to Document.pageContent\n    metadata jsonb, -- corresponds to Document.metadata\n    embedding vector (1536) -- 1536 works for OpenAI embeddings, change if needed\n  );\n-- Create a function to search for documents\ncreate function match_documents (\n  query_embedding vector (1536),\n  filter jsonb default '{}'\n) returns table (\n  id uuid,\n  content text,\n  metadata jsonb,\n  similarity float\n) language plpgsql as $$\n#variable_conflict use_column\nbegin\n  return query\n  select\n    id,\n    content,\n    metadata,\n    1 - (documents.embedding &lt;=&gt; query_embedding) as similarity\n  from documents\n  where metadata @&gt; filter\n  order by documents.embedding &lt;=&gt; query_embedding;\nend;\n$$;<\/code><\/pre>\n<ol start=\"3\">\n<li>\u51c6\u5907\u73af\u5883\u53d8\u91cf: DASHSCOPE_API_KEY\u3001SUPABASE_URL\u3001SUPABASE_SERVICE_KEY\u3002<\/li>\n<\/ol>\n<pre><code>DASHSCOPE_API_KEY = &quot;sk-*****&quot;\nSUPABASE_URL = &quot;http:\/\/*.*.*.*:*&quot;\nSUPABASE_SERVICE_KEY = &quot;eyJhbGc****BBNWN8Bu4GE&quot;<\/code><\/pre>\n<ol start=\"4\">\n<li>\u51c6\u5907RAG\u6750\u6599\uff0c\u7f16\u5199\u4ee3\u7801\uff0c\u5c06\u6750\u6599\u8fdb\u884cEmbedding\uff08\u4f7f\u7528DashScope Embedding\uff09<br \/> \u5c06documents\/ \u76ee\u5f55\u4e0b\u7684pdf\u6587\u4ef6\u8fdb\u884cembedding\u5b58\u5165Supabase<\/li>\n<\/ol>\n<pre><code>import os\nfrom dotenv import load_dotenv\n# import langchain\nfrom langchain_community.document_loaders import PyPDFDirectoryLoader\nfrom langchain_text_splitters import RecursiveCharacterTextSplitter\nfrom langchain_community.vectorstores import SupabaseVectorStore\nfrom langchain_community.embeddings.dashscope import DashScopeEmbeddings\n# import supabase\nfrom supabase import create_client, Client\n# \u52a0\u8f7d\u73af\u5883\u53d8\u91cf\nload_dotenv()\n# \u83b7\u53d6\u914d\u7f6e\n# supabase_url = os.environ.get(&quot;SUPABASE_URL&quot;) \n# supabase_key = os.environ.get(&quot;SUPABASE_SERVICE_KEY&quot;)\n# \u7b80\u5316\u521d\u59cb\u5316\nsupabase: Client = create_client(supabase_url, supabase_key)\n# initiate embeddings model\nembeddings = DashScopeEmbeddings(model=&quot;text-embedding-v2&quot;, dashscope_api_key=os.environ.get(&quot;DASHSCOPE_API_KEY&quot;))\n# load pdf docs from folder 'documents'\nloader = PyPDFDirectoryLoader(&quot;documents&quot;)\n# split the documents in multiple chunks\ndocuments = loader.load()\ntext_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100)\ndocs = text_splitter.split_documents(documents)\n# store chunks in vector store\nvector_store = SupabaseVectorStore.from_documents(\n    docs,\n    embeddings,\n    client=supabase,\n    table_name=&quot;documents&quot;,\n    query_name=&quot;match_documents&quot;,\n    chunk_size=1000,\n)<\/code><\/pre>\n<ol start=\"5\">\n<li>\u6784\u5efaAgentic RAG\uff0c\u8fdb\u884c\u5355\u6b21\u5bf9\u8bdd\uff08\u4f7f\u7528Qwen\u4f5c\u4e3a\u5bf9\u8bddLLM\uff09<\/li>\n<\/ol>\n<pre><code># import basics\nimport os\nfrom dotenv import load_dotenv\nfrom langchain.agents import AgentExecutor\nfrom langchain.agents import create_tool_calling_agent\nfrom langchain_community.vectorstores import SupabaseVectorStore\nfrom langchain import hub\nfrom supabase.client import Client, create_client\nfrom langchain_core.tools import tool\nfrom langchain_community.embeddings.dashscope import DashScopeEmbeddings\nfrom langchain_community.chat_models.tongyi import ChatTongyi\n# load environment variables\nload_dotenv()  \n# initiate supabase database\nsupabase_url = os.environ.get(&quot;SUPABASE_URL&quot;)\nsupabase_key = os.environ.get(&quot;SUPABASE_SERVICE_KEY&quot;)\nsupabase: Client = create_client(supabase_url, supabase_key)\n# initiate embeddings model\n# embeddings = OpenAIEmbed dings(model=&quot;text-embedding-3-small&quot;)\nembeddings = DashScopeEmbeddings(model=&quot;text-embedding-v2&quot;, dashscope_api_key=os.environ.get(&quot;DASHSCOPE_API_KEY&quot;))\n# initiate vector store\nvector_store = SupabaseVectorStore(\n    embedding=embeddings,\n    client=supabase,\n    table_name=&quot;documents&quot;,\n    query_name=&quot;match_documents&quot;,\n)\n# initiate large language model (temperature = 0)\n# llm = ChatOpenAI(temperature=0)\nllm = ChatTongyi(streaming=True)\n# fetch the prompt from the prompt hub\nprompt = hub.pull(&quot;hwchase17\/openai-functions-agent&quot;)\n# create the tools\n@tool(response_format=&quot;content_and_artifact&quot;)\ndef retrieve(query: str):\n    &quot;&quot;&quot;Retrieve information related to a query.&quot;&quot;&quot;\n    retrieved_docs = vector_store.similarity_search(query, k=2)\n    serialized = &quot;\/n\/n&quot;.join(\n        (f&quot;Source: {doc.metadata}\/n&quot; f&quot;Content: {doc.page_content}&quot;)\n        for doc in retrieved_docs\n    )\n    return serialized, retrieved_docs\n# combine the tools and provide to the llm\ntools = [retrieve]\nagent = create_tool_calling_agent(llm, tools, prompt)\n# create the agent executor\nagent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)\n# invoke the agent\nresponse = agent_executor.invoke({&quot;input&quot;: &quot;why is agentic rag better than naive rag?&quot;})\n# put the result on the screen\nprint(response[&quot;output&quot;])<\/code><\/pre>\n<ol start=\"6\">\n<li>\u4f7f\u7528streamlit\u7ef4\u62a4\u4f1a\u8bdd\u72b6\u6001\uff0c\u5728\u524d\u7aef\u8fdb\u884c\u591a\u8f6e\u5bf9\u8bdd<\/li>\n<\/ol>\n<h2>\u603b\u7ed3<\/h2>\n<p>\u901a\u8fc7\u963f\u91cc\u4e91RDS\u4e0eSupabase\u7684\u6df1\u5ea6\u878d\u5408\uff0c\u5f00\u53d1\u8005\u5c06\u80fd\u4ee5\u66f4\u4f4e\u6210\u672c\u3001\u66f4\u9ad8\u6548\u7387\u5730\u6784\u5efa\u4e0b\u4e00\u4ee3AI\u5e94\u7528\uff0c\u771f\u6b63\u5b9e\u73b0&#8221;\u4ee3\u7801\u5373\u57fa\u7840\u8bbe\u65bd&#8221;\u7684\u5f00\u53d1\u613f\u666f\u3002<br \/>\u5bf9 RDS Supbase \u611f\u5174\u8da3\uff0c\u6b22\u8fce\u9489\u9489\u641c\u7d22\u7fa4\u53f7\uff1a103525002795 \u52a0\u5165 RDS Supabase \u9489\u9489\u6280\u672f\u4ea4\u6d41\u7fa4<\/p>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000047188028\">https:\/\/segmentfault.com\/a\/1190000047188028<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4f5c\u8005\uff1a\u65e5\u8fd1 \u6728\u4fe1 \u665f\u4f1f \u524d\u8a00 \u4e91\u6570\u636e\u5e93 RDS PostgreSQL\u5168\u6258\u7ba1Supabase\u670d\u52a1\uff0c\u4e3a\u5ba2\u6237\u63d0\u4f9bAI [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10020957","post","type-post","status-publish","format-standard","hentry","category-share"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10020957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10020957"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10020957\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10020957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10020957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10020957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}