fix: connect Page Data sandbox to user PostgreSQL
Memind CI / Test, build, and release guards (pull_request) Failing after 15m29s

This commit is contained in:
john
2026-07-17 10:44:41 +08:00
parent 4d57c35b66
commit 93811f4657
8 changed files with 179 additions and 5 deletions
+18 -2
View File
@@ -134,11 +134,11 @@ load_skill → page-data-collect
```sql
CREATE TABLE IF NOT EXISTS survey_responses (
id INTEGER PRIMARY KEY AUTOINCREMENT,
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
q1_feature TEXT NOT NULL,
q2_usage TEXT NOT NULL,
q3_suggestion TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT (datetime('now', '+8 hours'))
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
```
@@ -157,6 +157,13 @@ CREATE TABLE IF NOT EXISTS survey_responses (
}
```
**数据层失败必须立即停止(fail closed)**
- `private_data_execute``private_data_register_dataset``private_data_schema/query` 任一返回连接错误、权限错误或 `isError: true` 时,禁止继续写 HTML、bind 或发布。
- 禁止声称“先准备 HTML,PG 恢复后会自动生效”;平台没有延迟补执行队列。数据库恢复后必须重新执行建表、注册、bind 和交付前自检。
- PostgreSQL 连接错误应原样报告,不得把 `/tmp/.s.PGSQL.*``ECONNREFUSED``permission denied` 解释成“稍后会自动恢复”。
- dataset 配置了 `soft_delete` 时,表必须包含 `deleted_at TIMESTAMPTZ`;配置了 `own_rows` 时,表必须包含 policy 指定的所有者字段。
### 3. 页面层:写 HTML
-`write_file` / `edit_file` 写入或更新 `public/*.html`
@@ -167,6 +174,14 @@ CREATE TABLE IF NOT EXISTS survey_responses (
<script src="/assets/page-data-client.js"></script>
```
客户端只允许调用 `page-data-client.js` 已公开的方法:`listRows``getSchema``getStats``insertRow``updateRow``deleteRow``authenticate`。删除单行使用:
```js
await client.deleteRow('dataset_name', rowId);
```
禁止发明 `softDeleteRows``deleteRows` 等不存在的方法;服务端会根据 dataset 的 `soft_delete` 授权把 `deleteRow` 转换为软删除。
- **第三方 JS 库**Chart.js、ECharts 等)禁止写 CDN `https://...`;发布页 CSP 只允许同源脚本。优先用平台预置路径,或下载到 `public/assets/` 后用相对路径引用:
```html
@@ -287,6 +302,7 @@ CREATE TABLE IF NOT EXISTS survey_responses (
3. HTML 含 `page-data-client.js`;已 bind 或发布后平台会注入 pageId
4. HTML **不含** `127.0.0.1:``/api/survey/``PLACEHOLDER_PAGE_ID`
5. 向用户说明:访客如何提交、管理员如何用口令查看记录
6. HTML 未调用 `softDeleteRows` / `deleteRows` 等客户端不存在的方法;删除使用 `deleteRow(dataset, rowId)`
## 回复格式