DELETE

    注意事项

    • 要删除表中的数据,用户必须对它有DELETE权限。同样也必须有USING子句引用的表以及condition上读取的表的SELECT权限。
    • 对于列存表,暂时不支持RETURNING子句。

    参数说明

    • WITH [ RECURSIVE ] with_query [, …]

      用于声明一个或多个可以在主查询中通过名称引用的子查询,相当于临时表。

      如果声明了RECURSIVE,那么允许SELECT子查询通过名称引用它自己。

      其中with_query的详细格式为:

      with_query_name [ ( column_name [, …] ) ] AS

      ( {select | values | insert | update | delete} )

      – with_query_name指定子查询生成的结果集名称,在查询中可使用该名称访问

      子查询的结果集。

      – column_name指定子查询结果集中显示的列名。

    • table_name

      目标表的名称(可以有模式修饰)。

      取值范围:已存在的表名。

    • alias

      目标表的别名。

      取值范围:字符串,符合标识符命名规范。

    • using_list

    • condition

      一个返回Boolean值的表达式,用于判断哪些行需要被删除。

    • WHERE CURRENT OF cursor_name

      当前不支持,仅保留语法接口。

    • output_expr

      DELETE命令删除行之后计算输出结果的表达式。该表达式可以使用表的任意字段。可以使用*返回被删除行的所有字段。

    • output_name

      一个字段的输出名称。

      取值范围:字符串,符合标识符命名规范。

    1. postgres=# CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.customer_address;
    2. postgres=# DELETE FROM tpcds.customer_address_bak WHERE ca_address_sk < 14888;
    3. postgres=# DELETE FROM tpcds.customer_address_bak;
    4. postgres=# DROP TABLE tpcds.customer_address_bak;

    优化建议

    • 如果要删除表中的所有记录,建议使用truncate语法。