Node.js 我可以让postgres使用TypeForm为成对的对象自动生成ID吗? 背景
我们的节点应用程序使用postgres数据库,并通过与之交互 我知道如何使用postgres序列生成的主键创建表,如下所示:Node.js 我可以让postgres使用TypeForm为成对的对象自动生成ID吗? 背景,node.js,postgresql,typeorm,Node.js,Postgresql,Typeorm,我们的节点应用程序使用postgres数据库,并通过与之交互 我知道如何使用postgres序列生成的主键创建表,如下所示: 从“typeorm”导入{Entity,PrimaryGeneratedColumn}; @实体() 导出类用户{ @PrimaryGeneratedColumn() id:编号; } 目标 我试图为总是成对创建的对象创建一个表;让我们将这些对象称为“鞋”,并假设这对对象中的两个成员是左鞋和右鞋。我希望左鞋和右鞋在我的表中是单独的条目,并且我希望能够轻松地查询成对的两种
从“typeorm”导入{Entity,PrimaryGeneratedColumn};
@实体()
导出类用户{
@PrimaryGeneratedColumn()
id:编号;
}
目标
我试图为总是成对创建的对象创建一个表;让我们将这些对象称为“鞋”,并假设这对对象中的两个成员是左鞋和右鞋。我希望左鞋和右鞋在我的表中是单独的条目,并且我希望能够轻松地查询成对的两种鞋
一种方法是这样的,它给了我一个关于pairId
的索引,并且每对鞋只强制一个左鞋和一个右鞋()
enum Foot{
Left=“Left”,
Right=“Right”
}
@实体()
@索引([“foot”,“pairId”],{unique:true})
出口级鞋{
@PrimaryGeneratedColumn()
id:编号;
@列({type:“enum”,enum:Foot})
脚:脚;
@纵队
佩丽德:号码
}
但是,这种方法我仍然负责在pairId
字段中生成值
问题:
有没有办法让postgres为我生成pairId
中的值?可能使用了由@PrimaryGeneratedColumn
装饰器自动生成的相同类型的序列
更新
在postgres中提出了一个可能的解决方案,尽管我仍然需要知道如何使用TypeORM的API或让TypeORM在正确的时间运行相关的原始SQL命令
我可以编写一个TypeForm来运行原始SQL,但我不确定如何让它在表创建时运行——似乎文档主要预期从命令行运行它们。是的,您可以在Postgres中为列分配一个序列。首次使用:
创建鞋拥有的序列my\u seq.pair\u id
属于的是可选的,但是将序列与表“绑定”在一起,因此它会随表一起自动删除
然后,可以将序列设置为列的默认值:
test(5432)=# create table shoes (pair_id integer DEFAULT nextval('my_seq'));
CREATE TABLE
test(5432)=# \d shoes
Table "public.shoes"
Column | Type | Collation | Nullable | Default
---------+---------+-----------+----------+-----------------------------
pair_id | integer | | | nextval('my_seq'::regclass)
或对于现有表格:
test(5432)=# create table shoes (pair_id integer);
CREATE TABLE
test(5432)=# alter table shoes alter COLUMN pair_id SET DEFAULT nextval('my_seq');
ALTER TABLE
我不知道在TypeORM中如何实现这一点。我对TypeORM没有任何模糊的概念,但是直接SQL只是用一个复合键、一个生成的id和左/右值创建一个表。然后可以通过一条语句插入这两条语句
create table shoes (pair_id integer generated by default as identity
,foot text
,constraint shoes_pk
primary key (pair_id, foot)
,constraint foot_check
check (lower (foot) = any('{left, right}') )
);
with this_pair(id) as
( insert into shoes(foot)
values ('left')
returning pair_id
)
insert into shoes(pair_id,foot)
select id,'right'
from this_pair
returning pair_id ;
select * from shoes;
谢谢这让我们至少有了一部分了解:-)希望一些TypeORM专家知道如何在TypeORM中做到这一点(或者至少让TypeORM在正确的时间执行这些SQL命令。