我可以在PostgreSQL 9.4中写这样的东西吗?
SELECT id FROM image_instance WHERE name = 'bioboxes/velvet-then-quast'
UNION ALL
INSERT INTO image_instance (name, sha256, image_type_id)
SELECT
'bioboxes/velvet-then-quast',
'digest_4',
(SELECT id FROM image_type WHERE name = 'short_read_preprocessing_reference_evaluation')
WHERE NOT EXISTS (SELECT id FROM image_instance WHERE name = 'bioboxes/velvet-then-quast')
RETURNING id
我在上收到语法错误,INSERT
因此我认为这是不可能的?我认为值得一问,以防我写错了。
我知道这不是线程安全的,但是这是针对单线程应用程序的。
看来您在此之后。只需将您INSERT
的CTE包装起来(使用WITH):
WITH
CTE
AS
(
INSERT INTO image_instance (name, sha256, image_type_id)
SELECT
'bioboxes/velvet-then-quast',
'digest_4',
(SELECT id FROM image_type WHERE name = 'short_read_preprocessing_reference_evaluation')
WHERE NOT EXISTS (SELECT id FROM image_instance WHERE name = 'bioboxes/velvet-then-quast')
RETURNING id
)
SELECT id FROM image_instance WHERE name = 'bioboxes/velvet-then-quast'
UNION ALL
SELECT id FROM CTE
;
该查询将在其中插入一些行image_instance
;id
column的生成的值将由RETURNING
子句返回;依次将UNIONed ALL
具有id
from的(上一个?)值image_instance
。
我不确定结果是什么,应该检查一下,但是语法应该正确。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句