Postgresql:如何仅在表不存在的情况下创建表?

sql database postgresql 匿名 | 2020-02-27 02:21:21


在Postgresql中,只有在表不存在的情况下,我如何创建一个条件来创建表?
代码示例欣赏。





10 答案



我不确定它是什么时候添加的,但为了完整起见,我想指出在9.1版中(可能是以前)可以使用
IF NOT EXISTS
IF NOT EXISTS
仅当表不存在时才创建该表。
示例:
CREATE TABLE IF NOT EXISTS users.vip
(
id integer
)

如果表不存在,则在架构中创建名为
vip
的表。
Source

2020-02-27 02:21:32
匿名


create or replace function update_the_db() returns void as
$$
begin
if not exists(select * from information_schema.tables
where
table_catalog = CURRENT_CATALOG and table_schema = CURRENT_SCHEMA
and table_name = 'your_table_name_here') then
create table your_table_name_here
(
the_id int not null,
name text
);
end if;
end;
$$
language 'plpgsql';
select update_the_db();
drop function update_the_db();

2020-02-27 02:21:46
匿名


只需创建表,不必担心它是否存在。如果它不存在,它将被创建;如果它存在,表将不会被修改。在执行create语句时,您始终可以检查SQL查询的返回值,以查看表是否存在。

2020-02-27 02:22:09
匿名


我想查一下pg_类表可能会有帮助,比如:
SELECT COUNT (relname) as a FROM pg_class WHERE relname = 'mytable'
if a = 0 then (CREATE IT)

问候

2020-02-27 02:22:27
匿名


这是个老问题。我回来只是想提出另一个答案。注意:其他更好的答案已经存在,这只是为了教育目的。
最简单的方法是照别人说的做;如果要保留现有数据,请执行CREATE TABLE;如果存在,请执行DROP,然后执行CREATE TABLE,如果您想要一个新创建的表。
另一种方法是查询系统表是否存在,然后从那里继续。
SELECT true FROM pg_tables WHERE tablename =  [AND schemaname = ];

正在使用中:
-- schema independent:
SELECT true FROM pg_tables WHERE tablename = 'foo';
-- schema dependent:
SELECT true FROM pg_tables WHERE tablename = 'foo' AND schemaname = 'bar';

如果匹配,则会有一个真值,否则它应该返回一个空数据集。您可以使用该值来确定是否需要执行创建表。

2020-02-27 02:22:58
匿名


如果你运行的是Postgresql 9.1+,Skalli给出了最好的答案。
如果你喜欢我,你需要在Postgresql 8.4上这样做,您可以使用具有“重复表”异常捕获的函数。
当表存在时,这将忽略生成的错误,并继续生成其他错误。
下面是一个使用Postgresql 8.4.10的示例:
CREATE FUNCTION create_table() RETURNS VOID AS
$$
BEGIN
CREATE TABLE my_table_name(my_column INT);
EXCEPTION WHEN duplicate_table THEN
-- Do nothing
END;
$$
LANGUAGE plpgsql;

2020-02-27 02:23:15
匿名


在创建表之前,我用来检查表是否存在(Java&PostgreSQL)
的内容。我希望这对某些人有帮助。
这里没有实现create table部分,只是检查表是否已经存在。
传入到数据库和表名的连接,它应该返回表是否存在。
public boolean SQLTableExists(Connection connection, String tableName) {
boolean exists = false;
try {
Statement stmt = connection.createStatement();
String sqlText = "SELECT tables.table_name FROM information_schema.tables WHERE table_name = '" + tableName + "'";
ResultSet rs = stmt.executeQuery(sqlText);
if (rs != null) {
while (rs.next()) {
if (rs.getString(1).equalsIgnoreCase(tableName)) {
System.out.println("Table: " + tableName + " already exists!");
exists = true;
} else {
System.out.println("Table: " + tableName + " does not appear to exist.");
exists = false;
}
}
}
} catch (SQLException sqlex) {
sqlex.printStackTrace();
}
return exists;
}

2020-02-27 02:23:29
匿名


最简单的答案是:
catch{
#create table here
}

如果不存在,则创建一个表,如果存在,则生成一个错误。错误被捕获。

2020-02-27 02:23:48
匿名


http://www.postgresql.org/docs/8.2/static/sql droptable.html

2020-02-27 02:23:59
匿名


尝试在表上运行查询。如果抛出异常,则捕获异常并创建新表。
try {
int a = db.queryForInt("SELECT COUNT(*) FROM USERS;");
}
catch (Exception e) {
System.out.print(e.toString());
db.update("CREATE TABLE USERS (" +
"id SERIAL," +
"PRIMARY KEY(id)," +
"name varchar(30) NOT NULL," +
"email varchar(30) NOT NULL," +
"username varchar(30) NOT NULL," +
"password varchar(30) NOT NULL" +
");");
}
return db;

2020-02-27 02:24:13
匿名


World is powered by solitude
备案号:湘ICP备19012068号