我有一个带有SERIAL主键的表,还有一个ltree列,其值我想成为这些主键的串联.例如
id | path
----------
1 1
2 1.2
3 1.2.3
4 1.4
5 1.5
Run Code Online (Sandbox Code Playgroud)
我很好奇是否有办法在一个查询中进行这样的插入,例如
INSERT INTO foo (id, ltree) VALUES (DEFAULT, THIS.id::text)
Run Code Online (Sandbox Code Playgroud)
我可能在这里过度使用并试图在一个查询中做我应该做的两件事(在一个事务中分组).
我正在node.js中编写一个函数来查询PostgreSQL表.
如果该行存在,我想从该行返回id列.
如果它不存在,我想插入它并返回id(insert into ... returning id).
我一直在尝试变体case和if else语句,似乎无法让它发挥作用.
我发现使用可写CTE模拟PostgreSQL中的upsert是一个非常优雅的解决方案,直到我们在Postgres中获得实际的upsert/merge.(见:https://stackoverflow.com/a/8702291/558819)
但是,有一个问题:如何插入默认值?NULL当然,使用将无助于NULL显式插入NULL,与MySQL不同.一个例子:
WITH new_values (id, playlist, item, group_name, duration, sort, legacy) AS (
VALUES (651, 21, 30012, 'a', 30, 1, FALSE)
, (NULL::int, 21, 1, 'b', 34, 2, NULL::boolean)
, (668, 21, 30012, 'c', 30, 3, FALSE)
, (7428, 21, 23068, 'd', 0, 4, FALSE)
), upsert AS (
UPDATE playlist_items m
SET (playlist, item, group_name, duration, sort, legacy)
= (nv.playlist, nv.item, nv.group_name, nv.duration, nv.sort, nv.legacy)
FROM new_values nv
WHERE …Run Code Online (Sandbox Code Playgroud) 比如,我们在表中插入了多行:
$rows = [(1,2,3), (4,5,6), (7,8,9) ... ] //[ array of values ];
Run Code Online (Sandbox Code Playgroud)
使用PDO:
$sql = "insert into `table_name` (col1, col2, col3) values (?, ?, ?)" ;
Run Code Online (Sandbox Code Playgroud)
现在,您应该如何继续插入行?像这样?
$stmt = $db->prepare($sql);
foreach($rows as $row){
$stmt->execute($row);
}
Run Code Online (Sandbox Code Playgroud)
或者,像这样?
$sql = "insert into `table_name` (col1, col2, col3) values ";
$sql .= //not sure the best way to concatenate all the values, use implode?
$db->prepare($sql)->execute();
Run Code Online (Sandbox Code Playgroud)
哪种方式更快更安全?插入多行的最佳方法是什么?
我已经浏览了许多在Android中使用SQLite的示例/教程.比方说,你有使用SQLite,一个应用程序ContentProvider,CursorLoader一个自定义CursorAdapter.现在我发现的所有主要示例都依赖于a CursorLoader来获取数据CursorAdapter,这本质上CursorLoader是以Async-UI线程安全的方式发生的.然而,这些相同的例子都使插入/删除/更新通过调用ContentResolver在主线程(例如,从onClick,onResume,onPause).(示例)它们不会将这些调用包装在一个AsyncTask或启动一个单独的线程中或使用AsyncQueryHandler.为什么这样,如此多的写得好的博客/例子怎么会犯这么明显的错误呢?或者是简单的单行插入/删除/更新调用如此之快,以至于它们足以安全地从Main/UI线程启动?这些快速通话的正确方法是什么?
我有一个父表,表示一个文件,表中的每个记录在子表中有n个子记录.每个子记录可以有n个孙子记录.这些记录处于已发布状态.当用户想要修改已发布的文档时,我们需要克隆父项及其所有子项和孙项.
表结构如下所示:
CREATE TABLE [ql].[Quantlist] (
[QuantlistId] INT IDENTITY (1, 1) NOT NULL,
[StateId] INT NOT NULL,
[Title] VARCHAR (500) NOT NULL,
CONSTRAINT [PK_Quantlist] PRIMARY KEY CLUSTERED ([QuantlistId] ASC),
CONSTRAINT [FK_Quantlist_State] FOREIGN KEY ([StateId]) REFERENCES [ql].[State] ([StateId])
);
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE [ql].[QuantlistAttribute]
(
[QuantlistAttributeId] INT IDENTITY (1, 1),
[QuantlistId] INT NOT NULL,
[Narrative] VARCHAR (500) NOT NULL,
CONSTRAINT [PK_QuantlistAttribute] PRIMARY KEY ([QuantlistAttributeId]),
CONSTRAINT [FK_QuantlistAttribute_QuantlistId] FOREIGN KEY ([QuantlistId]) REFERENCES [ql].[Quantlist]([QuantlistId]),
)
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE …Run Code Online (Sandbox Code Playgroud) 我正在使用PostgreSQL 9.3.
我想复制一些db记录.由于我正在为表使用自动增量pk id,因此我想从生成的重复记录ID返回到原始ID的id映射.例如,假设我有一个posts包含2条记录的表:
[{'id': 1, 'title': 'first'}
, {'id': 2. 'title': 'second'}]
Run Code Online (Sandbox Code Playgroud)
使用SQL:
INSERT INTO posts (title) SELECT title FROM posts RETURNING id, ??
Run Code Online (Sandbox Code Playgroud)
我希望看到像这样的映射:
[{'id': 3, 'from_id': 1}
, {'id': 4, 'from_id': 2}]
Run Code Online (Sandbox Code Playgroud)
有关如何填写上述问号以使其有效的任何想法?非常感谢!
嗨我试图插入表tester3它使用语法失败
insert into tester3 (UN0, UN1) values ( 1, 'jishnu1');
Run Code Online (Sandbox Code Playgroud)
但
insert into tester3 values ( 1, 'jishnu1');
Run Code Online (Sandbox Code Playgroud)
工作正常.
mydb=# CREATE TABLE tester3
mydb-# (
mydb(# "UN0" integer,
mydb(# "UN1" VARCHAR(40)
mydb(# );
CREATE TABLE
mydb=# insert into tester3 (UN0, UN1) values ( 1, 'jishnu1');
ERROR: column "un0" of relation "tester3" does not exist
mydb=# \d tester3
Table "public.tester3"
Column | Type | Modifiers
--------+-----------------------+-----------
UN0 | integer |
UN1 | character varying(40) |
Run Code Online (Sandbox Code Playgroud)
我想我错过了一些非常微不足道的东西,我尝试了其他一些列名称,其中一些工作正常,一些不起作用.我很迷惑.PostgreSQL对列名的限制是否适用于插入查询的第一种语法?
编辑: 正如Gordon Linoff 所建议的 …
实体框架在批量插入/更新/删除操作上可能非常慢.即使是经常建议的关闭AutoDetectChanges和/或ValidateOnSaveEnabled的调整也并不总是有帮助.
我在NuGet上遇到过Z.EntityFramework.Extensions,但它似乎是一个商业产品,只能运行一段时间.
https://www.nuget.org/packages/Z.EntityFramework.Extensions/
到目前为止,我真的只需要BulkInsert(),BulkUpdate()和BulkDelete().
我的问题是:
有没有可靠的非商业库,它与Z.EntityFramework.Extensions几乎相同?
谢谢你的任何提示!
我是初学者,尝试使用教程将 JSON 值插入数据库
我使用以下命令创建了该表
CREATE TABLE table_name( id character varying(50),
data json NOT NULL,
active boolean NOT NULL,
created_at timestamp with time zone NOT NULL,
updated_at timestamp with time zone NOT NULL,
CONSTRAINT table_name_pkey PRIMARY KEY (id)
);
Run Code Online (Sandbox Code Playgroud)
该表是使用 table_name 创建的。
现在我尝试将值插入数据库:
INSERT INTO table_name
SELECT id,data,active,created_at,updated_at
FROM json_populate_record (NULL::table_name,
'{
"id": "1",
"data":{
"key":"value"
},
"active":true,
"created_at": SELECT NOW(),
"updated_at": SELECT NOW()
}'
);
Run Code Online (Sandbox Code Playgroud)
它抛出以下错误
错误:类型 JSON '{ 的输入语法无效
任何人都可以帮助我解析 JSON 值并将其插入数据库吗?
sql-insert ×10
postgresql ×6
sql ×6
android ×1
c# ×1
json ×1
merge ×1
mysql ×1
node.js ×1
pdo ×1
php ×1
sql-delete ×1
sql-server ×1
sql-update ×1
sqlite ×1
ui-thread ×1
upsert ×1