postgresql 为什么我在这个简单的INSERT查询中得到一个错误?

0qx6xfy6  于 2023-05-06  发布在  PostgreSQL
关注(0)|答案(1)|浏览(192)

在Win 10上使用Postgres 14。运行这个简单的查询:

mydata=# SELECT * FROM contact_test;
 cntct_id | fname | lname | email | street | unit | town | state | post_code
----------+-------+-------+-------+--------+------+------+-------+-----------
(0 rows)

mydata=# INSERT INTO contact_test (fname, lname, email) VALUES ('Robert', 'Johnson', 'rjohnsonn@gmail.com');
ERROR:  malformed array literal: "Robert"
LINE 1: ...T INTO contact_test (fname, lname, email) VALUES ('Robert', ...
                                                             ^
DETAIL:  Array value must start with "{" or dimension information.

我在这里查看了语法:

这个示例基本上与我的语句相同:

INSERT INTO products (product_no, name, price) VALUES
(1, 'Cheese', 9.99);

我错过了什么?

j5fpnvbx

j5fpnvbx1#

给定在注解中添加的表定义,以下语句将起作用:

INSERT INTO contact_test (fname, lname, email) VALUES ('{R}', '{J}', 'r');

fnamelnamearray 类型,因此需要传递 array literals(或 array constructors)。示例:

  • PostgreSQL INSERT到枚举数组中
  • 对于非整数,错误“整数输入语法无效”?
  • PostgreSQL中的IN与ANY运算符

但是你的表定义当然是无稽之谈。您不希望使用内部枚举类型"char",因为它只包含一个ASCII字母。您需要varchartext。我也不相信你想要数组类型。("char"[]"char"的数组。)
相应地修正你的表定义!比如:

CREATE TABLE contact_test (
  cntct_id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY
, fname text NOT NULL
, lname text NOT NULL
, email text NOT NULL
);

那么你原来的INSERT语句就可以工作了。
参见:

  • 使用数据类型“text”存储字符串有什么缺点吗?

相关问题