PostgresQL:使用键值而不是两个列表插入

PostgresQL:使用键值而不是两个列表插入,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,PostgresQL允许您插入两个列表,一个是字段名,另一个是值 INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99); 对于长列表,很难确定您在哪个列表索引上。有没有办法通过在值旁边指定列名(即键值对)来插入?注意:这与存储不同 即 常规DML是不可能的 作为替代方案: 使用值列表缩短DML: INSERT INTO products (product_no, name, price) VALUES

PostgresQL允许您插入两个列表,一个是字段名,另一个是值

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99);
对于长列表,很难确定您在哪个列表索引上。有没有办法通过在值旁边指定列名(即键值对)来插入?注意:这与存储不同


常规DML是不可能的

作为替代方案:

使用值列表缩短DML:

INSERT INTO products (product_no, name, price) VALUES
  (1, 'Cheese', 9.99),
  (2, 'Sausages', 9.99),
  ...;
或创建可通过参数指定执行的函数:

create or replace function insert_product(
  in product_no products.product_no%type, 
  in name products.name%type, 
  in price products.price%type) returns products.product_no%type as $$
  insert into products(product_no, name, price) values (product_no, name, price) returning product_no;
$$ language sql;

select insert_product(1, 'Mashrooms', 1.99); -- Parameters by order 
select insert_product(product_no := 2, name := 'Cheese', price := 9.99); -- Parameters by name
select insert_product(product_no := 3, price := 19.99, name := 'Sosages'); -- Order does mot matter
create or replace function insert_product(
  in product_no products.product_no%type, 
  in name products.name%type, 
  in price products.price%type) returns products.product_no%type as $$
  insert into products(product_no, name, price) values (product_no, name, price) returning product_no;
$$ language sql;

select insert_product(1, 'Mashrooms', 1.99); -- Parameters by order 
select insert_product(product_no := 2, name := 'Cheese', price := 9.99); -- Parameters by name
select insert_product(product_no := 3, price := 19.99, name := 'Sosages'); -- Order does mot matter