ошибка при вставке в таблицу, содержащую элемент compsite в postgresql

#postgresql

#postgresql

Вопрос:

я получаю эту ошибку при попытке вставить в таблицу «hotel»: ОШИБКА: не удается привести запись типа к СТРОКЕ 4 камеры: строка (массив[(250, ‘2 место’,300),(200… ^ ПОДРОБНО: Не удается преобразовать тип record[] в integer в столбце 1.

 create type chambre as(
                   numChambre INTEGER ,
                   typeChambre VARCHAR(30),
                   prix REAL);


create table hotel (
                nom VARCHAR(30),
                Adresse adresse,
                positions positions,
                Chambres chambre[],
                nbPersonnel INTEGER,
                nbEtoile INTEGER,
                telephone VARCHAR(14));         


 insert into hotel values( 'president',
                      row(26,'maraval','oran'),
                      row(27.5,136),
                      row(array[(250,'2 place',300),(200,'1 place',250), 
                      (300,'suite',700)]),
                      60,
                      4,
                      '041-45-86-28');
  

Ответ №1:

Вы не предоставили подробную информацию о позициях adresse, но, конечно, вам не понадобится ROW конструктор ни для одного из них.

Для Chambres просто приведите созданное вами выражение массива к chambre[] . Рекомендуется всегда явно указывать имена столбцов в INSERT инструкции, чтобы избежать путаницы.

 INSERT INTO hotel 
            ( 
                nom, 
                adresse, 
                positions, 
                chambres, 
                nbpersonnel, 
                nbetoile, 
                telephone 
            ) 
     VALUES 
     ( 
     'president', 
      (26,'maraval','oran'), 
      (27.5,136), 
      array[(250,'2 place',300),(200,'1 place',250),(300,'suite',700)] :: chambre[], 
      60, 
      4, 
     '041-45-86-28' 
      );
  

ДЕМОНСТРАЦИЯ