我是 Postgresql 的新手,我试图创建这个表,实际上只是在一个类似的 mysql 表之后。但是我不断收到 ENUM() 这个错误 下面是创建表结构的查询:
CREATE TABLE IF NOT EXISTS gkb_users (
id bigint NOT NULL,
userid character varying(50) NOT NULL DEFAULT '',
password character varying(50) NOT NULL DEFAULT '',
firstname text NOT NULL,
middlename text NOT NULL,
lastname text NOT NULL,
email character varying(100) NOT NULL DEFAULT '',
gender enum('Male','Female') NOT NULL,
dob date NOT NULL,
mobile character varying(10) NOT NULL DEFAULT '',
telephone character varying(15) NOT NULL DEFAULT '',
city character varying(50) NOT NULL DEFAULT '',
address text NOT NULL,
shippingaddress text NOT NULL,
PIN character varying(255) NOT NULL,
shipping_PIN character varying(255) NOT NULL,
area character varying(255) NOT NULL,
shipping_area character varying(255) NOT NULL,
previouscart text NOT NULL,
updatedon timestamp(0) NOT NULL,
is_deleted enum('0','1') NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。谢谢
ENUM 是用户定义的数据类型。您可以使用 CREATE TYPE 语法来创建枚举,然后在架构中使用它来创建表。
CREATE TYPE your_enum2 AS ENUM('0','1');
CREATE TYPE your_enum1 AS ENUM('male','female');
Run Code Online (Sandbox Code Playgroud)
紧接着是 CREATE TABLE 语句,
CREATE TABLE IF NOT EXISTS gkb_users (
id bigint NOT NULL,
userid character varying(50) NOT NULL DEFAULT '',
password character varying(50) NOT NULL DEFAULT '',
firstname text NOT NULL,
middlename text NOT NULL,
lastname text NOT NULL,
email character varying(100) NOT NULL DEFAULT '',
gender your_enum1 NOT NULL,
dob date NOT NULL,
mobile character varying(10) NOT NULL DEFAULT '',
telephone character varying(15) NOT NULL DEFAULT '',
city character varying(50) NOT NULL DEFAULT '',
address text NOT NULL,
shippingaddress text NOT NULL,
PIN character varying(255) NOT NULL,
shipping_PIN character varying(255) NOT NULL,
area character varying(255) NOT NULL,
shipping_area character varying(255) NOT NULL,
previouscart text NOT NULL,
updatedon timestamp(0) NOT NULL,
is_deleted your_enum2 NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
有关枚举创建和使用的更多信息,请参阅 postgresql 文档https://www.postgresql.org/docs/current/static/datatype-enum.html。
小智 5
为此,您不需要枚举(我个人认为永远不需要枚举 - 但这不是主题)。
您应该将其实现为检查约束:
CREATE TABLE IF NOT EXISTS gkb_users
(
id bigint NOT NULL,
userid varchar(50) NOT NULL DEFAULT '',
password varchar(50) NOT NULL DEFAULT '',
firstname text NOT NULL,
middlename text NOT NULL,
lastname text NOT NULL,
email varchar(100) NOT NULL DEFAULT '',
gender text NOT NULL,
dob date NOT NULL,
mobile varchar(10) NOT NULL DEFAULT '',
telephone varchar(15) NOT NULL DEFAULT '',
city varchar(50) NOT NULL DEFAULT '',
address text NOT NULL,
shippingaddress text NOT NULL,
pin varchar(255) NOT NULL,
shipping_pin varchar(255) NOT NULL,
area varchar(255) NOT NULL,
shipping_area varchar(255) NOT NULL,
previouscart text NOT NULL,
updatedon timestamp(0) NOT NULL,
is_deleted integer NOT NULL,
constraint check_gender check (gender in ('Male', 'Female')),
constraint check_deleted flag check (is_deleted in (0,1))
)
Run Code Online (Sandbox Code Playgroud)
但是, foris_delete最好是一个合适的boolean列 - 那么您也不需要该列的检查约束。
Postgres - 与许多其他 DBMS 一样 - 在比较字符串时区分大小写。因此,由于上述约束,您将无法存储'male'到gender列中。
不相关,但是:如果您假设它varchar(255)与例如相比具有一些神奇的性能优势,varchar(300)那么您就错了。varchar 列的最大长度不会影响存储值时的性能或空间要求。
| 归档时间: |
|
| 查看次数: |
3745 次 |
| 最近记录: |