使用分区时,通常需要一次删除所有分区。
然而,
DROP TABLE tablename*
不起作用。(不支持通配符)。
有没有一种优雅的(读起来很容易记住的)方法,可以用一个通配符在一个命令中删除多个表?
发布于 2010-11-17 15:19:22
使用逗号分隔的列表:
DROP TABLE foo, bar, baz;
如果你真的需要一把步枪,这把就行了:
CREATE OR REPLACE FUNCTION footgun(IN _schema TEXT, IN _parttionbase TEXT)
RETURNS void
LANGUAGE plpgsql
AS
$$
DECLARE
row record;
BEGIN
FOR row IN
SELECT
table_schema,
table_name
FROM
information_schema.tables
WHERE
table_type = 'BASE TABLE'
AND
table_schema = _schema
AND
table_name ILIKE (_parttionbase || '%')
LOOP
EXECUTE 'DROP TABLE ' || quote_ident(row.table_schema) || '.' || quote_ident(row.table_name) || ' CASCADE ';
RAISE INFO 'Dropped table: %', quote_ident(row.table_schema) || '.' || quote_ident(row.table_name);
END LOOP;
END;
$$;
SELECT footgun('public', 'tablename');
发布于 2012-01-27 16:15:09
这是对这个问题的另一个老生常谈的答案。它可以在ubuntu
上运行,也许还可以在其他一些操作系统上运行。在postgres命令提示符下执行\dt
(在我的例子中,命令提示符是在postgres内部运行的)。然后,您将在终端中看到许多表格。现在使用genome-terminal
的ctrl+click-drag
功能复制所有表的名称。
打开python,执行一些字符串处理(将'‘替换为’',然后将'\n‘替换为’,'),您将得到所有表的逗号分隔列表。现在,在psql shell中执行一个drop table CTRL+SHIFT+V
,就完成了。我知道这太具体了,我只是想分享一下。:)
发布于 2016-07-27 22:36:29
我用了这个。
echo "select 'drop table '||tablename||';' from pg_tables where tablename like 'name%'" | \
psql -U postgres -d dbname -t | \
psql -U postgres -d dbname
替换为dbname
和name%
的相应值。
https://stackoverflow.com/questions/4202135
复制相似问题