无需手动删除已创建的表即可运行查询

时间:2017-08-05 13:57:02

标签: sql postgresql create-table

SQL新手,使用PostgreSQL。

我正在尝试一些初学者问题,但我遇到了问题。 为了确保我在测试时不会遇到任何未知错误,我会按步骤编写查询,即

CREATE TABLE x(...);

...

run query..

CREATE TABLE x(...);

CREATE TABLE y(...);

run query

---等等。

问题是,在我创建表之后,如果我想再次尝试运行查询,我必须删除它,否则我得到

  

'错误:关系“x”已经存在。'

看起来像是一个微不足道的问题,但在浏览了stackoverflow,谷歌,postgre的网站后,我还没有找到任何东西。

3 个答案:

答案 0 :(得分:1)

如果表格存在,您可以删除该表格,如果该表格不存在,您可以根据需要创建该表格。

DROP TABLE IF EXISTS tableName ...

CREATE TABLE IF NOT EXISTS tableName ...

查看creating a tabledropping a table的文档。

答案 1 :(得分:1)

您不应该使用临时表 - 除非您有特定的表现(或其他)原因。

而是使用公用表表达式(CTE):

with x as (
      <code here>
     ),
     y as (
      <code here>
     ),
     . . .
select . . .

CTE是查询的一部分,因此它们不会在查询运行之间保留。瞧!命名或临时表没问题。

答案 2 :(得分:0)

如果您真的只是练习并且数据不重要,您可以使用TEMPORARY表。然后一个简单的断开连接和重新连接将它们扔掉,给你一个干净的石板。

CREATE TEMPORARY TABLE x(...);

或者您甚至可以使用事务范围的临时表,这些表在提交或回滚时被删除:

BEGIN;

CREATE TEMPORARY TABLE x(...) ON COMMIT DROP;

INSERT ...

COMMIT;

或者,当然,您可以在最后ROLLBACK的交易中进行迭代开发。

BEGIN;

CREATE TABLE x(...);

INSERT ...

ROLLBACK;