---
id: ERR-20260502-001
title: AIxC 项目数据库使用 snake_case + 多 schema，与 FFAI 不同
date: 2026-05-02
tags: [aixc, database, schema, conventions]
---

## 现象

在 AIxC UAT 数据库（`aixc-uat-postgres`，host `52.234.29.56`）上按 FFAI 习惯查询用户表，连续踩了三个坑：

```sql
-- 坑 1：表名不在 public，且不叫 "User"
SELECT ... FROM "User";
-- ERROR: relation "User" does not exist

-- 坑 2：列名不是 camelCase
SELECT "createdAt" FROM platform_iam.users;
-- ERROR: column "createdAt" does not exist

-- 坑 3：密码列不叫 password
SELECT password FROM platform_iam.users;
-- ERROR: column "password" does not exist
```

## 根因

**AIxC 与 FFAI 的数据库约定完全不同**：

| 维度 | FFAI Workspace | AIxC Workspace |
|------|----------------|----------------|
| Schema 组织 | 单 `public` schema | 按业务域多 schema：`platform_iam` / `platform_ai` / `corp_hr` / `mfg_inventory` 等 20+ 个 |
| 表名 | PascalCase（`User`、`Organization`）| snake_case 复数（`users`、`organizations`）|
| 列名 | camelCase（`createdAt`、`createdById`）| snake_case（`created_at`、`created_by_id`）|
| 密码字段 | `password` | `password_hash` |

## 正确查询方式

```sql
-- 列出所有业务 schema
\dn

-- 找用户表
SELECT schemaname, tablename FROM pg_tables WHERE tablename ILIKE '%user%';
-- → platform_iam.users

-- 看列名
\d platform_iam.users

-- 查 admin
SELECT username, email, status, created_at, updated_at, LEFT(password_hash, 12)
FROM platform_iam.users
WHERE username = 'itadmin';
```

## 适用范围

任何在 AIxC 服务器（UAT `52.234.29.56` / Prod `23.101.202.65`）上做 DB 查询的场景。不要把 FFAI 的 SQL 模板直接拿过去用——表/列/schema 全不一样。

## AIxC 初始管理员

- `init-itadmin.ts` 与 FFAI 同名同逻辑，默认密码 `Admin@2024`
- AIxC 部署时把 `INIT_ADMIN_EMAIL=itadmin@aixcrypto.ai` 环境变量传入（FFAI 默认 `itadmin@ff.com`）
- UAT 和 Prod 的 itadmin 都在 2026-04-07 创建，目前应仍为 `Admin@2024`（updated_at 偏移是 role 关联引起，不改 password_hash）

## 已知 AIxC schema（部分）

`corp_approval` / `corp_hr` / `corp_request` / `mfg_inventory` / `platform_ai` / `platform_audit` / `platform_automation` / `platform_devtracker` / `platform_feedback` / `platform_form` / `platform_iam` / `platform_knowledge` / `platform_logging` / `platform_meeting_attendance` / `platform_notify` / `platform_performance` / `platform_site_attendance` / `platform_tickets` / `robot_manager`
