问题描述
希望一切都好!我对Postgresql 11相当有能力,但是由于某种原因,我无法让我的系统接受项目的布尔代码。表格名称带有边框,目的是为艺术家朋友设置一组尺寸表。
Postgresql执行了表代码:
-- Table: public.Framed
-- DROP TABLE public."Framed";
CREATE TABLE public."Framed"
(
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public."Framed"
OWNER to postgres;
COMMENT ON TABLE public."Framed"
IS 'To fill out order dimensions';
我从SQL网站复制了代码:
Insert into Framed (a Framed,b text);
insert into Framed values (true,yes);
insert into Framed values (false,no);
select* from Framed;
预先感谢您的帮助。感激不尽 戴夫
解决方法
您的表没有列
create table framed ( -- Avoid using double-quoted names
framed boolean,framed_text text
);
您的插入语法不正确,因为:
- 未加引号的
Framed
变为framed
,然后与"Framed"
不匹配 - 列列表需要引用表中的列
- 三行都不是完整的
-
yes
和no
的值必须用引号引起来
insert into Framed (framed,framed_text) -- column list here,notice no semicolon
values
(true,'yes'),(false,'no');
,
为什么要使用2列包含相同的信息。假设@MikeOrganek已正确描述了您的表,则需要约束以确保2列之间的一致性。就目前而言,没有什么可以阻止以下情况:
insert into Framed (framed,framed_text)
values (true,'no'),'yes');
类似以下内容:
alter table framed
add constraint framed_bool_text_check
check ( (framed and framed_text in ('yes','ok','1'))
or (not framed and framed_text in ('no','0'))
);
或者只是消除framed_text列,然后在选定的视图或视图中将其重新存在。