系统信息:
我一直在处理两张桌子。第一个表的id需要通过外键链接到第二个表的"folder_id“。我的迁移脚本按计划创建了表。在播种数据库时,我无法从外键约束中获得从(folder_id)列中的引用列(id)传播的值。目前,"folder_id“列在我启动数据库后表示NULL。我正在尝试将folder_Id中的值作为文件夹表中id列的值。
下面是两个表的屏幕截图:DBeaver中两个表的视图。
下面是我使用的迁移脚本:
CREATE TABLE noteful_folders (
id int4 PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
hex_id VARCHAR,
title TEXT NOT NULL
);
CREATE TABLE noteful_notes (
id INTEGER PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
hex_id VARCHAR,
title TEXT NOT NULL,
modified TIMESTAMPTZ DEFAULT now() NOT NULL,
folder_hex_id VARCHAR,
folder_Id int4,
content TEXT
);
ALTER TABLE noteful_notes ADD CONSTRAINT note_fk FOREIGN KEY (folder_id) REFERENCES public.noteful_folders(id);
下面是我使用的两个种子脚本:
备注种子:
INSERT INTO noteful_notes (hex_id, title, modified, folder_hex_id, content)
VALUES
('cbc787a0-ffaf-11e8-8eb2-f2801f1b9fd1', 'Dogs', '2019-01-03T00:00:00.000Z', 'b0715efe-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e0034-ffaf-11e8-8eb2-f2801f1b9fd1', 'Cats', '2018-08-15T23:00:00.000Z', 'b07161a6-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e01a6-ffaf-11e8-8eb2-f2801f1b9fd1', 'Pigs', '2018-03-01T00:00:00.000Z', 'b07161a6-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e0570-ffaf-11e8-8eb2-f2801f1b9fd1', 'Birds', '2019-01-04T00:00:00.000Z', 'b0715efe-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e0714-ffaf-11e8-8eb2-f2801f1b9fd1', 'Bears', '2018-07-12T23:00:00.000Z','b0715efe-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e0854-ffaf-11e8-8eb2-f2801f1b9fd1', 'Horses', '2018-08-20T23:00:00.000Z', 'b07161a6-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e0980-ffaf-11e8-8eb2-f2801f1b9fd1', 'Tigers', '2018-03-03T00:00:00.000Z', 'b07162f0-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e0aac-ffaf-11e8-8eb2-f2801f1b9fd1', 'Wolves', '2018-05-16T23:00:00.000Z','b07162f0-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e0bce-ffaf-11e8-8eb2-f2801f1b9fd1', 'Elephants', '2018-04-11T23:00:00.000Z', 'b07161a6-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e0f48-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lions', '2018-04-26T23:00:00.000Z', 'b0715efe-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e1074-ffaf-11e8-8eb2-f2801f1b9fd1', 'Monkeys', '2018-02-05T00:00:00.000Z', 'b07162f0-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e11a0-ffaf-11e8-8eb2-f2801f1b9fd1', 'Bats', '2018-12-01T00:00:00.000Z', 'b0715efe-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e12c2-ffaf-11e8-8eb2-f2801f1b9fd1', 'Turtles', '2018-09-11T23:00:00.000Z', 'b07161a6-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.'),
('d26e1452-ffaf-11e8-8eb2-f2801f1b9fd1', 'Zebras', '2018-08-13T23:00:00.000Z', 'b07161a6-ffaf-11e8-8eb2-f2801f1b9fd1', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum suscipit blandit purus convallis vehicula. Vestibulum enim augue, auctor a diam eget, scelerisque laoreet eros. Proin id maximus nisi, sed rhoncus mi. Suspendisse eu arcu volutpat, tempor nisl at, pretium erat. Nullam a elementum lorem. Mauris aliquam ante a libero eleifend pretium. Donec ante odio, consectetur vel nisl quis, semper bibendum velit. Sed magna turpis, placerat eget arcu vitae, pellentesque dignissim mi. Nunc ullamcorper dolor mi. Ut tortor orci, laoreet et vestibulum a, ornare sed quam. Integer id quam dui. Fusce et consectetur nulla. Suspendisse rhoncus posuere augue id mattis.');
文件夹种子:
INSERT INTO noteful_folders (hex_id, title)
VALUES
('b0715efe-ffaf-11e8-8eb2-f2801f1b9fd1', 'Important'),
('b07161a6-ffaf-11e8-8eb2-f2801f1b9fd1', 'Super'),
('b07162f0-ffaf-11e8-8eb2-f2801f1b9fd1', 'Spangley');
我的问题是:要使notes表中的folder_id列反映文件夹表中id列的值,需要做什么?是否需要在notes表的种子脚本中放置某种占位符才能从文件夹表的id列中获得正确填充的值?
发布于 2020-07-24 22:57:57
首先,你不应该链接截图。请将截图中的文本粘贴到您的答案中的代码块中?
表folder_hex_id
中的noteful_notes
列违反了关系理论的原理。noteful_notes
表应该只包含folder_id
列。奇怪的是,您的模型违反了这一原则,使得修复已经种子的数据变得非常简单。发出此命令将纠正您的数据,但这绝对不是执行种子的正确方法。
update noteful_notes
set folder_id = f.folder_id
from noteful_folders f
where f.hex_id = noteful_notes.folder_hex_id;
我想你不是在使用ORM,如果我错了,请不要纠正我,因为ORMs是魔鬼:-)
我的建议是将folder_hex_id
列从noteful_notes
中移除,在noteful_notes
中将folder_id
定义为folder_id not null references noteful_folders(id)
,在加载noteful notes
之前让您的种子过程加载noteful_folders
,并为noteful_notes
表设置种子:
with indata (hex_id, title, modified, folder_title, content) as (
values ('<your note hex id1>', '<your note title1>', '<your timestamp1>',
'<your folder title1>', '<your post content>1'),
('<your note hex id2>', '<your note title2>', '<your timestamp2>',
'<your folder title2>', '<your post content2>')
)
insert into noteful_notes (hex_id, title, modified, folder_id, content)
select i.hex_id, i.title, i.modified, f.id, i.content
from indata i
join folder f
on f.title = i.folder_title
;
我假设您有一个很好的理由将hex_id
值与您的笔记和文件夹保持在一起。如果你没有充分的理由,请在评论中提及。
如果您希望将注释与数据中的hex_id
链接到文件夹,那么应该非常清楚如何用folder_hex_id
代替folder_title
。
https://stackoverflow.com/questions/63081921
复制相似问题