У меня есть две таблицы: таблица A и таблица B, где я для таблицы B хочет добавить столбец, который ссылается на записи в таблице A
Это означает, что первая строка таблицы i для этой конкретной строки ответа столбца на в таблице А и др. c.
таблицы создаются как таковые
CREATE TABLE IF NOT EXISTS public.a
(a_id BIGSERIAL PRIMARY KEY);
CREATE TABLE IF NOT EXISTS public.a_registration
(
a_id bigint REFERENCES a(a_id),
a_row_id SERIAL PRIMARY KEY,
valid tsrange,
registration tsrange,
registration_by varchar(255),
name text
);
CREATE TABLE IF NOT EXISTS public.b
(b_id BIGSERIAL PRIMARY KEY);
CREATE TABLE IF NOT EXISTS public.b_registration
(
b_id bigint REFERENCES b(b_id),
b_row_id SERIAL PRIMARY KEY,
valid tsrange,
registration tsrange,
registration_by varchar(255),
person text
);
, как я добавляю ссылку на столбец, который должен содержать внешний ключ, в записи таблицы A, которые я делаю.
DO
$$
BEGIN
IF NOT EXISTS (SELECT FROM pg_attribute
WHERE attrelid = 'public.b_registration'::regclass -- table name here
AND attname = 'ref' -- column name here
AND NOT attisdropped
) THEN
ALTER TABLE public.b_registration
ADD COLUMN ref Serial references a_registration NULL;
ELSE
ALTER TABLE public.b_registration
ALTER COLUMN ref TYPE Serial references a_registration;
END IF;
END
$$;
дает мне ошибку о синтаксической ошибке
ERROR: syntax error at or near "REFERENCES"
LINE 14: ALTER COLUMN ref TYPE SERIAL REFERENCES s...
, но это никогда не сработает, но оператор true никогда не сработает, так как он утверждает, что есть
Я получаю эту ошибку
ERROR: syntax error at or near "SERIAL"
LINE 11: ADD COLUMN ref b_row_id SERIAL REFE...