我可以在postgres 9.4中写这样的东西吗?'UNION ALL'可以和postgres中的'INSERT INTO'一起使用吗?
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 INTO ... SELECT .... UNION ALL SELECT ...?此外,您选择的字段数量必须等于您要插入的字段数量。 – Dijkgraaf
@Dijkgraaf感谢您的建议。我尝试交换顶部和底部的子句,但后来我在UNION –
上得到语法错误这可能是由于您的第一次选择只有一个字段和第二个三个字段。他们都必须有与插入相同的数字(三)。试着让你的SELECT UNION ALL SELECT首先进行,然后当这是好的时候,然后将你的INSERT添加到顶部 – Dijkgraaf