make_oidjoins_check
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:1k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. #! /bin/sh
  2. # You first run findoidjoins on the template1 database, and send that
  3. # output into this file to generate a list of SQL statements.
  4. # NOTE: any field that findoidjoins thinks joins to more than one table
  5. # will NOT be checked by the output of this script.  You should be
  6. # suspicious of multiple entries in findoidjoins' output.
  7. # Caution: you may need to use GNU awk.
  8. AWK=${AWK:-awk}
  9. trap "rm -f /tmp/$$ /tmp/$$a /tmp/$$b" 0 1 2 3 15
  10. # Read input
  11. cat "$@" >/tmp/$$
  12. # Look for fields with multiple references.
  13. cat /tmp/$$ | cut -d' ' -f2 | sort | uniq -d >/tmp/$$a
  14. if [ -s /tmp/$$a ] ; then
  15. echo "Ignoring these fields that link to multiple tables:" 1>&2
  16. cat /tmp/$$a 1>&2
  17. fi
  18. # Get the non-multiply-referenced fields.
  19. cat /tmp/$$ | while read LINE
  20. do
  21. set -- $LINE
  22. grep "$2" /tmp/$$a >/dev/null 2>&1 || echo $LINE
  23. done >/tmp/$$b
  24. # Generate the output.
  25. cat /tmp/$$b |
  26. $AWK -F'[ .]' '
  27. BEGIN 
  28. {
  29. printf "
  30. --n
  31. -- This is created by pgsql/contrib/findoidjoins/make_oidjoin_checkn
  32. --n";
  33. }
  34. {
  35. printf "
  36. SELECT oid, %s.%s n
  37. FROM %s n
  38. WHERE %s.%s != 0 AND n
  39. NOT EXISTS(SELECT * FROM %s AS t1 WHERE t1.oid = %s.%s);n",
  40. $2, $3, $2,
  41. $2, $3,
  42. $5, $2, $3;
  43. }'
  44. exit 0