Sql 关于CockroachDB表创建错误的澄清

Sql 关于CockroachDB表创建错误的澄清,sql,psycopg2,cockroachdb,Sql,Psycopg2,Cockroachdb,我有一个使用SQLalchemy连接到SQL数据库的框架。 我正试图让它与CockroachDB一起工作,即使官方支持仅限于MySQL、Postgres或Oracle 我正在执行的操作在支持的SQL数据库中完美地工作。 使用3节点CockroachDB集群并不是那么简单 以下SQL操作出现问题: 创建表DID( 作用域VARCHAR(25)不为空, 名称VARCHAR(250)不为空, 账户VARCHAR(25), did_类型VARCHAR(1), 是开布尔型, 单调布尔值默认值“0”, 隐藏

我有一个使用SQLalchemy连接到SQL数据库的框架。 我正试图让它与CockroachDB一起工作,即使官方支持仅限于MySQL、Postgres或Oracle

我正在执行的操作在支持的SQL数据库中完美地工作。 使用3节点CockroachDB集群并不是那么简单

以下SQL操作出现问题:

创建表DID(
作用域VARCHAR(25)不为空,
名称VARCHAR(250)不为空,
账户VARCHAR(25),
did_类型VARCHAR(1),
是开布尔型,
单调布尔值默认值“0”,
隐藏布尔值默认值“0”,
过时的布尔值默认值“0”,
完全布尔,
是新的布尔值默认值“1”,
可用性VARCHAR(1),
抑制的布尔值默认值“0”,
字节BIGINT,
长度BIGINT,
md5 VARCHAR(32),
adler32 VARCHAR(8),
在没有时区的时间戳处过期,
清除布尔值默认值“1”,
在时间戳处删除\u,不带时区,
事件BIGINT,
guid字符(32),
VARCHAR项目(50),
数据类型VARCHAR(50),
运行整数,
流名称VARCHAR(70),
生产步骤VARCHAR(50),
版本VARCHAR(50),
瓦查尔战役(50),
任务id为整数,
panda_id整数,
lumiblocknr整数,
种源VARCHAR(2),
phys_group VARCHAR(25),
瞬态布尔值默认值“0”,
在没有时区的时间戳访问\u,
在没有时区的时间戳关闭\u,
不带时区的时间戳下线,
是布尔值,
成分布尔,
访问\u cnt整数,
在不带时区的时间戳处更新了_,
在不带时区的时间戳处创建_,
约束“DIDS_PK”主键(范围、名称),
约束“DIDS_ACCOUNT_FK”外键(ACCOUNT)引用删除级联上的accounts(ACCOUNT),
约束“DIDS_SCOPE_FK”外键(SCOPE)引用SCOPE(SCOPE),
约束“DIDS_单调”检查(单调不为空),
约束“DIDS_Observe_NN”检查(Observe不为空),
约束“DIDS_SUPP_NN”检查(抑制不为空),
约束“存款账户”检查(账户不为空),
约束“DIDS\u清除\u副本\u NN”检查(清除\u副本不为空),
约束“DIDS_CREATED_NN”检查(CREATED_AT不为空),
约束“DIDS_UPDATED_NN”检查(UPDATED_AT不为空),
约束“DIDS_TYPE_CHK”检查(did_TYPE('A','C','D','F','Y','X','Z')),
约束“DIDS\U可用性\U CHK”检查(在('A','D','L')中的可用性)
)
并最终导致以下错误:

无效语法:忽略语句:在“级联”处或附近未实现
详细信息:源SQL:
创建表DID(
作用域VARCHAR(25)不为空,
名称VARCHAR(250)不为空,
账户VARCHAR(25),
did_类型VARCHAR(1),
是开布尔型,
单调布尔值默认值“0”,
隐藏布尔值默认值“0”,
过时的布尔值默认值“0”,
完全布尔,
是新的布尔值默认值“1”,
可用性VARCHAR(1),
抑制的布尔值默认值“0”,
字节BIGINT,
长度BIGINT,
md5 VARCHAR(32),
adler32 VARCHAR(8),
在没有时区的时间戳处过期,
清除布尔值默认值“1”,
在时间戳处删除\u,不带时区,
事件BIGINT,
guid字符(32),
VARCHAR项目(50),
数据类型VARCHAR(50),
运行整数,
流名称VARCHAR(70),
生产步骤VARCHAR(50),
版本VARCHAR(50),
瓦查尔战役(50),
任务id为整数,
panda_id整数,
lumiblocknr整数,
种源VARCHAR(2),
phys_group VARCHAR(25),
瞬态布尔值默认值“0”,
在没有时区的时间戳访问\u,
在没有时区的时间戳关闭\u,
不带时区的时间戳下线,
是布尔值,
成分布尔,
访问\u cnt整数,
在不带时区的时间戳处更新了_,
在不带时区的时间戳处创建_,
约束“DIDS_PK”主键(范围、名称),
约束“DIDS_ACCOUNT_FK”外键(ACCOUNT)引用删除级联上的accounts(ACCOUNT),
我想了解我面临的问题。
谢谢

您想提及与列定义内联的
外键
引用,而不是单独的约束字段:

创建表DID(
作用域VARCHAR(25)不为空,
名称VARCHAR(250)不为空,
account VARCHAR(25)在删除级联时引用accounts(account),
...
);

请参阅:

在查询的最后一行末尾有一个逗号。请尝试删除该逗号。否:查询是正确的,错误消息触发时会打印悬空的逗号。您可能会注意到,第二个代码段是第一个代码段的摘录。您使用的是哪一版本的CockroachDB?在上运行上述语句(最新版本)只要
accounts.account
scopes.scope
有唯一的限制,我就可以使用。谢谢你尝试Mark,我使用的是cockroach自己发布的容器中作为标准包装的版本。我必须检查哪一个是它。
cockroachdb/cockroach:latest
docker图像总是指向最新的刺le版本,当前为v19.1.4。您可以通过运行
SELECT version();
来检查节点的版本。