标签: bulk-insert

将多个数组取消嵌套到行中

我已经看到了使用此示例进行批量插入的好方法

WITH p AS (
    INSERT INTO parent_table (column_1) 
    SELECT $1 
    RETURNING id) 
INSERT INTO child_table (parent_table_id, column_a) 
SELECT p.id, a 
FROM   p, unnest($2::text[]) AS a
Run Code Online (Sandbox Code Playgroud)

但是,我需要从多个数组中插入多行,所以我尝试了以下语法:

WITH p AS (
    INSERT INTO parent_table (column_1) 
    SELECT $1 
    RETURNING id) 
INSERT INTO child_table (parent_table_id, column_a, column_b) 
SELECT p.id, a, b 
FROM   p, unnest($2::text[]) AS a, unnest($3::bigint[]) AS b
Run Code Online (Sandbox Code Playgroud)

我在parent_table_idand上有一个主键column_a,当我尝试执行此查询时,Postgres 抱怨重复键冲突。

应该如何解开数组以便它们形成单独的行?

换句话说,如果$2$3都有两个条目,那么第一个条目如何$2只插入第一个条目,$3并且对于各自的第二个条目都相同?

如果这是不可能的,我可以构造一个多维数组吗?如果是这样,它应该如何与多种数组类型一起传递,多维数组语法是什么?

postgresql array set-returning-functions bulk-insert

8
推荐指数
1
解决办法
2万
查看次数

SQL Server 避免在查询中多次重复排序规则类型

我有一个查询,它从源数据库 (DatabaseA) 中选择行,并将它们插入到目标数据库 (Database B) 中。数据库之间的排序规则类型不同,无法更改。我需要通过显式指定 varchar 字段的排序规则来解决查询中的排序规则差异。

目前我的查询是这样的:

INSERT INTO DatabaseB.dbo.Users(
    Id,
    UserNumber,
    FirstName,
    Surname,
    Address1,
    Address2,
    AddressTown,
    AddressCity
)
SELECT 
    Id,
    UserNumber,
    FirstName COLLATE SQL_Latin1_General_CI_AS,
    Surname COLLATE SQL_Latin1_General_CI_AS,
    Address1 COLLATE SQL_Latin1_General_CI_AS,
    Address2 COLLATE SQL_Latin1_General_CI_AS,
    AddressTown COLLATE SQL_Latin1_General_CI_AS,
    AddressCity COLLATE SQL_Latin1_General_CI_AS
FROM DatabaseA.dbo.Users
Run Code Online (Sandbox Code Playgroud)

我的问题是,我可以避免为每个基于字符串的字段键入排序规则类型吗?有没有办法可以一次为整个查询指定排序规则类型?如果这是不可能的,还有其他捷径吗?

sql-server collation insert import bulk-insert

8
推荐指数
2
解决办法
4233
查看次数

SQL Server 中用于保留用于批量插入的 id 块的惯用解决方案是什么?

我有一个带有标识列的表,我想保留一个可用于批量插入的 id 块,同时允许插入仍然发生在该表中。

请注意,这是多个表的批量插入的一部分,其中其他表通过 FK 与这些 id 相关。因此,我需要将它们挡在外面,以便我可以事先准备好关系。

我找到了一个解决方案,它通过在事务中锁定表然后进行重新播种(非常快)来工作。但这对我来说看起来有点老套 - 这样做是否有普遍接受的模式?

create table dbo.test
(
    id bigint not null primary key identity(1,1),
    SomeColumn nvarchar(100) not null
)
Run Code Online (Sandbox Code Playgroud)

这是阻止(为)一些 id 的代码:

declare @numRowsToMakeRoomFor int = 100

BEGIN TRANSACTION;

        SELECT  MAX(Id) FROM dbo.test WITH (  XLOCK, TABLOCK ) -- will exclusively lock the table whilst this tran is in progress, 
        --another instance of this query will not be able to pass this line until this instance commits

        --get the next id in …
Run Code Online (Sandbox Code Playgroud)

sql-server identity sql-server-2016 bulk-insert

8
推荐指数
1
解决办法
1088
查看次数

MySQL - 插入延迟 <- 已弃用 现在怎么办?

我一直在看 MySQL 文档的https://dev.mysql.com/doc/refman/5.7/en/insert-delayed.html

我打算使用 INSERT DELAYED,但我发现这已被弃用。

我仍然需要这个功能来与一些处理一些非常大的数据传输的 PHP 代码兼容。我很高兴更新我的 PHP,但我现在不知道如何实现相同的功能。

既然它已被弃用,我们将如何实现与传统 INSERT DELAYED 相同的结果?

mysql insert mysql-5.7 bulk-insert

7
推荐指数
1
解决办法
5201
查看次数

INSERT 中的死锁 ... ON DUPLICATE KEY UPDATE

我们有一个这样定义的表:

