psql generate_series() - 如何使用它来填充表中的多列?

Hap*_*ays 7 postgresql

我有一个具有以下结构的表:

widgetnumber - text
dd  - text 
refnumber - text
Run Code Online (Sandbox Code Playgroud)

widgetnumber 和 refnumber 需要填充相同的值......使用 generate_series 生成的值。
dd 将是设置一次的静态值。

我有以下代码:

INSERT INTO widgets(widgetnum, dd, refnum)
SELECT i
FROM generate_series(100, 150) AS t(i), 
'somestaticstring',
SELECT p
FROM generate_series(100, 150) AS t(p);
Run Code Online (Sandbox Code Playgroud)

但是我一定在某处有语法错误,因为这不起作用。我收到以下错误:

psql:addwidgets.sql:11: ERROR:  syntax error at or near "'somestaticstring'"
LINE 4: 'somestaticstring',
        ^
Run Code Online (Sandbox Code Playgroud)

我试过的

我试图将静态文本周围的单引号更改为双引号。我也试过这个:

INSERT INTO widgets(widgetnum, dd, refnum)
SELECT i
FROM generate_series(100, 150) AS t(i), 
SELECT 'somestaticstring',
SELECT p
FROM generate_series(100, 150) AS t(p);
Run Code Online (Sandbox Code Playgroud)

但这也因语法错误而失败

a_h*_*ame 8

使其成为 select 语句的一部分:

INSERT INTO widgets(widgetnum, dd, refnum)
SELECT i::text, 'somestaticstring', i::text
FROM generate_series(100, 150) AS t(i), 
Run Code Online (Sandbox Code Playgroud)


e4c*_*4c5 5

您可以将其视为正常的 INSERT SELECT

INSERT INTO widgets
SELECT generate_series(100,150), 'somestaticstring', generate_series(100,150)
Run Code Online (Sandbox Code Playgroud)

  • @Happydevdays:虽然 Postgres 中允许“SELECT”列表中存在多个设置返回函数(与标准 SQL 不同),但这不是一个好主意。如果不是全部返回相同的行数,则会出现令人惊讶的行为。尽可能将返回集合的函数移至“FROM”子句。考虑 a_horse 的答案。 (4认同)