首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >迁移脚本正在创建外键约束,而不是从引用列生成值。

迁移脚本正在创建外键约束,而不是从引用列生成值。
EN

Stack Overflow用户
提问于 2020-07-24 21:50:50
回答 1查看 75关注 0票数 0

系统信息:

  • 操作系统(发行版)和版本: Mac
  • DBeaver版本: 7.1.2
  • 数据库名称和版本: Postgresql
  • 快递服务器
  • VSCode

我一直在处理两张桌子。第一个表的id需要通过外键链接到第二个表的"folder_id“。我的迁移脚本按计划创建了表。在播种数据库时,我无法从外键约束中获得从(folder_id)列中的引用列(id)传播的值。目前,"folder_id“列在我启动数据库后表示NULL。我正在尝试将folder_Id中的值作为文件夹表中id列的值。

下面是两个表的屏幕截图:DBeaver中两个表的视图

下面是我使用的迁移脚本:

代码语言:javascript
运行
复制
 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);

下面是我使用的两个种子脚本:

备注种子:

代码语言:javascript
运行
复制
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.');

文件夹种子:

代码语言:javascript
运行
复制
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列中获得正确填充的值?

EN

回答 1

Stack Overflow用户

发布于 2020-07-24 22:57:57

首先,你不应该链接截图。请将截图中的文本粘贴到您的答案中的代码块中?

folder_hex_id中的noteful_notes列违反了关系理论的原理。noteful_notes表应该只包含folder_id列。奇怪的是,您的模型违反了这一原则,使得修复已经种子的数据变得非常简单。发出此命令将纠正您的数据,但这绝对不是执行种子的正确方法。

代码语言:javascript
运行
复制
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表设置种子:

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63081921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档