Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 创建具有节点pg引发外键冲突错误的多个从属插入_Javascript_Node.js_Typescript_Postgresql_Node Pg Pool - Fatal编程技术网

Javascript 创建具有节点pg引发外键冲突错误的多个从属插入

Javascript 创建具有节点pg引发外键冲突错误的多个从属插入,javascript,node.js,typescript,postgresql,node-pg-pool,Javascript,Node.js,Typescript,Postgresql,Node Pg Pool,一点背景- 我有3个表-列表、类别和图像表 这些表是使用下面定义的普通老sql构建的 列表 create table if not exists listing ( id serial not null, title varchar(200) not null, slug varchar(300) unique not null, price

一点背景- 我有3个表-列表、类别和图像表

这些表是使用下面定义的普通老sql构建的

列表

create table if not exists listing
(
    id              serial              not null,
    title           varchar(200)        not null,
    slug            varchar(300) unique not null,
    price           integer             not null,
    currency_name   varchar(10)         not null default 'EUR',
    currency_symbol varchar(5)                   default '€',
    img_url         varchar(300),
    rating          integer,
    description     varchar(3600)       not null,
    key_features    varchar(300)        not null,
    vendor_id       integer             not null,
    listing_status  LISTING_STATUS               default 'pending',
    created_at      timestamptz                  default now(),
    updated_at      timestamptz                  default now(),
    CONSTRAINT valid_price check ( price >= 0)
);
alter table listing
    owner to "izzy",
    add constraint listing_pk primary key (id),
    add constraint listing_user_fk foreign key (vendor_id) references "user" (id);
图像表


create table if not exists image
(
    id                serial  not null,
    listing_id        integer not null,
    img_url           text    not null,
    thumbnail_img_url text    not null,
    created_at        timestamptz default now()
);
alter table image
    owner to "izzy",
    add constraint image_id_pk primary key (id),
    add constraint image_listing_fk foreign key (listing_id) references listing (id);

类别表


create table if not exists category
(
    id             serial       not null,
    category_id    integer      not null,
    name           varchar(100) not null,
    suggested_name varchar(100) not null,
    link           varchar(100) not null,
    rel_link       varchar(100) not null,
    listing_id     integer      not null,
    created_at     timestamptz default now(),
    updated_at     timestamptz default now()
);
alter table category
    owner to "izzy",
    add constraint category_id_pk primary key (id),
    add constraint category_listing_fk foreign key (listing_id) references listing (id);

下面是处理插入的函数

 static async createListingForUser(body: any) {
        const {
            title, price, imgUrl, images, description, vendorId, slug, keyFeatures, categorys} = body;
            logger.info(`inserting a new listing for user ${vendorId} with slug ${slug}`);
            try {
                await DBClient.client.query('BEGIN')
                const createListingRes = await DBClient.client.query(this.CREATE_LISTING_QUERY, [title, price, imgUrl, description, vendorId, slug, keyFeatures]);
                const {id} = createListingRes.rows[0];
                const imageValues = images.map((i) => [id, i.original, i.original]);
                const categoryvalues = categorys.map((c) => [c.id, c.name, c.suggestedName, c.link, c.relLink, id]);
                let inserts = [];

                if (categoryvalues && categoryvalues.length > 0) {
                    console.log(this.INSERT_CATEGORIES(categoryvalues));
                    inserts.push(DBClient.client.query(this.INSERT_CATEGORIES(categoryvalues)));
                }

                if (imageValues && imageValues.length > 0) {
                    console.log(this.INSERT_IMAGES(imageValues));
                    inserts.push(DBClient.client.query(this.INSERT_IMAGES(imageValues)));
                }

                await Promise.all(inserts);
                await DBClient.client.query('COMMIT');
                logger.info(`inserted listing with id ${id} to db`);
            } catch (e) {
                await DBClient.client.query('ROLLBACK')
                logger.error(`rolling back transaction for vendor ${vendorId} with slug - ${slug}`, e);
                throw e;
            }
    }
插入后出现的错误是

表“image”上的插入或更新违反外键约束 “图像\u列表\u fk”

我只是想澄清一下我用于
this.CREATE\u LISTING\u QUERY的插入内容

insert into listing (title, price, img_url, description, vendor_id, slug, key_features)
                                   values ($1, $2, $3, $4, $5, $6, $7)
                                   returning id;`
insert\u类别的插入是

insert into category (category_id, name, suggested_name, link, rel_link, listing_id) values ('0', 'Animation', 'Animation', '/listing/categories/animation', 'animation', '24')
insert into image (listing_id, img_url, thumbnail_img_url) values ('24', 'url-to-add', 'url-to-add')
insert\u图像的插入是

insert into category (category_id, name, suggested_name, link, rel_link, listing_id) values ('0', 'Animation', 'Animation', '/listing/categories/animation', 'animation', '24')
insert into image (listing_id, img_url, thumbnail_img_url) values ('24', 'url-to-add', 'url-to-add')
我花了一整天的时间试图弄明白这一点,但除非我注释掉图像部分的插入代码,否则无法让它工作