YAML, по той простой причине, что он делает для очень удобочитаемых файлов конфигурации по сравнению с XML.
XML:
Bob
Abooey
adv
555-1212 |
ahunter@example1.com
babooey@example2.com
YAML:
babooey:
computer : cpu1
firstname: Bob
lastname: Abooey
cell: 555-1212
addresses:
- address: babooey@example1.com
password: xxxx
- address: babooey@example2.com
password: xxxx
Примеры были взяты с этой страницы: http://www.kuro5hin.org/story/2004/ 10/29/14225/062
select nextval('mytable_seq') from generate_series(1,3);
generate_series - это функция, которая возвращает множество строк с последовательными номерами, сконфигурированными ее аргументами.
В приведенном выше примере нам не важны значения в каждой строке, мы просто используем generate_series в качестве генератора строк. И для каждой строки мы можем вызвать nextval. В этом случае он возвращает 3 числа (nextval).
Вы можете обернуть это в функцию, но я не уверен, действительно ли это разумно, учитывая, насколько короткий запрос.
CREATE OR REPLACE FUNCTION foo() RETURNS SETOF INT AS $$
DECLARE
seqval int; x int;
BEGIN
x := 0;
WHILE x < 100 LOOP
SELECT into seqval nextval('f_id_seq');
RETURN NEXT seqval;
x := x+1;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql STRICT;
Of course, if all you're trying to do is advance the sequence, there's setval().
You could also have the function take a parameter for how many times to loop:
CREATE OR REPLACE FUNCTION foo(loopcnt int) RETURNS SETOF INT AS $$
DECLARE
seqval int;
x int;
BEGIN
x := 0;
WHILE x < loopcnt LOOP
SELECT into seqval nextval('f_id_seq');
RETURN NEXT seqval;x := x+1;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql STRICT;
My current best solution is:
SELECT NEXTVAL('mytable_seq') AS id
UNION ALL
SELECT NEXTVAL('mytable_seq') AS id
UNION ALL
SELECT NEXTVAL('mytable_seq') AS id;
Which will correctly return 3 rows... but I would like something that is minimal SQL for even as much as 100 or more NEXTVAL invocations.
Вот отличная статья об этой конкретной проблеме: « получение нескольких значений из последовательностей ».
Если производительность не является проблемой, например, при использовании последовательности значения затмевают время, затраченное на их получение, или n мало, тогда подход SELECT nextval ('seq') FROM generate_series (1, n) является самым простым и наиболее подходящим.
Но при подготовке данных для массовой загрузки подходит последний подход из статьи об увеличении последовательности на n изнутри блокировки.
Если вы действительно не хотите, чтобы возвращались три строки, я бы установил последовательность как 'УВЕЛИЧЕНИЕ НА 3 'для каждого выбора. Затем вы можете просто добавить 1 и 2 к результату, чтобы у вас были три порядковых номера.
Я пытался добавить ссылку на документы postgresql, но, похоже, мне не разрешено публиковать ссылки.