У меня есть устаревшая база данных PostgreSQL, которая имеет единую модель, разделенную на две таблицы с взаимно однозначным сопоставлением между ними.
CREATE TABLE auth_user (
id SERIAL,
username VARCHAR(30),
email VARCHAR(75),
password VARCHAR(64),
first_name VARCHAR(75),
last_name VARCHAR(75)
)
CREATE TABLE user_profile (
user_id INTEGER REFERENCES auth_User.id,
phone VARCHAR(32)
)
К сожалению, я не могу изменить структуру базы данных.
Я хочу использовать это как единую модель Sequel. Получение данных из базы данных работает как положено:
class User < Sequel::Model
end
# Variant 1: using LEFT JOIN
#User.set_dataset DB[:auth_user].left_join(:user_profile, :user_id => :id)
# Variant 2: using two FROM tables
User.set_dataset DB[:auth_user, :user_profile]\
.where(:auth_user__id => :user_profile__user_id)
user = User[:username => "root"] # This works.
Однако сохранение модели не удается:
user.set :first_name => "John"
user.save # This fails.
Если я использую сначала Вариант набора данных (с left_join
) Я получаю сообщение об ошибке «Требуется несколько таблиц FROM при обновлении/удалении набора данных с помощью JOINs
». Если я использую второй вариант, он все равно не работает: « PG::Error: ОШИБКА: столбец "телефон" отношения "auth_user" не существует СТРОКА 1: ..."email" = (скрытый) "пароль" = '!', "телефон"...
"
Есть ли способ заставить Sequel беспрепятственно выполнять два оператора UPDATE? (Тот же вопрос относится и к операторам INSERT).