是-PostgreSQL版本11中维表的代码为否

问题描述

希望一切都好!我对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
);

您的插入语法不正确,因为:

  1. 未加引号的Framed变为framed,然后与"Framed"不匹配
  2. 列列表需要引用表中的列
  3. 三行都不是完整的
  4. yesno的值必须用引号引起来
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列,然后在选定的视图或视图中将其重新存在。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...