Хобрук: Ваш путь к мастерству в программировании

Разъяснение ошибки создания таблицы на CockroachDB

У меня есть структура, которая использует 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,

Я хотел бы понять проблему, с которой я столкнулся. Спасибо

04.09.2019

  • У вас есть запятая в конце последней строки вашего запроса. Попробуйте удалить это. 04.09.2019
  • Нет: запрос правильный, запятая выводится при появлении сообщения об ошибке. Вы могли заметить, что второй раздел кода является извлечением из первого. 04.09.2019
  • Какую версию CockroachDB вы используете? Выполнение приведенного выше оператора на v19.1.4 (последняя стабильная версия) работает для меня, если accounts.account и scopes.scope имеют уникальные ограничения. 11.09.2019
  • Спасибо, что попробовали Марка, я использовал версию, упакованную стандартно в контейнерах, опубликованных самим тараканом. Я должен проверить, кто это! 11.09.2019
  • Образ докера cockroachdb/cockroach:latest всегда указывает на последнюю стабильную версию, в настоящее время v19.1.4. Вы можете проверить версию узла, запустив SELECT version();. 11.09.2019
  • Мне нужно запустить его снова, сейчас я перешел на psql, чтобы не останавливать разработку моего проекта. Я свяжусь с вами, как только закончу! 11.09.2019

Ответы:


1

Вы хотите указать свои FOREIGN KEY ссылки в определении столбца вместо отдельного поля CONSTRAINT:

CREATE TABLE dids (
    scope VARCHAR(25) NOT NULL,
    name VARCHAR(250) NOT NULL,
    account VARCHAR(25) REFERENCES accounts (account) ON DELETE CASCADE,
...
);

См.: https://www.cockreachlabs.com/docs/stable/foreign-key.html

15.12.2020
Новые материалы

Как свинг-трейдеры могут использовать ИИ для больших выигрышей
По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

Как построить любой стол
Я разработчик программного обеспечения. Я люблю делать вещи и всегда любил. Для меня программирование всегда было способом создавать вещи, используя только компьютер и мое воображение...

Обзор: Машинное обучение: классификация
Только что закончил третий курс курса 4 часть специализации по машинному обучению . Как и второй курс, он был посвящен низкоуровневой работе алгоритмов машинного обучения. Что касается..

Разработка расширений Qlik Sense с qExt
Использование современных инструментов веб-разработки для разработки крутых расширений Вы когда-нибудь хотели кнопку для установки переменной в приложении Qlik Sense? Когда-нибудь просили..

React Hooks: основы деструктуризации массива
Kent C. Dodds написал классный пост о том, как грядущая функция React под названием Hooks работает на капоте. Предстоящий хук React useState основан на деструктурировании массива, давайте..

Пакеты R, используемые в Tesla
Добро пожаловать обратно! R — очень популярный язык программирования, используемый множеством компаний, включая Tesla! Итак, давайте взглянем на некоторые пакеты R, которые использует Tesla...

Сокращение и слияние токенов для эффективных моделей VL: обзор
Часто в задачах, связанных с компьютерным зрением и НЛП, вычислительно затратная и требующая большого объема памяти обработка становится препятствием для более быстрого логического вывода модели, а..