我的钱花在拼写错误的名字上。我在错误消息中注意到您有
OmniCloud_App_accounts
OmniCloud_App_user
第二个表使用单数。没有第二个这样的表是偶然的:
OmniCloud_App_users
此外,在 PostgreSQL 中使用混合大小写标识符在 SO 上也是一个很好的声誉来源。它迟早会咬你。这种愚蠢行为的受害者是这里的常客。任何具有此名称的表都可能 - 并且您忘记了双引号"OmniCloud_App_user"
某处?
omnicloud_app_user
要么是这样,要么是保存用户的事务尚未提交。您是否可以只创建用户(还没有帐户)并检查它是否最终位于表中的正确数据库中并具有正确的 ID?
编辑:诊断问题的工具
If you know正在创建用户,那么问题是:外键是否
约束user_id_refs_id_468fbcec324e93d2
看看找对地方了吗?同一个数据库?相同的架构?同一张桌子?
要找出数据库中存在哪些表,请尝试以下查询(如果您有必要的权限):
SELECT n.nspname AS schema_name
,c.relname AS table_name
,c.relhastriggers
,c.reltuples
FROM pg_catalog.pg_class c
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
WHERE c.relname ~~* '%user%'
AND c.relkind = 'r'
AND nspname <> 'pg_catalog';
显示名称中包含“user”的所有模式中的所有表,不区分大小写。另外,如果表有触发器(could导致你的问题)以及其中有多少行(估计由ANALYZE
)。可能会给你一个线索...
您还可以使用元命令\d
标准命令行客户端(交互式终端)psql http://www.postgresql.org/docs/current/static/app-psql.html.
我将运行一个测试用例并让 postgres 服务器记录它得到的所有内容。为此目的设置此参数:
set log_statement = 'all';
手册关于日志记录参数 http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html.
log_statement(枚举)
控制记录哪些 SQL 语句。有效值为 none(关闭)、ddl、mod 和 all(所有语句)。
手册上如何设置参数 http://www.postgresql.org/docs/current/interactive/config-setting.html.