【发布时间】:2020-01-07 13:39:23
【问题描述】:
我有一个使用 SQLalchemy 连接到 SQL 数据库的框架。 我试图让它与 CockroachDB 一起工作,即使官方支持仅限于 MySQL、Postgres 或 Oracle。
我正在执行的操作可以完美地使用受支持的 SQL 数据库。 使用 3 节点 CockroachDB 集群并非易事。
问题出现在以下 SQL 操作中:
CREATE TABLE dids (
scope VARCHAR(25) NOT NULL,
name VARCHAR(250) NOT NULL,
account VARCHAR(25),
did_type VARCHAR(1),
is_open BOOLEAN,
monotonic BOOLEAN DEFAULT '0',
hidden BOOLEAN DEFAULT '0',
obsolete BOOLEAN DEFAULT '0',
complete BOOLEAN,
is_new BOOLEAN DEFAULT '1',
availability VARCHAR(1),
suppressed BOOLEAN DEFAULT '0',
bytes BIGINT,
length BIGINT,
md5 VARCHAR(32),
adler32 VARCHAR(8),
expired_at TIMESTAMP WITHOUT TIME ZONE,
purge_replicas BOOLEAN DEFAULT '1',
deleted_at TIMESTAMP WITHOUT TIME ZONE,
events BIGINT,
guid CHAR(32),
project VARCHAR(50),
datatype VARCHAR(50),
run_number INTEGER,
stream_name VARCHAR(70),
prod_step VARCHAR(50),
version VARCHAR(50),
campaign VARCHAR(50),
task_id INTEGER,
panda_id INTEGER,
lumiblocknr INTEGER,
provenance VARCHAR(2),
phys_group VARCHAR(25),
transient BOOLEAN DEFAULT '0',
accessed_at TIMESTAMP WITHOUT TIME ZONE,
closed_at TIMESTAMP WITHOUT TIME ZONE,
eol_at TIMESTAMP WITHOUT TIME ZONE,
is_archive BOOLEAN,
constituent BOOLEAN,
access_cnt INTEGER,
updated_at TIMESTAMP WITHOUT TIME ZONE,
created_at TIMESTAMP WITHOUT TIME ZONE,
CONSTRAINT "DIDS_PK" PRIMARY KEY (scope, name),
CONSTRAINT "DIDS_ACCOUNT_FK" FOREIGN KEY(account) REFERENCES accounts (account) ON DELETE CASCADE,
CONSTRAINT "DIDS_SCOPE_FK" FOREIGN KEY(scope) REFERENCES scopes (scope),
CONSTRAINT "DIDS_MONOTONIC_NN" CHECK (MONOTONIC IS NOT NULL),
CONSTRAINT "DIDS_OBSOLETE_NN" CHECK (OBSOLETE IS NOT NULL),
CONSTRAINT "DIDS_SUPP_NN" CHECK (SUPPRESSED IS NOT NULL),
CONSTRAINT "DIDS_ACCOUNT_NN" CHECK (ACCOUNT IS NOT NULL),
CONSTRAINT "DIDS_PURGE_REPLICAS_NN" CHECK (PURGE_REPLICAS IS NOT NULL),
CONSTRAINT "DIDS_CREATED_NN" CHECK (CREATED_AT IS NOT NULL),
CONSTRAINT "DIDS_UPDATED_NN" CHECK (UPDATED_AT IS NOT NULL),
CONSTRAINT "DIDS_TYPE_CHK" CHECK (did_type IN ('A', 'C', 'D', 'F', 'Y', 'X', 'Z')),
CONSTRAINT "DIDS_AVAILABILITY_CHK" CHECK (availability IN ('A', 'D', 'L'))
)
最终出现以下错误:
invalid syntax: statement ignored: unimplemented at or near "cascade"
DETAIL: source SQL:
CREATE TABLE dids (
scope VARCHAR(25) NOT NULL,
name VARCHAR(250) NOT NULL,
account VARCHAR(25),
did_type VARCHAR(1),
is_open BOOLEAN,
monotonic BOOLEAN DEFAULT '0',
hidden BOOLEAN DEFAULT '0',
obsolete BOOLEAN DEFAULT '0',
complete BOOLEAN,
is_new BOOLEAN DEFAULT '1',
availability VARCHAR(1),
suppressed BOOLEAN DEFAULT '0',
bytes BIGINT,
length BIGINT,
md5 VARCHAR(32),
adler32 VARCHAR(8),
expired_at TIMESTAMP WITHOUT TIME ZONE,
purge_replicas BOOLEAN DEFAULT '1',
deleted_at TIMESTAMP WITHOUT TIME ZONE,
events BIGINT,
guid CHAR(32),
project VARCHAR(50),
datatype VARCHAR(50),
run_number INTEGER,
stream_name VARCHAR(70),
prod_step VARCHAR(50),
version VARCHAR(50),
campaign VARCHAR(50),
task_id INTEGER,
panda_id INTEGER,
lumiblocknr INTEGER,
provenance VARCHAR(2),
phys_group VARCHAR(25),
transient BOOLEAN DEFAULT '0',
accessed_at TIMESTAMP WITHOUT TIME ZONE,
closed_at TIMESTAMP WITHOUT TIME ZONE,
eol_at TIMESTAMP WITHOUT TIME ZONE,
is_archive BOOLEAN,
constituent BOOLEAN,
access_cnt INTEGER,
updated_at TIMESTAMP WITHOUT TIME ZONE,
created_at TIMESTAMP WITHOUT TIME ZONE,
CONSTRAINT "DIDS_PK" PRIMARY KEY (scope, name),
CONSTRAINT "DIDS_ACCOUNT_FK" FOREIGN KEY(account) REFERENCES accounts (account) ON DELETE CASCADE,
我想了解我面临的问题。 谢谢
【问题讨论】:
-
查询的最后一行末尾有一个逗号。尝试删除它。
-
Nope:查询正确,触发错误信息时打印悬空逗号。您可能会注意到,第二个代码部分是第一个代码部分的摘录。
-
您使用的是哪个版本的 CockroachDB?只要
accounts.account和scopes.scope具有独特的约束条件,在v19.1.4(最新稳定版)上运行上述语句即可。 -
感谢您试用 Mark,我使用的是 cockroach 自己发布的容器中标准包装的版本。我得看看是哪一个!
-
cockroachdb/cockroach:latestdocker 镜像始终指向最新的稳定版本,当前为 v19.1.4。您可以通过运行SELECT version();来检查节点的版本。
标签: sql psycopg2 cockroachdb