【问题标题】:ENUM and types creation in SQLite在 SQLite 中创建 ENUM 和类型
【发布时间】:2013-11-25 08:33:26
【问题描述】:

我必须将在 Postgres 中创建数据库的代码转换为 SQLite。我被卡住了,因为 SQLite 不允许创建枚举或创建类型。我正在寻找解决这个问题的方法。

例如,假设我们在 Postgres 中有:

CREATE TYPE AckStatusEnum AS ENUM (
'ACKNOWLEDGED','NOT_ACKNOWLEDGED','ERROR_RECEIVED','NOT_SENT'
);

CREATE TABLE ACK_EVENT(
...
    ACK_STATUS AckStatusEnum,
...
);

CREATE TYPE aggr_type AS (
...
    severity alertseverityenum ,
...
);

“...”代表其他行。如何将其转换为 SQLite?如何创建可用于表和其他类型的 ENUM 类型?除了如何模拟这种类型的创建(也应该可以用于表和类型)?

【问题讨论】:

  • 使用简单的text 列。

标签: sql sqlite postgresql enums


【解决方案1】:

SQLite 不支持定义数据类型。事实上,SQLite 甚至不强制列的数据类型。

如果您确实需要限制值,我建议使用FOREIGN KEY,如下所示:

CREATE TABLE AckStatusEnum (id INTEGER PRIMARY KEY AUTOINCREMENT, AckStatusEnum TEXT);
INSERT INTO AckStatusEnum(AckStatusEnum) VALUES('ACKNOWLEDGED'), ('NOT_ACKNOWLEDGED'), ('ERROR_RECEIVED'), ('NOT_SENT');

CREATE TABLE ACK_EVENT(
    ...
    ACK_STATUS REFERENCES AckStatusEnum(id),
    ...
);

【讨论】:

    猜你喜欢
    • 2011-07-15
    • 2010-11-30
    • 2022-01-14
    • 1970-01-01
    • 2021-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多