2016-02-19 2 views
1

PostgresQL позволяет вам вводить INSERT с двумя списками, одним из имен полей, другим значением.PostgresQL: Вставка с ключом вместо двух списков

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

Для длинного списка сложно определить, в каком списке указателей вы находитесь. Есть ли способ вставить, указав имя столбца рядом с значением, то есть пары ключ-значение? Примечание: Это отличается от hstore.

ie.

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 
Смежные вопросы