上下文:我是一个大型项目的新手,拥有大量的PostgreSQL表(46)和外键,没有文档。我们使用Java,Spring,Hibernate和TestNG。
目标:我正在寻找一个能够清空数据库的脚本(在每个单元测试用例之前调用它)。不幸的是,我不能花太多时间来查找外键以便以正确的顺序清空表。
问题:有没有办法清空(我不想放弃它)一个表而不检查外键的约束?
答案 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