Как вставить ссылку на UUID из другой таблицы в PostgreSQL? - PullRequest
0 голосов
/ 29 августа 2018

Я учусь использовать Sequelize для использования с базой данных PostgreSQL. Все следующее происходит на dev. среда. Это произошло, когда я вручную пытался вставить данные в мои таблицы, чтобы проверить правильность настройки через Sequelize, проверить, не прошли ли модульные тесты и т. Д.

Я создал две таблицы с моделями Sequelize: User и Publication. Обе эти таблицы генерируют UUIDv4. Я связал пользователя hasMany Публикации и пользователя публикации belongsTo (вы можете ссылаться на дополнительную информацию).

В моей оболочке psql я вставил следующую запись в свою таблицу User (остальные данные вырезаны для краткости):

|                   id                   |  firstName | lastName  | ..| 
|----------------------------------------|------------|-----------|---|
|  8c878e6f-ee13-4a37-a208-7510c2638944  |   Aiz      |    ....   |...|

Теперь я пытаюсь вставить запись в мою таблицу публикаций, ссылаясь на моего недавно созданного пользователя выше. Вот что я ввел в оболочку:

INSERT INTO "Publications"("title", "fileLocation", ..., "userId")VALUES('How to Pasta', 'www.pasta.com', ..., 8c878e6f-ee13-4a37-a208-7510c2638944);

Сбой, и я получаю следующую ошибку:

ERROR:  syntax error at or near "c878e6f"
LINE 1: ...8c878e6f-ee...

(указывает на второй символ на терминале в справочнике LINE 1 - 'c').

Что здесь не так? Должны ли мы вводить UUID по-другому, если мы хотим сделать это вручную в psql? Вставляем ли мы указанный UUID как строку? Есть ли правильный путь, который я упускаю из моих собственных исследований?


Дополнительная информация, если это поможет:

Из моих моделей:

Publication.associate = function(models) {
  // associations can be defined here
  Publication.belongsTo(models.User, {
    foreignKey: "userId" 
  });
};

и

User.associate = function(models) {
  // associations can be defined here
  User.hasMany(models.Publication, {
    foreignKey: "userId",
    as: "publications"
  });
};

Вот как я определил userId в публикации:

userId: {
  type: DataTypes.UUID,
  references: {
    model: "User",
    key: "id",
    as: "userId"
  }
}

Если оно чего-то стоит, мой (primaryKey) id на обеих моделях равен type: DataTypes.UUID, defaultValue: DataTypes.UUIDV4 (я не знаю, является ли это проблемой).

1 Ответ

0 голосов
/ 29 августа 2018

окружите ваш uuid апострофами (напишите его в виде строки), и pg преобразует его в uuid

Не обязательно начинать и заканчивать строку с помощью {}

Например

INSERT INTO "Publications"("title", "fileLocation", ..., "userId")VALUES('How to Pasta', 'www.pasta.com', ..., '8c878e6f-ee13-4a37-a208-7510c2638944');

Или

INSERT INTO "Publications"("title", "fileLocation", ..., "userId")VALUES('How to Pasta', 'www.pasta.com', ..., '{8c878e6f-ee13-4a37-a208-7510c2638944}');

Источник (я не много работаю с pgsql, поэтому я нашел другого человека, который написал какой-то работающий pgsql. Если это не сработает, дайте мне знать, и я удалю ответ): PostgreSQL 9.3: Как вставить UUID верхнего регистра в таблицу

...