我一直在尝试使用Create Table if Not Exists
命令,然后再在PostgresQL 11中使用其他命令来创建特定的场景。但是,即使对手册进行了详尽的研究,我似乎也找不到我需要的方式。写下来。
将发生以下情况:
当数据库和架构中不存在某个表时,它将创建带有特殊选择查询的新表。
当表确实存在时,它还必须执行相同的查询,但要选择不同的值。这样特定的行就不会加倍。
表中有一个名为ID_0
的主键,这样可以帮助我们避免重复值。
CREATE TABLE IF NOT EXISTS testschema.finalplantenpaspoort AS
SELECT id_0, proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y
FROM testschema.outputkruising2
JOIN testschema.plotjesproefx
ON outputkruising2.proefcode = weegschaalproeven.internproefnr AND outputkruising2.plotcijfer = weegschaalproeven.objectnr AND outputkruising2.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'))
ELSE INSERT INTO testschema.finalplantenpaspoort
SELECT DISTINCT id_0, proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y
FROM testschema.plantenpaspoort
JOIN testschema.weegschaalproeven
ON plantenpaspoort.proefcode = weegschaalproeven.internproefnr AND plantenpaspoort.plotcijfer = weegschaalproeven.objectnr AND plantenpaspoort.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'))
有什么建议吗?
编辑:所以这是使它起作用的新代码,但我想浓缩为1个查询,而不仅仅是2个单独的查询:
CREATE TABLE IF NOT EXISTS testschema.finalplantenpaspoort AS
SELECT proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y
FROM testschema.outputkruising2
JOIN testschema.plotjesproefx
ON outputkruising2.proefcode = weegschaalproeven.internproefnr AND outputkruising2.plotcijfer = weegschaalproeven.objectnr AND outputkruising2.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'));
INSERT INTO testschema.finalplantenpaspoort;
SELECT DISTINCT proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y
FROM testschema.plantenpaspoort
JOIN testschema.weegschaalproeven
ON plantenpaspoort.proefcode = weegschaalproeven.internproefnr AND plantenpaspoort.plotcijfer = weegschaalproeven.objectnr AND plantenpaspoort.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'))
ON CONFLICT DO NOTHING;
Edit2:问题已解决,谢谢大家的反馈。编辑3:忽略以前的编辑,一个新问题已经到来。
Create TABLE IF NOT EXISTS testschema.finalplantenpaspoort AS
SELECT id_0, proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y
FROM testschema.outputkruising3
JOIN testschema.weegschaalproeven
ON outputkruising3.proefcode = weegschaalproeven.internproefnr AND outputkruising3.plotcijfer = weegschaalproeven.objectnr AND outputkruising3.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'));
ALTER TABLE testschema.finalplantenpaspoort
ALTER COLUMN id_0 SET NOT NULL,
ADD UNIQUE (id_0),
OWNER TO test_admin_test;
INSERT INTO testschema.finalplantenpaspoort
SELECT DISTINCT id_0, proefcodet, proefnaam, datumvernietiging, oogstvernietigingsmethode, objectnr, productcode, potnummer, dosis, oppervlakte, eenheid, luikb, oogstbestemming, application, opmerking, proefjaar, proefcode, plotletter, plotcijfer, plot, X, Y
FROM testschema.outputkruising3
JOIN testschema.weegschaalproeven
ON outputkruising3.proefcode = weegschaalproeven.internproefnr AND outputkruising3.plotcijfer = weegschaalproeven.objectnr AND outputkruising3.plotletter LIKE ANY (regexp_split_to_array(weegschaalproeven.application , '\s*'))
ON CONFLICT DO NOTHING;