Psycopg2:在存储过程 Postgres 中创建一个 table

Psycopg2 : Create a table in a stored procedure Postgres

存储过程:

CREATE OR REPLACE FUNCTION try_create() RETURNS INT AS $$

  BEGIN
      CREATE TABLE hello(id SERIAL PRIMARY KEY, name TEXT);
      RETURN 1;
  END ;

$$ LANGUAGE plpgsql;

test.py

import psycopg2

conn = psycopg2.connect(user='a', password='a', dbname='a')
cur = conn.cursor()
cur.callproc('try_create', ())
print cur.fetchall()

我正在尝试创建一个存储过程,它将创建一个名为 hello 的 table。我正在使用 python 脚本调用相同的方法。在 运行 上面的脚本中,我看到以下输出

[root@localhost partitioning]# python test.py
[(1,)]

但是 table 不是在数据库中创建的。我在这里做错了什么吗?谢谢。

您应该commit the transaction, 添加命令:

...
conn.commit()
conn.close()

或者,您可以将连接设置为自动提交模式:

conn = psycopg2.connect(user='a', password='a', dbname='a')
conn.autocommit = True
cur = conn.cursor()
cur.callproc('try_create', ())
conn.close()

阅读更多关于 transactions in psycopg2.