我可以在MySQL中执行以下操作,但想知道如何在PostgreSQL中执行等效操作。我必须将查询包装在一个字符串中,因为表名是可变的(不能只运行CREATE TABLE
)。这都是MySQL存储过程/ Postgres函数。
SET @createTable = CONCAT("CREATE TABLE ", table_name, "(
id int(11) NOT NULL AUTO_INCREMENT,
something varchar(255) NOT NULL");
PREPARE createTableStmt FROM @createTable;
EXECUTE createTableStmt;
DEALLOCATE PREPARE createTableStmt;
有人可以告诉我如何在Postgres中这样做吗?
答案 0 :(得分:2)
要运行一次,只需运行连接的CREATE TABLE
语句。
要封装使用变量表名重复使用的功能,请使用带EXECUTE
的plpgsql函数:
CREATE OR REPLACE FUNCTION create_my_table(_tbl text)
RETURNS void AS
$func$
BEGIN
EXECUTE format('CREATE TABLE %I (id serial, something varchar(255) NOT NULL)', _tbl);
END
$func$ LANGUAGE plpgsql;
呼叫:
SELECT create_my_table('foo_table');
要放弃:
DROP create_my_table(text);
There are many related answers here. Try a search.
或者,如果您只需要当前会话,则可以将其作为临时功能,在会话结束时自动删除:
CREATE OR REPLACE FUNCTION pg_temp.create_my_table(_tbl text) ...
使用序列列在Postgres中实现AUTOINCREMENT
:
您可能也想要列PRIMARY KEY
并且varchar(255)
很少有意义。我只想使用text
: