AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[insert](dba)

Martin Hope
Tom Shelley
Asked: 2022-11-07 12:54:26 +0800 CST

多查询插入和返回

  • 5

我有以下代码创建一个 Mapbox 矢量平铺(MVT)。目前它创建、存储并返回给用户。但是,我想在一个查询中创建多个,但是我卡在插入和返回部分上。这是我到目前为止所拥有的

WITH mvtgeom AS 
(
SELECT ST_AsMVTGeom(
ST_GeomFromText('POLYGON ((0 0, 10 0, 10 5, 0 -5, 0 0))'),
ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)),
4096, 0, false)
)

INSERT INTO tile( mvt)
SELECT ST_AsMVT(mvtgeom)
FROM   mvtgeom
RETURNING *;

我想在一次执行中多次执行此操作,但类似于以下内容:

WITH 
mvtgeom AS
(
SELECT ST_AsMVTGeom(
ST_GeomFromText('POLYGON ((0 0, 10 0, 10 5, 0 -5, 0 0))'),
ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)),
4096, 0, false)
),

mvtgeom1 AS
(
SELECT ST_AsMVTGeom(
ST_GeomFromText('POLYGON ((0 0, 10 0, 10 5, 0 -5, 0 0))'),
ST_MakeBox2D(ST_Point(0, 0), ST_Point(4096, 4096)),
4096, 0, false)
),

INSERT INTO tile(mvt) 
SELECT ST_AsMVT(mvtgeom)
FROM   mvtgeom

INSERT INTO tile(mvt) 
SELECT ST_AsMVT(mvtgeom1)
FROM   mvtgeom1

RETURNING *;

with 部分工作正常,但稍后插入失败。我觉得我在插入语句和返回时缺少一些基本的东西。

insert
  • 1 个回答
  • 22 Views
Martin Hope
Grymjack
Asked: 2022-10-26 11:53:39 +0800 CST

使用“返回”值子句执行“插入”时,Sqlite 失败

  • 5

我在使用 SQLite 时遇到问题?在 PostgreSQL 上使用相同的表时我没有这个问题。当表为空并且您使用以下 SQL 语句时,它会引发错误。

INSERT INTO [table] ([column]) VALUES ([column value]) RETURNING [column];

返回列是一个自动递增的主键字段,错误表示“返回”后有语法错误。当表中已经有另一条记录时,它没有问题。我现在的解决方法是进行空表检查并在需要时插入虚拟记录。这很笨重,我觉得我缺少一些东西。有什么想法吗?

insert
  • 1 个回答
  • 31 Views
Martin Hope
Robert Elliot
Asked: 2022-09-25 04:52:54 +0800 CST

对于每一行,使用自动生成的 ID 在另一个表中创建一个链接行

  • 2

在 Postgres 中,我有一个现有的表:

things

thing_id 事物名称 目的地ID
10 第 10 件事 无效的
15 第 15 件事 无效的

对于该表中的每一行,我想将行添加到两个新的相关表中,其中一个具有自动生成的 ID。然后我想更新旧表中的行以指向相关的新行。

期望的结果:

things

thing_id 事物名称 目的地ID
10 第 10 件事 1
15 第 15 件事 2

parent_destination

目的地ID
1
2

child_destination

目的地ID 目的地名称
1 [目的地]东西10
2 [目的地]东西15

我在这里尝试过这样做:https ://www.db-fiddle.com/f/6iyvCT7BYXPHPi2N2HvNor/1 但我不知道如何从result1.

postgresql insert
  • 2 个回答
  • 44 Views
Martin Hope
peterh
Asked: 2022-08-23 22:39:52 +0800 CST

Oracle:如果不存在则插入

  • 0

我的问题是 Oracle 数据库中是否有原子插入如果不存在语句?这不是 ANSI SQL 的一部分,因此每个数据库供应商都有自己的方法(如果支持)。

要限定语句必须在高并发负载下工作并且永远不会抛出重复键错误。该语句必须成功(插入行)或不执行任何操作(PK 值已存在)。

我做了一些谷歌搜索,我的临时结论是Oracle 不支持这个,所以唯一可行的方法是 try-insert-catch-and-ignore-dup-key-error。真的只是想要帮助验证或拒绝这个假设。

oracle insert
  • 1 个回答
  • 286 Views
Martin Hope
Biller Builder
Asked: 2022-08-19 04:35:45 +0800 CST

您如何使用 CTE 编写有序的多插入?

  • 1

像这样的表:

CREATE TABLE test_1 (
  id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY
);

CREATE TABLE test_2 (
  id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY
);

CREATE TABLE test_refs (
  id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  id_1 bigint NOT NULL REFERENCES test_1,
  id_2 bigint NOT NULL REFERENCES test_2
);

和这样的插入查询:

WITH new_test_1_rows AS (
  INSERT INTO test_1
  DEFAULT VALUES
  RETURNING *
), new_test_2_rows AS (
  INSERT INTO test_2
  DEFAULT VALUES
  RETURNING *
), test_row_pairs AS (
  INSERT INTO test_refs
   ( id_1, id_2 )
  VALUES
    (
      (SELECT id FROM new_test_1_rows),
      (SELECT id FROM new_test_1_rows)
    )
  RETURNING *
)
SELECT *
FROM test_row_pairs

基本上它的作用:

  • 插入一行test_1
  • 插入一行test_2
  • 将他们的 ID 对插入test_refs

问题是我想将查询重写为多插入查询,即插入的行将行插入n,然后为插入的值创建行。为此,我需要知道 CTE 中的行索引,因此它可以用作连接键。你可以在条款中做些什么吗?test_1ntest_2ntest_refsRETURNING

postgresql insert
  • 1 个回答
  • 30 Views
Martin Hope
Ashwin
Asked: 2022-05-15 20:21:26 +0800 CST

是否可以在同一个 INSERT 中引用插入的列?

  • 1

此查询给出错误:

create table qwe (a bigint, completed bit varying(100000));
CREATE TABLE

insert into qwe (a, completed) values (1000, repeat('0', a));
ERROR:  column "a" does not exist
postgresql insert
  • 1 个回答
  • 82 Views
Martin Hope
x-yuri
Asked: 2022-02-22 02:49:02 +0800 CST

用户类型的属性 51 类型错误

  • 0

我正在尝试将数据从 csv 文件导入 pg 表。我得到的错误是:

$ psql -U postgres -c "COPY users (first_name) FROM '/users.csv' (FORMAT csv)"
ERROR:  attribute 51 of type users has wrong type
DETAIL:  Table has type integer, but query expects character varying.
CONTEXT:  COPY users, line 1

我怎么知道它是关于哪个属性的?就此而言, INSERT 也失败了:

$ psql -U postgres -c "INSERT INTO users (first_name) VALUES ('first_name')"
ERROR:  attribute 51 of type record has wrong type
DETAIL:  Table has type integer, but query expects character varying.

我试图根据\d users输出和attnum值进行计数:

SELECT a.*
FROM pg_attribute a
    JOIN pg_class c on a.attrelid = c.oid
    JOIN pg_namespace n on c.relnamespace = n.oid
WHERE n.nspname = 'public'
    AND c.relname = 'users'
    AND attnum >= 1
ORDER BY attnum

我正在运行 PostgreSQL 12.7。

postgresql insert
  • 1 个回答
  • 48 Views
Martin Hope
birgersp
Asked: 2022-02-17 23:01:27 +0800 CST

如何添加到表中,然后将 id 用于另一个查询?

  • 0

我有三个表,我使用这些查询创建:

create table parents(
    rowid serial primary key,
    display_name varchar,
    unique(display_name)
);

create table clients(
    rowid serial primary key,
    parent int,
    display_name varchar,
    foreign key (parent) references parents(rowid),
    unique(display_name, parent)
);

create table datapoints(
    rowid serial primary key,
    client int,
    val float8,
    foreign key (client) references clients(rowid)
);

我正在获取包含父名称、客户端名称和一些值的数据。每次获得这些数据时,我都想向数据点表中添加行。我还想向 clients 和 parents 表添加行,但前提是我收到的数据具有无法识别的名称。

例如,我可能会得到以下数据:

“parent1-client1-123.0”

我想要实现的是处理这些数据(在查询中),这种方式:

如果需要,在“父母”表中插入一行。

如果需要,使用适当的父 ID(在上一步中获得?)向“客户”表插入一行。

使用适当的客户端 ID(在上一步中获得?)在“数据点”表中插入一行。

我如何通过查询来管理它?我的程序员想写:

  • 如果需要,插入父母。将适当父级的 ID 保存在变量“current_parent”中
  • 如果需要,使用“current_parent”变量插入客户端。将相应客户端的 ID 保存在变量“current_client”中。
  • 使用上一页中的“current_client”变量插入数据点。步。

但显然这不是 sql 的工作方式,对吧?如果我有 5 个或 10 个而不是这三个“嵌套”表呢?(!)

请帮忙

postgresql insert
  • 1 个回答
  • 45 Views
Martin Hope
IBot
Asked: 2022-02-17 15:31:41 +0800 CST

使用 WITH 语句对具有多个字段和 jsonb 列的表进行 Upsert

  • 0

所以我试图根据查询结果进行更新:

/*
    Querying from this table:
     id | arrive_date | arrive_location | thing_type | thing_count
*/
CREATE TABLE IF NOT EXISTS public.inventory
(
  inventory_id serial NOT NULL,
  inventory_date date NOT NULL,
  arrive_location character varying NOT NULL,
  thing_type integer NOT NULL,
  quantity integer NOT NULL,
  PRIMARY KEY (inventory_id)
)    
/*
    Trying to insert on this table, where summary is a jsonb type:
    id | arrive_date | arrive_location | data
*/
CREATE TABLE IF NOT EXISTS public.preprocess_things
   (
      preprocess_id serial NOT NULL,
      arrive_date date NOT NULL,
      arrive_location character varying NOT NULL,
      data jsonb NOT NULL,
      CONSTRAINT preprocess_things_pkey PRIMARY KEY (preprocess_id),
      CONSTRAINT preprocess_things_arrive_date_arrive_location_bo_key   UNIQUE (arrive_date, arrive_location)
    )
/*Begin upsert*/
WITH result_query AS (
    SELECT DATE_TRUNC('day', inventory_date) AS arrive_date,
      arrive_location,
      thing_type,
      SUM(quantity) AS total_things
    FROM inventory
    GROUP BY arrive_date, arrive_location, thing_type
)
INSERT INTO preprocess_things (
    result_query.arrive_date,
    result_query.arrive_location,
    jsonb_build_object(result_query.thing_type || '', result_query.total_things)::jsonb
  ) ON CONFLICT (arrive_date, arrive_location) DO
UPDATE
  SET data= jsonb_insert(data, '{' || result_query.thing_type || '}', result_query.thing_sum)

有一个问题:

ERROR:  syntax error at or near "("
LINE 7:     jsonb_build_object(result_query.thing_type || '', total_things)::...

使用模拟数据的 Upsert 可以正常工作,但无法向 jsonb_build_object 发送参数

postgresql insert
  • 1 个回答
  • 208 Views
Martin Hope
Ryan Gill
Asked: 2022-02-10 02:30:30 +0800 CST

如何使用条件从多个表中插入各种记录

  • 1

我正在创建一个关系数据库,我目前有 2 个表(Staff和Student)

员工看起来像这样

员工编号 班级 没收手机总数
1 S201 1
2 S202 0
3 S203 1

学生长这样

学生卡 电话_型号
1 iPhone7
2 三星

我创建了另一个名为Phones

我正在尝试将这些特定记录从两个表中插入:StudentIDand StaffID, Class, and Phone_Models, 到新表中Phones。但是,如果员工的>= 1 ,它应该只Staff根据条件从表中插入记录。TotalPhonesConfiscated

我已经尝试过,但这没有提供正确的表格:

INSERT INTO Phones ( StudentID, 
                     StaffID, 
                     Phone_Model, 
                     Class
                   )
SELECT   StudentID, 
         StaffID, 
         Phone_Model, 
         Class
FROM Student, Staff
WHERE TotalPhonesConfiscated >= 1;

我不知道如何插入记录,所以看起来每个人都与每个人StaffID匹配StudentID,它似乎适用于Student记录但不适用于Staff记录。理论上我想要的应该是这样的:

学生卡 员工编号 电话_型号 班级
1 1 iPhone7 S201
2 3 iPhone11 S203

我的 SQL 语句中是否缺少某些内容?

sqlite insert
  • 1 个回答
  • 311 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve