带有自动列的PostgreSQL预准备语句

时间:2019-02-24 21:02:04

标签: postgresql

尝试将准备好的语句与python的psypcop2一起用于插入时,需要手动设置。但是,将准备好的语句与序列号或时间戳等自动列一起使用会导致错误。

直接通过psql运行sql语句:

create table ps_test(
   id serial primary key,
   data text );

prepare pstmt (text) as insert into ps_test values( $1 );

execute pstmt( 'abc' );
execute pstmt( 'def' );

deallocate pstmt;
select * from ps_test;

给出“错误:列“ id”的类型为整数,但表达式的类型为文本”。

重写表,以便最后定义自动列:

drop table ps_test;
create table ps_test (
     data text,
     id serial primary key
);

prepare pstmt (text) as insert into ps_test values( $1 );

execute pstmt( 'abc' );
execute pstmt( 'def' );

deallocate pstmt;
select * from ps_test;

工作。

 data | id 
------+----
 abc  |  1
 def  |  2
(2 rows)

有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您将使用标准SQL

INSERT INTO ps_test (data) VALUES ( $1 )

$1插入data列中。请注意,INSERT statement syntax允许在column_name data后面的括号中指定table_name ps_test

因此,您准备好的陈述将是

PREPARE pstmt (text) AS INSERT INTO ps_test (data) VALUES ( $1 );