2016-02-19 27 views
1

PostgresQL允許您插入兩個列表,一個字段名稱,另一個值。PostgresQL:使用鍵值而不是兩個列表插入

INSERT INTO products (product_no, name, price) VALUES (1, 'Cheese', 9.99); 

對於長列表,很難弄清楚你正在使用哪個列表索引。有沒有辦法通過指定列名旁邊的值來插入,即鍵值對?注意:這與hstore不同。

即。

INSERT INTO products (product_no => 1, name => 'Cheese', price => 9.99); 

回答

1

對於常規的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 
相關問題