CREATE TABLE ipsum ( 
    id char(40) NOT NULL, 
    source char(40) NOT NULL, 
    ip_address varbinary(16) NOT NULL, 
    port smallint(5) unsigned NOT NULL, 
    percentage decimal(5,2) NOT NULL DEFAULT '0.00', 
    first_date datetime NOT NULL, 
    last_date datetime NOT NULL, 
    p0 tinyint(1) NOT NULL DEFAULT '0',
    p1 tinyint(1) NOT NULL DEFAULT '0', 
    blocked tinyint(1) NOT NULL, 
    created datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 
    country varchar(100) DEFAULT NULL, 
    continent varchar(100) DEFAULT NULL, 
    note varchar(100) DEFAULT NULL, 
    PRIMARY KEY (id), 
    KEY idx_first_seen_peer (first_date), 
    KEY idx_last_seen_peer (last_date), 
    KEY …
Run Code Online (Sandbox Code Playgroud)

deadlock mysql-5.6 bulk-insert

7
推荐指数
1
解决办法
5421
查看次数

BULK INSERT 在我有权访问的文件上收到“无法批量加载,因为......访问被拒绝”

我正在尝试运行 BULK INSERT,但出现访问被拒绝错误。到目前为止,我已经尝试了以下方法:

  • 我可以从我的机器打开文件
  • 我使用 windows auth 登录到 SQL Server(尝试过 v2008 R2 和 v2016)
  • 我有系统管理员权限
  • 我可以type使用 xp_cmdshell 文件(使用 SQL 服务帐户,但它消除了它是防火墙的想法)
  • 路径是网络 URL,而不是本地驱动器

我使用的命令是这样的:

BULK INSERT ken_temp
FROM '\\network_path\temp\kdf\text_file.txt'
WITH
   (
    FIELDTERMINATOR = ',', ROWTERMINATOR = '\n'
   ,ROWS_PER_BATCH = 50000
   ,MAXERRORS = 10
   )
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

sql-server sql-server-2008-r2 sql-server-2016 bulk-insert

7
推荐指数
1
解决办法
1万
查看次数

为什么 MySQL 中的 Insert-Ignore 如此昂贵?

TL; DR: 插入大量的行的无冲突快得多比(不)重新插入相同的行,BOTH使用INSERT IGNORE语法。

为什么是这样?我假设插入和“忽略”插入的索引查找成本相同,因为 MySQL 不知道传入的数据是否具有重复/冲突的数据(因此需要被忽略)......因此,索引发生在初始插入和被忽略的插入运行中。

此外,我认为“忽略”行应该是便宜的,因为它不需要任何磁盘写入。

但这绝对不是这种情况。

长版: 在这个问题中,我们使用 AWS 的 Aurora/MySQL 和LOAD DATA FROM S3 FILE语法来删除任何传输或性能变量。我们加载了一个与下面架构相对应的 4 兆行 CSV 文件,并加载了两次,每次都使用LOAD ... IGNORE.

请注意,该问题也发生在标准INSERT ... IGNORE,但使用批量行插入时。LOAD ... IGNORE这里的用途是将讨论引向测量结果的反直觉性质,而不是“如何执行大量被忽略的插入”。这不是这里的问题,因为已经制定了特定于域的方法。

在被测试的模型中,有一个三层索引:前两个是基数非常低的可枚举分类列,第三个列本质上是“实际”数据。为了简化这个问题,我只是坚持我目前的设置。

假设以下简单模式:

our_table:

id: basic auto-increment bigint, primary key
constkey1: varchar(50) -- this is a constant in the insert
constkey2: varchar(50) -- this is a constant in the insert
datakey:   varchar(50) -- this is pulled in …
Run Code Online (Sandbox Code Playgroud)

mysql index upsert aurora bulk-insert

7
推荐指数
1
解决办法
2671
查看次数

将表(及其所有数据)从一台服务器复制到另一台服务器的惯用方法是什么?

我有一个巨大的表,假设有 500,000 行。我想将其(架构和数据)从一台服务器复制到另一台服务器。这不是更新插入或任何类型的更新;这是一次性的直接复制和粘贴。对此的惯用方法是什么?

我试过了:

  • 将备份从一台服务器恢复到另一台服务器。这是不切实际的,因为众所周知,SQL Server 无法从备份中恢复表。它只能恢复数据库。而且我的数据库很大!
  • 使用 SSMS 将表数据编写为 INSERT 语句序列。这是不切实际的,因为插入必须逐行完成,令人痛苦。我怀疑这也会对事务日志造成可怕的影响,但还没有人因此攻击我(我现在正在运行这样的脚本,这将需要几个小时)。

sql-server etl bulkcopy t-sql bulk-insert

7
推荐指数
3
解决办法
1295
查看次数

有没有办法在 Always on 下最小化记录插入?

我有一个处于FULL恢复模式的主数据库,它是Always On组的一部分。有没有办法在FULL恢复模式下最小化记录插入操作?

我有一个每天执行的进程,并在表中插入几百万条记录。随着操作的继续,事务日志文件的大小急剧增加(从 1 GB 到 40 GB)。

正如我所读到的,我可以使用一些未完INSERT全记录操作的变体,但我担心切换恢复模型的效果?

t-sql sql-server-2012 transaction-log availability-groups bulk-insert

6
推荐指数
1
解决办法
4825
查看次数

SQL Server - BULKADMIN 和管理批量操作之间有什么区别

要授予用户运行的能力Bulk Insert T-SQL command,需要授予登录/用户:

  1. BULKADMIN服务器角色 - 或 -ADMINISTER BULK OPERATIONS服务器级别权限
  2. 连接目标数据库
  3. 插入目标表

BULKADMIN但是服务器角色和ADMINISTER BULK OPERATIONS服务器级权限有什么区别呢?

sql-server permissions bulk-insert

6
推荐指数
1
解决办法
6012
查看次数