У меня есть таблица с именем pool_hashrate со столбцами: id (PK), hashrate, network_id (FK), pool_id (FK). Я хотел бы заполнить их запросом:
insert into pool_hashrate (
hashrate, network_id, pool_id
)
select
i+i::double precision, i, i
from generate_series(0, 15) AS i;
Таблицы были автоматически созданы через Hibernate. Фрагмент кода SQL от pgAdmin:
CREATE TABLE public.pool_hashrate
(
id bigint NOT NULL DEFAULT nextval('pool_hashrate_id_seq'::regclass),
hashrate double precision NOT NULL,
network_id bigint NOT NULL,
pool_id bigint NOT NULL,
CONSTRAINT pool_hashrate_pkey PRIMARY KEY (id),
CONSTRAINT fk52n7131wvbi6196idmf1wfb0e FOREIGN KEY (pool_id)
REFERENCES public.pool_hashrate (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION,
CONSTRAINT fkjph0cotxu5udghsbbgtpysv66 FOREIGN KEY (network_id)
REFERENCES public.network_hashrate (id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
WITH (
OIDS = FALSE
)
TABLESPACE pg_default;
ALTER TABLE public.pool_hashrate
OWNER to postgres;
Могут ли ограничения быть проблемой? При выполнении запроса в pgAdmin я получаю сообщение rows affected -1.
РЕДАКТИРОВАТЬ
Я все время получаю ошибку Null value in column “network_id” violates not-null constraint when adding new item.. Почему туда добавляется null, если это должен быть i?
РЕДАКТИРОВАТЬ 2
Фактически, перед указанным выше запросом я выполняю 2 других запроса для заполнения network_hashrate и pool_hashrate. Вот эти запросы:
insert into network_hashrate (
rep_date, hashrate
)
select
current_timestamp - (s.a || ' hour')::interval,
s.a::double precision
from generate_series(0, 15, 1) AS s(a);
insert into pool_def (
name, date_from
)
select
left(md5(random()::text), 10),
current_timestamp - (s.a || ' hour')::interval
from generate_series(0, 15, 1) AS s(a);
Итак, чтобы ответить на ваш вопрос, да, у меня есть записи в network_hashrate. Думаю, проблем быть не должно?
Посмотрите мой Edit2, пожалуйста.
Вы не устанавливаете значение id явно, так что кто знает, какие значения фактически используются в идентификаторе. Предполагаемые значения 0-15 - существуют ли идентификаторы для всех этих чисел в network_hashrate, включая ноль? Для подтверждения проверьте свои фактические данные в таблице.
Идентификатора 0 нет. Они начинаются с 1-16.
Так вот почему. Ваш код вставляет значения generate_series(0, 15). Если вы хотите сделать 1-16, сделайте generate_series(1, 16)
Сэр, вы гений. Спасибо.


network_idссылается наpublic.network_hashrate (id), так есть ли у васidвpublic.network_hashrateдля каждого значенияnetwork_id, которое вы вставляете?