相关疑难解决方法(0)

使用Postgres一次在3个表中插入数据

我想通过一个查询将数据插入到3个表中.
我的表如下所示:

CREATE TABLE sample (
   id        bigserial PRIMARY KEY,
   lastname  varchar(20),
   firstname varchar(20)
);

CREATE TABLE sample1(
   user_id    bigserial PRIMARY KEY,
   sample_id  bigint REFERENCES sample,
   adddetails varchar(20)
);

CREATE TABLE sample2(
   id      bigserial PRIMARY KEY,
   user_id bigint REFERENCES sample1,
   value   varchar(10)
);
Run Code Online (Sandbox Code Playgroud)

我将获得一个密钥以换取每次插入,我需要在下一个表中插入该密钥.
我的查询是:

insert into sample(firstname,lastname) values('fai55','shaggk') RETURNING id;
insert into sample1(sample_id, adddetails) values($id,'ss') RETURNING user_id;
insert into sample2(user_id, value) values($id,'ss') RETURNING id;
Run Code Online (Sandbox Code Playgroud)

但是,如果我运行单个查询,他们只是向我返回值,我不能立即在下一个查询中重用它们.

怎么做到这一点?

sql postgresql common-table-expression sql-insert sql-returning

64
推荐指数
4
解决办法
4万
查看次数

如何在PostgreSQL 9.2.1中避免循环触发调用

我有一张桌子:

CREATE TABLE field_data.soil_samples (
 pgid SERIAL NOT NULL,
 sample_id text,
 project_id text,
 utm_zone integer,
 utm_easting integer,
 utm_northing integer,
 wgs84_longitude double precision,
 wgs84_latitude double precision,
 yt_albers_geom geometry(Point,3578),
 CONSTRAINT soil_samples_pk PRIMARY KEY (pgid)
)
Run Code Online (Sandbox Code Playgroud)

PostGIS 2.0几何体yt_albers_geom是使用触发器创建的,该触发器针对此表触发INSERTS.如果要插入的记录满足以下条件之一,则会生成几何体:

  1. 两者wgs84_latitude和wgs84_longitude字段都不为空
  2. 每个的utm_zone,utm_easting和utm_northing不为空

现在,我对如何进行更新以实现以下目标感到困惑:

  1. 当更新是为了utm_zone,utm_easting或utm_northing,然后wgs_84_latitude,wgs84_longitude和yt_albers_geom被触发更新
  2. 当对wgs84_latitude或进行更新时,wgs84_longitude所有utm_字段都会更新,以及yt_albers_geom.
  3. 完成更新后yt_albers_geom,将更新所有坐标字段.

似乎这些触发器中的任何一个都会导致无限循环的触发器触发,对吗?

postgresql triggers postgis plpgsql

5
推荐指数
1
解决办法
1896
查看次数