make_oidjoins_check
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:1k
- #! /bin/sh
- # You first run findoidjoins on the template1 database, and send that
- # output into this file to generate a list of SQL statements.
- # NOTE: any field that findoidjoins thinks joins to more than one table
- # will NOT be checked by the output of this script. You should be
- # suspicious of multiple entries in findoidjoins' output.
- # Caution: you may need to use GNU awk.
- AWK=${AWK:-awk}
- trap "rm -f /tmp/$$ /tmp/$$a /tmp/$$b" 0 1 2 3 15
- # Read input
- cat "$@" >/tmp/$$
- # Look for fields with multiple references.
- cat /tmp/$$ | cut -d' ' -f2 | sort | uniq -d >/tmp/$$a
- if [ -s /tmp/$$a ] ; then
- echo "Ignoring these fields that link to multiple tables:" 1>&2
- cat /tmp/$$a 1>&2
- fi
- # Get the non-multiply-referenced fields.
- cat /tmp/$$ | while read LINE
- do
- set -- $LINE
- grep "$2" /tmp/$$a >/dev/null 2>&1 || echo $LINE
- done >/tmp/$$b
- # Generate the output.
- cat /tmp/$$b |
- $AWK -F'[ .]' '
- BEGIN
- {
- printf "
- --n
- -- This is created by pgsql/contrib/findoidjoins/make_oidjoin_checkn
- --n";
- }
- {
- printf "
- SELECT oid, %s.%s n
- FROM %s n
- WHERE %s.%s != 0 AND n
- NOT EXISTS(SELECT * FROM %s AS t1 WHERE t1.oid = %s.%s);n",
- $2, $3, $2,
- $2, $3,
- $5, $2, $3;
- }'
- exit 0