Почему составной первичный ключ не добавляется как внешний ключ в psql (приложение rails)? - PullRequest
2 голосов
/ 13 июля 2020

Я использую гем activerecord-multi-tenant для реализации MultiTenancy в моем проекте rails.

Следуя инструкциям здесь

У меня есть модель User, Attendance Модель, которая принадлежит User и Company в качестве арендатора.

Пока я обновляю primary key(id) пользователя до composite key(id, company_id), он обновляется.

Но когда я пытаюсь для обновления внешнего ключа в моделях Attendance он только пытается принять user_id в качестве fk и ищет его уникальное ограничение.

Вот используемые мной команды -

execute 'ALTER TABLE users DROP CONSTRAINT users_pkey;'
execute 'ALTER TABLE users ADD CONSTRAINT users_pkey PRIMARY KEY(id, company_id);'

execute 'ALTER TABLE attendances DROP CONSTRAINT attendances_pkey;'
execute 'ALTER TABLE attendances ADD CONSTRAINT attendances_pkey PRIMARY KEY (id, company_id);'
execute 'ALTER TABLE attendances ADD FOREIGN KEY(user_id, company_id) REFERENCES users(id, company_id);'

Ошибка, которую я получаю при schema:load

ActiveRecord::StatementInvalid: PG::InvalidForeignKey: ERROR:  there is no unique constraint matching given keys for referenced table "users"
: ALTER TABLE "attendances" ADD CONSTRAINT "attendances_user_id_company_id_fkey"
FOREIGN KEY ("user_id")
  REFERENCES "users" ("id")

...