我可以在不检查约束的情况下清空表

时间:2017-02-27 10:55:08

标签: postgresql

上下文:我是一个大型项目的新手,拥有大量的PostgreSQL表(46)和外键,没有文档。我们使用Java,Spring,Hibernate和TestNG。

目标:我正在寻找一个能够清空数据库的脚本(在每个单元测试用例之前调用它)。不幸的是,我不能花太多时间来查找外键以便以正确的顺序清空表。

问题:有没有办法清空(我不想放弃它)一个表而不检查外键的约束?

1 个答案:

答案 0 :(得分:0)

如@a_horse_with_no_name所述,对每个表使用truncate ... cascade将起作用。该链接还提供了一个自动循环遍历数据库中所有表的函数。

如果你有大表,有很多外键,可能需要花很多时间来浏览所有外键索引。在这种情况下,最好转储模式,删除数据库,重新创建数据库并批量重新加载模式。链接中有一个示例,但它并没有告诉您如何运行它们。这有点精致:

#!/bin/sh

# Run this as the postgres user because you need create database permissions
# I'm assuming you're using a Unix variant, 
# the postgresql database is at localhost,
# and that psql trusts the Unix account.  
# Otherwise add -h hostname to the command lines 
# and set $PGPASSWORD variable before the first command.

pg_dump –s yourdb > /tmp/clean.sql
psql –c "drop database yourdb;"
psql –c "create database yourdb with owner you;"
psql yourdb < /tmp/clean.sql
rm –f /tmp/clean.sql