да- нет кода для таблицы измерений в postgresql версии 11

#postgresql #boolean

#postgresql #логическое значение

Вопрос:

надеюсь, все хорошо! Я вполне справляюсь с postgresql 11, однако по какой-то причине я не могу заставить свою систему принимать логический код для проекта. Имя таблицы оформлено в рамку, цель состоит в том, чтобы настроить набор таблиц измерений для друга-художника.

Postgresql создал код таблицы:

 
-- Table: public.Framed

-- DROP TABLE public."Framed";

CREATE TABLE public."Framed"
(
)

WITH (
    OIDS = FALSE
)
TABLESPACE pg_defau<

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;

  

Заранее спасибо за помощь. Это приветствуется
Дэйв

Ответ №1:

В вашей таблице нет столбцов

 create table framed (  -- Avoid using double-quoted names
  framed boolean,
  framed_text text
);
  

Ваш синтаксис insert неверен, потому что:

  1. Без кавычек Framed становится framed , а затем не соответствует "Framed"
  2. Список столбцов должен ссылаться на столбцы в таблице
  3. Ни одна из трех строк не завершена
  4. Значения для yes и no должны быть заключены в кавычки
 insert into Framed (framed, framed_text)  -- column list here, notice no semicolon
 values     
 (true, 'yes'),
 (false, 'no');
  

Комментарии:

1. Майк — Спасибо за помощь! Я печатал с опозданием. Наконец-то я заставил его работать, что было довольно приятно для моего старого мозга. Я действительно ценю помощь — Большое вам спасибо — Dave

Ответ №2:

Почему вы используете 2 столбца для хранения одной и той же информации. Предполагая, что @MikeOrganek точно описал вашу таблицу, вам понадобятся ограничения для обеспечения согласованности между двумя столбцами. В их нынешнем виде ничто не препятствует следующему:

 insert into Framed (framed, framed_text)   
 values (true, 'no') 
      , (false, '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. Страховщик — Спасибо, что был на связи! (брат использует для скалолазания). Ваш ответ точен — это создало бы больше данных.. Вернемся к чертежной доске! Спасибо за вашу помощь, я действительно ценю это! — Дэйв

2. Интересная ссылка. Я сам больше не лезу слишком высоко, но все равно наслаждаюсь тем немногим, что могу. Но научите взрослых управлению безопасностью восхождения, чтобы они могли брать детей на восхождения. Надеюсь, вы решите свою проблему. Если возникнут вопросы, мы будем здесь.