From: rsoulliere Date: Wed, 5 Oct 2011 18:09:08 +0000 (-0400) Subject: Add file for 1.6 branch. X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=539138423c15097d505e59d3482a624775497da0;p=evergreen%2Ftadl.git Add file for 1.6 branch. --- diff --git a/admin/AdminMisc.xml b/admin/AdminMisc.xml new file mode 100644 index 0000000000..331f46e1ec --- /dev/null +++ b/admin/AdminMisc.xml @@ -0,0 +1,615 @@ + + + + + Server Operations + receipt template editor + + This chapter deals with basic server operations such as starting and stopping Evergreen as well wall + security, backing up and troubleshooting Evergreen. + + +
+ Starting, Stopping and Restarting + Occasionally, you may need to restart Evergreen. It is imperative that you understand the basic + commands to stop and start the Evergreen server. You can start and stop Evergreen from the command line of + the server using the osrf_ctl.sh script located in the + openils/bin directory. + The osrf_ctl.sh command must be run as the opensrf user. + To view help on osrf_ctl.sh and get all of its options, run: + osrf_ctl.sh -h + To start Evergreen, run: + osrf_ctl.sh -l -a start_all + The flag is used to indicate that Evergreen is configured to use localhost as + the host. If you have configured opensrf.xml to use your real hostname, do not use the flag. The + option is required and indicates the action of the command. In this case + . + + + If you receive the error message: osrf_ctl.sh: command not found, then your environment variable + PATHenvironment variablePATH does not include the + /openils/bin directory. You can set it using the following command: + export PATH=$PATH:/openils/bin + If you receive the error message Can't locate OpenSRF/System.pm in @INC … BEGIN + failed–compilation aborted, then your environment variable PERL5LIBenvironment + variablePERL5LIB does not + include the /openils/lib/perl5 directory. You can set it + using the following command: + export PERL5LIB=$PERL5LIB:/openils/lib/perl5 + + It is also possible to start a specific service. For example: + osrf_ctl.sh -l -a start_router + will only start the router service. + + If you decide to start each service individually, you need to start them in a specific order: + +osrf_ctl.sh -l -a start_router +osrf_ctl.sh -l -a start_perl +osrf_ctl.sh -l -a start_c + + + After starting or restarting Evergreen, it is also necessary to restart the Apache web server + web serverApache for the OPAC to work correctly. + To stop Evergreen, run: + osrf_ctl.sh -l -a stop_all + As with starting, you can choose to stop services individually. + To restart Evergreen, run: + osrf_ctl.sh -l -a restart_all + + Starting Specific Perl Services + It is also possible to start and stop a specific perl service using opensrf-perl.pl. Here is the syntax for starting a perl service with this command: +opensrf-perl.pl --service <service-name> -a start -p <PID-directory> +Example (starting the booking module): +opensrf-perl.pl --service open-ils.booking -a start -p /openils/var/run/opensrf + +This is the syntax for stopping a perl service with this command: +opensrf-perl.pl --service <service-name> -a stop -p <PID-directory> +Example (stopping the booking module): +opensrf-perl.pl --service open-ils.booking -a stop -p /openils/var/run/opensrf + These commands can be very useful when you edit Perl modules and only need to restart the specific service for changes to take effect. + + + The default for the PID-directory: /openils/var/run/opensrf + For a clustered server instance of Evergreen, you must store the PIDs on a directory + that is local to each server, or else one of your cluster servers may try killing processes on itself that actually have PIDs on other servers. + For services running on the local server use the to force the hostname to be localhost, + instead of the fully qualified domain name for the machine. + To see other options run the command with the option: +opensrf-perl.pl -h + +For a list of Evergreen/OpenSRF perl services see: . + +
+
+ Automating Evergreen Startup and Shutdown + Once you understand starting and stopping Evergreen, you will want to create a start up script for two purposes: + + Allow you to start, restart and stop Evergreen, SIP, reporter and z39.50 services with one command. + Allow Evergreen to stop and start properly during a system restart. + + The following procedure is for Debian or Ubuntu distributions of Linux. + + + Create a bash script for starting Evergreen and all associated services. Here is an example script: + + +> ${SRU_LOG} 2>&1" & + sleep 1 + pids=`ps -eo pid,args | grep $sru_name | grep -v grep | cut -c1-6` + if [ x"$pids" = x ] ; then + echo FAILURE + else + echo OK + fi + echo "Starting Z39.50/SRU: $pids" + return $RETVAL +} + +z39_50_stop() { + pids=`ps -eo pid,args | grep $sru_name | grep -v grep | cut -c1-6` + if [ x"$pids" = x ] ; then + echo FAILURE ; echo $"Stopping Z39.50/SRU: not running" ; RETVAL=1 + else + kill $pids ; RETVAL=$? + if [ $RETVAL ] ; then + echo OK ; echo $"Stopping Z39.50/SRU: $pids" + else + echo FAILURE + fi + fi + return $RETVAL +} +]]> + + + + Save file in /etc/bin folder as evergreenstart + if you would like this as a manual script for starting Evergreen services. + + Save file in /etc/init.d folder as evergreenstart + if you would like to run this script automatically during your server's boot process as explained in later steps. + + + Ensure that the script is executable. +sudo chmod 755 evergreenstart + + + Test the script by running it from the command line as the root user. +/etc/init.d/evergreenstart restart + You will also need to restart apache as the root user. +/etc/init.d/apache2 restart + + + + The next steps are optional if you want to automate Evergreen so it starts during your server's boot process. + + Update runlevel defaults of the new evergreenstart service as the root user: +update-rc.d evergreenstart defaults 80 20 + + For Evergreen to start properly during a reboot, you will want to ensure that the first number + () is lower than the assigned + starting priority for Apache, so it starts before Apache. It should also have a larger stopping priority number + () than Apache so it stops + after Apache during a boot cycle. + + + + Test the startup script by rebooting the Evergreen Server and checking to ensure that all Evergreen sercices started properly. + + + This has not yet been tested in a Evergreen multi-server, brick configuration. + For more information on update-rc.d you should review the documentation on this topic for + + Debian or Ubuntu + depending on your distribution of Linux. +
+
+ Backing Up + databasesbacking up + Backing up your system files and data is a critical task for server and database administrators. + Having a strategy for backing up and recovery could be the difference between a minor annoyance for users and + a complete catastrophe. + + Backing up the <application>Evergreen</application> Databasedatabases + Most of the critical data for an Evergreen system – patrons, bibliographic records, holdings, + transactions, bills – is stored in the PostgreSQLdatabases + PostgreSQL database. You can therefore use normal + PostgreSQL backup procedures to backup this data. For example, the simplest method of backing up the Evergreen + database is to use the pg_dump command to create a live backup of the database without having to + interrupt any Evergreen services. Here is an example pg_dump command which will dump a local Evergreen database into a the file + evergreen_db.backup: + pg_dump -U evergreen -h localhost -f evergreen_db.backup evergreen + To restore the backed up database into a new database, create a new database using the + template0 database template and the UTF8 encoding, and run the psql command, specifying the new + database as your target: + createdb -T template0 -E UTF8 -U evergreen -h localhost new_evergreen + psql -U evergreen -h localhost -f evergreen_db.backup new_evergreen + + This method of backup is only suitable for small Evergreen instances. Larger sites + should consider implementing continuous archiving (also known as log shipping) to provide + more granular backups with lower system overhead. More information on backing up PostgreSQL + databases can be found in the official PostgreSQL + documentation. + + + + Backing up Evergreen Files + directoriesbacking up + When you deploy Evergreen, you will probably customize many aspects of your system including + the system configuration files, Apache configuration files, OPAC and Staff Client. In order to + protect your investment of time, you should carefully consider the best approach to backing up + files. + There are a number of ways of tackling this problem. You could create a script that regularly + creates a time-stamped tarball of all of these files and copies it to a remote server - but that + would build up over time to hundreds of files. You could use rsync + rsync to ensure that the files of + interest are regularly updated on a remote server - but then you would lose track of the changes to + the files, should you make a change that introduces a problem down the road. + Perhaps one of the best options is to use a version control system like + BazaarVersion Control SystemSubversion, + gitVersion Control Systemgit + or SubversionVersion Control System + Subversion to regularly push updates of the files you care about to a repository on a + remote server. This gives you the advantage of quickly being able to run through the history of the + changes you made, with a commenting system that reminds you why each change was made, combined with + remote storage of the pertinent files in case of disaster on site. In addition, your team can create + local copies of the repository and test their own changes in isolation from the production + system. Using a version control system also helps to recover system customizations after an + upgrade. + + + Full System Backup + A full system backup archives every file on the file system. Some basic methods require you + to shut down most system processes; other methods can use mirrored RAIDRAID setups or + SANSAN storage to + take snapshot backups of your full system while the system continues to run. The subject of how + to implement full system backups is beyond the scope of this documentation. + +
+
+ Security + security + As with an ILS and resource accessible from the world wide web careful consideration needs to be + given to the security of your Evergreen servers and database. While it is impossible to cover all aspects + of security, it is important to take several precautions when setting up production Evergreen site. + + + Change the Evergreen admin password and keep it secure. The + default admin password is known by anyone who has installed Evergreen. It is not a secret + and needs to be changed by the Administrator. It should also only be shared by those who + need the highest level of access to your system. + + + Create strong passwords using a combination of numerical and alphabetical characters + for all of the Administrative passwords including the postgres and + opensrf users + + + Open ports in the firewallfirewall with caution - It is only necessary to open ports + 80 and 443 + for TCP connections to the Evergreen server from the OPAC and the staff client. It is + critical for administrators to understand the concepts of network security and take precautions to minimize vulnerabilities. + + + + Use permissions permissions and permission groups wisely - it is important to understand the + purpose of the permissions and to only give users the level of access that they require. + + + +
+
+ Managing Log Files + logsmanaging + Evergreen comes with a sophisticated logging system, but it is important to manage the OpenSRF + and Evergreen logs. This section will provide a couple of log management techniques and tools. + + Using the <systemitem class="service">logrotate</systemitem> Utility to Manage Log Size + logsLog Rotate + Fortunately, this is not a new problem for Unix administrators, and + there are a number of ways of keeping your logs under control. + On Debian and Ubuntu, for example, + the logrotate utility controls when old log files are compressed and a new log file is started. + logrotate runs once a day and checks all log files that it knows about to see if a + threshold of time or size has been reached and rotates the log files if a threshold condition has been met. + To teach logrotate to rotate Evergreen logs on a weekly basis, or if they are > 50MB in size, + create a new file /etc/logrotate.d/evergreen with the following contents: + +compress +/openils/var/log/*.log { +# keep the last 4 archived log files along with the current log file + # log log.1.gz log.2.gz log.3.gz log.4.gz + # and delete the oldest log file (what would have been log.5.gz) +rotate 5 +# if the log file is > 50MB in size, rotate it immediately +size 50M + # for those logs that don't grow fast, rotate them weekly anyway + weekly +} + + + + Changing Logging Level for <application>Evergreen</application> + logslogging levels + Change the Log Levels in your config files. Changing the level of logging will help + narrow down errors. + + A high logging level is not wise to do in a production environment since it + will produce vastly larger log files and thus reduce server performance. + + Change logging levels by editing the configuration file + /openils/conf/opensrf_core.xmlconfiguration filesopensrf_core.xml + you will want to search for lines containing <loglevel>. + the default setting for loglevel is 3 which will log errors, + warnings and information. + The next level is 4 which is for debugging and provides additional information + helpful for the debugging process. + Thus, lines with: + <loglevel>3</loglevel> + Should be changed to: + <loglevel>4</loglevel> + to allow debugging level logging + Other logging levels include 0 for no logging, + 1 for logging errors and 2 for logging warnings + and errors. + +
+
+ Installing PostgreSQL from Source + databasesPostgreSQL + Some Linux distributions, such as Debian Etch (4.0), do not offer PostgreSQL + version 8.2 as an installable package. Before you continue, examine the software dependencies listed in + to ensure that your Linux distribution supports the required version of PostgreSQL. + + + Some Linux distributions, such as Debian Etch (4.0), do not offer PostgreSQL + version 8.2 as an installable package. Before you continue, examine the software dependencies listed in + to ensure that your Linux distribution supports the required version of PostgreSQL. + + + + + Install the application stow on your system if it is not already installed. Issue the following command as + the root user: + +apt-get install stow + + + + Download, compile, and install the latest release for PostgreSQL 8.2 (which was version 8.2.12 at the time of this writing). + As the root user, follow these steps: + + + +wget http://wwwmaster.postgresql.org/redir/198/h/source/v8.2.17/postgresql-8.2.17.tar.bz2 +tar xzf postgresql-8.2.17.tar.gz +cd postgresql-8.2.17 +./configure --with-perl --enable-integer-datetimes --with-openssl --prefix=/usr/local/stow/pgsql +make +make install +cd contrib +make +make install +cd xml2 +make +make install +cd /usr/local/stow +stow pgsql + + + + + + Create the new user postgres to run the PostgreSQL processes. + As the root user, execute this command: + adduser postgres + + + Initialize the database directory and start up PostgreSQL. As the root user, follow these steps: + + + +mkdir -p /usr/local/pgsql/data +chown postgres /usr/local/pgsql/data +su - postgres +initdb -D /usr/local/pgsql/data -E UNICODE --locale=C +pg_ctl -D /usr/local/pgsql/data -l /home/postgres/logfile start + + + + If an error occurs during the final step above, review the path of the home directory for the + postgres user. It may be /var/lib/postresql instead of /home/postres. + + + +
+
+ Configuring PostgreSQL + databasesPostgreSQL + The values of several PostreSQL configuration parameters may be changed for enhanced performance. The following table lists the default values + and some suggested updates for several useful parameters: + + Suggested configuration values + + + + + + + Parameter + Default + Suggested + + + + + default_statistics_target + 10 + 100 + + + work_mem + 4Mb + 128Mb + + + shared_buffers + 8Mb + 512Mb + + + effective_cache_size + 128Mb + 4Gb + + + +
+
+
diff --git a/admin/Upgrading-Evergreen_1.6.xml b/admin/Upgrading-Evergreen_1.6.xml new file mode 100644 index 0000000000..1804b8a081 --- /dev/null +++ b/admin/Upgrading-Evergreen_1.6.xml @@ -0,0 +1,431 @@ + + + + Upgrading Evergreen to 1.6.1 + + This Chapter will explain the step-by-step process of upgrading Evergreen + to 1.6.1, including steps to upgrade OpenSRF. Before + upgrading, it is important to carefully plan an upgrade strategy to minimize system downtime and + service interruptions. All of the steps in this chapter are to be completed from the command line. + + + In the following instructions, you are asked to perform certain steps as either the root or opensrf user. + + Debian: To become the root user, issue the su command and enter the password of the + root user. + Ubuntu: To become the root user, issue the sudo su command and enter the password of your current user. + + To switch from the root user to a different user, issue the su - [user] command; for example, + su - opensrf. Once you have become a non-root user, to become the root user again simply issue the exit command. + In the following instructions, /path/to/OpenSRF/ represents the path to the OpenSRF source directory. +
+ Backing Up Data + + + As root, stop the Apache + web serverweb serverApache. + + + As the opensrf user, stop all + Evergreen + and OpenSRF services: + osrf_ctl.sh -l -a stop_all + + + Back up of the /openils + directory. + + + Back up the evergreen + database. + + +
+
+ Upgrading OpenSRF to 1.6OpenSRF + + + As the opensrf user, download and extract the source files for OpenSRF + 1.6: + +wget http://open-ils.org/downloads/opensrf-1.6.3.tar.gz +tar xzf opensrf-1.6.3.tar.gz + + A new directory opensrf-1.6.3 is created. + For the latest edition of OpenSRF, check the Evergreen download page at + . + + + + As the root user, install the software prerequisites using the automatic + prerequisite installer. + +aptitude install make +cd /home/opensrf/opensrf-1.6.3 + + Replace below with the following value + for your distribution: + + + for Debian Etch (4.0) + LinuxDebian + + + for Debian Lenny (5.0) + + + for Ubuntu Hardy Heron (8.04) + LinuxUbuntu + + + for Ubuntu Intrepid Ibex + (8.10) + + + for Ubuntu Jaunty Jackalope + (9.04) + + + for Ubuntu Karmic Koala + (9.10) + + + for Ubuntu Lucid Lynx + (10.04) + + + for CentOS 5 + + + +cd /path/to/OpenSRF +make -f src/extras/Makefile.install [distribution] + + This will install a number of packages required by OpenSRF on your system, + including some Perl modules from CPANPerlCPAN + . You can type no to the initial CPAN + configuration prompt to allow it to automatically configure itself to download + and install Perl modules from CPAN. The CPAN installer will ask you a number of + times whether it should install prerequisite modules - type yes. + + + As the opensrf user, configure and compile OpenSRF: + You can include the and configure options if + you want to include support for PythonPython and Java + Java, respectively. + +cd /home/opensrf/opensrf-1.6.3 +./configure --prefix=/openils --sysconfdir=/openils/conf +make + + + + As the root user, return to your OpenSRF build directory and install + OpenSRF: + +cd /home/opensrf/opensrf-1.6.3 +make install + + + + As the root user, change the ownership of the installed files to the + opensrf user: + chown -R opensrf:opensrf /openils + + + Restart and Test OpenSRF + +osrf_ctl.sh -l -a start_all +/openils/bin/srfsh +srfsh# request opensrf.math add 2 2 + + You should see output such as: + +Received Data: 4 + +------------------------------------ +Request Completed Successfully +Request Time in seconds: 0.007519 +------------------------------------ + +srfsh# + + If test completed successfully move onto the next section. + Otherwise, refer to the troubleshooting chapter + of this documentation. + + +
+
+ Upgrade <application>Evergreen</application> from 1.4 to 1.6.1 + + + As the opensrf user, download and extract Evergreen 1.6.1.8 + + +wget http://open-ils.org/downloads/Evergreen-ILS-1.6.1.8.tar.gz +tar xzf Evergreen-ILS-1.6.1.8.tar.gz + + For the latest edition of Evergreen check the Evergreen download page at + and adjust upgrading instructions accordingly. + + + As the root user, install the prerequisites: + cd /home/opensrf/Evergreen-ILS-1.6.1.8 + On the next command, replace with one of + these values for your distribution of Debian or Ubuntu: + + + for Debian Etch (4.0)LinuxDebian + + + for Debian Lenny (5.0) + + + for Ubuntu Hardy Heron + (8.04)LinuxUbuntu + + + for Ubuntu Intrepid Ibex + (8.10) + + + for Ubuntu Jaunty Jackalope + (9.04) + + + for Ubuntu Karmic Koala + (9.10) or Ubuntu Lucid Lynx + (10.04) + + + make -f Open-ILS/src/extras/Makefile.install + + + As the opensrf user, configure and compile + Evergreen: + cd /home/opensrf/Evergreen-ILS-1.6.1.8 + ./configure --prefix=/openils --sysconfdir=/openils/conf + make + + + As the root user, install + Evergreen: + make STAFF_CLIENT_BUILD_ID=rel_1_6_1_8 install + + + Change to the Evergreen installation + directory: + cd /home/opensrf/Evergreen-ILS-1.6.1.8 + + + As the root user, change all files to be owned by the + opensrf user and group: + chown -R opensrf:opensrf /openils + + + As the root user, build live-db-setup.pl for the cgi-bin + bootstrapping scripts and offline-config.pl for the offline staff client data uploader: + +cd /home/opensrf/Evergreen-ILS-1.6.1.8 +perl Open-ILS/src/support-scripts/eg_db_config.pl --create-bootstrap --create-offline \ +--user evergreen --password evergreen --hostname localhost --port 5432 \ +--database evergreen + + + + As the opensrf user, update server symlink in /openils/var/web/xul/: + +cd /openils/var/web/xul/ +rm server +ln -s rel_1_6_1_8/server + + + + Update the Evergreen database: + it is recommended that you back up your Evergreen database in order to restore your data if anything goes wrong. + + +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.4.0.5-1.6.0.0-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.0-1.6.0.1-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.1-1.6.0.2-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.2-1.6.0.3-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.3-1.6.0.4-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.4-1.6.1.0-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.0-1.6.1.1-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.1-1.6.1.2-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.2-1.6.1.3-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.3-1.6.1.4-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.4-1.6.1.5-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.5-1.6.1.6-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.6-1.6.1.7-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.8-1.6.1.8-upgrade-db.sql evergreen + + + + + As the opensrf user, + copy /openils/conf/oils_web.xml.example to /openils/conf/oils_web.xml + configuration filesoils_web.xml + (needed for acquisitions templates). + cp /openils/conf/oils_web.xml.example /openils/conf/oils_web.xml + + + Update opensrf_core.xml and opensrf.xml by copying the new example files + (/openils/conf/opensrf_core.xml.example and /openils/conf/opensrf.xml). + configuration filesopensrf.xml + cp /openils/conf/opensrf_core.xml.example /openils/conf/opensrf_core.xml + configuration filesopensrf_core.xml + cp /openils/conf/opensrf.xml.example /openils/conf/opensrf.xml + + + Update opensrf.xml with the database connection info: + +perl Open-ILS/src/support-scripts/eg_db_config.pl --update-config --service all --user evergreen \ +--password evergreen --hostname localhost --port 5432 --database evergreen + + + + Update /etc/apache2/startup.pl by copying the example from + Open-ILS/examples/apache/startup.pl.configuration filesstartup.pl + + + Update /etc/apache2/eg_vhost.conf by copying the example from + Open-ILS/examples/apache/eg_vhost.conf.configuration fileseg_vhost.conf + + + Update /etc/apache2/sites-available/eg.conf by copying the example from Open-ILS/ + examples/apache/eg.conf.configuration fileseg.conf + + + Recover customizations you have made to the ApacheApache + configuration files. For example, if you purchased an SSL certificate, you + will need to edit eg.conf to point to the appropriate SSL certificate files. + SSLcertificates + + +
+
+ Upgrade <application>Evergreen</application> from 1.6.0 to 1.6.1 + + + Follow steps 1-8 of the instructions for upgrading Evergreen from 1.4 + + + + Update the Evergreen database: + It is recommended that you back up your Evergreen database in order to restore your data if anything goes wrong. + + +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.0.4-1.6.1.0-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.0-1.6.1.1-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.1-1.6.1.2-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.2-1.6.1.3-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.3-1.6.1.4-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.4-1.6.1.5-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.5-1.6.1.6-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.6-1.6.1.7-upgrade-db.sql evergreen +psql -U evergreen -h localhost -f Open-ILS/src/sql/Pg/1.6.1.7-1.6.1.8-upgrade-db.sql evergreen + + + + + Follow steps 10-16 of the instructions for upgrading Evergreen from 1.4 + + + + +
+
+ Restart Evergreen and Test + + + As the opensrf user, start all + Evergreen and OpenSRF + services: + osrf_ctl.sh -l -a start_all + + + As the opensrf user, run autogen to refresh the static + organizational data files:autogen + +cd /openils/bin +./autogen.sh -c /openils/conf/opensrf_core.xml -u + + + + + Start srfsh and try logging in using your Evergreen + username and password: + +/openils/bin/srfsh +srfsh% login + + + + Start the Apache web server. + + + + If you encounter errors, refer to the troubleshooting + section of this documentation for tips + on finding solutions and seeking further assistance from the Evergreen community. + +
+
+ Upgrading PostgreSQL from 8.2 to 8.4 + Evergreen 1.6.1 supports PostgreSQL version 8.4 and it is recommended that you upgrade PostgreSQL when you upgrade Evergreen to 1.6. + The order of the following steps is very important.databasesPostgreSQL + + + As opensrf, stop the evergreen and opensrf services: + osrf_ctl.sh -l -a stop_all + + + Backup the Evergreen database data + + + Upgrade to Postgresql 8.4 by removing old version and installing Postgresql 8.4 + + + Create an empty Evergreen database in postgresql 8.4 by issuing the following commands as the postgres user: + + +createdb -E UNICODE evergreen +createlang plperl evergreen +createlang plperlu evergreen +createlang plpgsql evergreen +psql -f /usr/share/postgresql/8.4/contrib/tablefunc.sql evergreen +psql -f /usr/share/postgresql/8.4/contrib/tsearch2.sql evergreen +psql -f /usr/share/postgresql/8.4/contrib/pgxml.sql evergreen + + + + + As the postgres user on the PostgreSQL server, create a PostgreSQL user named evergreen for the database cluster: + createuser -P -s evergreen + Enter the password for the new PostgreSQL superuser (evergreen) + + + Restore data from backup created in step 1. + + + To point tsearch2 to proper function names in 8.4, run the SQL script + /home/opensrf/Evergreen-ILS*/Open-ILS/src/sql/Pg/000.english.pg84.fts-config.sql using the psql command. + cd /home/opensrf/Evergreen-ILS* + psql -f /Open-ILS/src/sql/Pg/000.english.pg84.fts-config.sql evergreen + + + Restart Evergreen and OpenSRF services + + + For additional information regarding upgrading PostgreSQL, see the following documentation in PostgreSQL: + + + + + + +
+
diff --git a/admin/actiontriggers.xml b/admin/actiontriggers.xml new file mode 100644 index 0000000000..adeb6f2082 --- /dev/null +++ b/admin/actiontriggers.xml @@ -0,0 +1,314 @@ + + + + Action Triggers + action triggers + + Action Triggers were introduced to Evergreen in 1.6. They allow administrators the ability to set up actions for specific events. They are useful for notification events such as + hold notifications. + + + To access the Action Triggers module, select + + Admin + Local Administration + Notifications / Action triggers + + + You must have Local Administrator permissions to access the Action Triggers module. + You will notice four tabs on this page: Event Definitions, Hooks, + Reactors and Validators. + +
+ Event Definitions + action triggersevent definitions + Event Definitions is the main tab and contains the key fields when working with action triggers. These fields include: + + Action Trigger Event Definitions + + + + + + Field + Description + + + + + Owning library + The shortname of the library for which the action / trigger / hook is defined. + + + Name + The name of the trigger event, that links to a trigger event environment containing a set of fields + that will be returned to the Validators / Reactors for processing. + + + Hooks + The name of the trigger for the trigger event. The underlying action_trigger.hook table defines the Fieldmapper + class in the core_type column off of which the rest of the field definitions hang. + + + Enabled + Sets the given trigger as enabled or disabled. This must be set to enabled for the Action trigger to run. + + + Processing Delay + Defines how long after a given trigger / hook event has occurred before the associated action (Reactor) + will be taken. + + + Processing Delay Field + Defines the field associated with the event on which the processing delay is calculated. For example, the processing delay + context field on the hold.capture hook (which has a core_type of ahr) is capture_time. + + + Processing Group Context Field + Used to batch actions based on its associated group. + + + Validators + The subroutines receive the trigger environment as an argument (see the linked Name for + the environment definition) and returns either 1 if the validator is true or 0 + if the validator returns false. + + + Reactors + Links the action trigger to the Reactor. + + + Max Event Validity Delay + Define the threshold for how far back the action_trigger_runner.pl script should reach to generate + a batch of events. + + + +
+ + + Creating Action Triggers + action triggerscreating + + From the top menu, select + + Admin + Local Administration + Notifications / Action triggers + + + + Click on the New button. + Select an Owning Library. + Create a unique Name for your new action trigger. + Select the Hook. + Check the Enabled check box. + + Create a unique Name for your new action trigger. + Set the Processing Delay in the appropriate format. Eg. 7 days to run 7 days from the trigger event + or 00:01:00 to run 1 hour after the Processing Delay Context Field. + Set the Processing Delay Context Field and Processing Group Context Field. + Select the Validator, Reactor, Failure Cleanup and Success Cleanup. + + Set the Processing Delay Context Field and Processing Group Context Field. + Enter text in the Template text box if required. These are for email messages. Here is an sample + template for sending 90 day overdue notices: + + + + Once you are satisfied with your new event trigger , click the Save button located at the bottom of the + form + + A quick and easy way to create new action triggers is to clone an existing action trigger. + + Cloning Existing Action Triggers + + Check the check box next to the action trigger you wish to clone + + + Click the Clone Selected on the top left of the page. + + + An editing window with open. Notice that the fields will be populated with content from the cloned action trigger. Edit as necessary and + give the new action trigger a unique Name. + + + Click Save. + + + + Editing Action Triggers + + Check the check box next to the action trigger you wish to delete + + + Click the Delete Selected on the top left of the page. + + + + Before deleting an action trigger, you should consider disabling it through the editing form. This way you can simply enable it if you decide that you would like to use + the action trigger in the future. + + Deleting Action Triggers + + Check the check box next to the action trigger you wish to delete + + + Click the Delete Selected on the top left of the page. + + +
+
+ Hooks + action triggershooks + Hooks define the Fieldmapper class in the core_type column off of which the rest of the field definitions hang. + + Hooks + + + + + + Field + Description + + + + + Hook Key + A unique name given to the hook. + + + Core Type + Used to link the action trigger to the IDL class in fm_IDL.xml + + + Description + Text to describe the purpose of the hook. + + + Passive + Indicates whether or not an event is created by direct user action or is circumstantial. + + + +
+ You may also create, edit and delete Hooks but the Core Type must refer to an IDL class in the fm_IDL.xml file. +
+
+ Reactors + action triggersreactors + Reactors link the trigger definition to the action to be carried out. + + Action Trigger Reactors + + + + + + Field + Description + + + + + Module Name + The name of the Module to run if the action trigger is validated. It must be defined as a subroutine in + /openils/lib/perl5/OpenILS/Application/Trigger/Reactor.pm or as a module + in /openils/lib/perl5/OpenILS/Application/Trigger/Reactor/*.pm. + + + Description + Description of the Action to be carried out. + + + +
+ You may also create, edit and delete Reactors. Just remember that their must be an associated subroutine or module in the Reactor Perl module. +
+
+ Validators + action triggersvalidators + Validators set the validation test to be preformed to determine whether the action trigger is executed. + + Action Trigger Validators + + + + + + + Field + Description + + + + + Module Name + The name of the subroutine in + /openils/lib/perl5/OpenILS/Application/Trigger/Reactor.pm to validate the action trigger. + + + Description + Description of validation test to run. + + + +
+ You may also create, edit and delete Validators. Just remember that their must be an associated subroutine in the Reactor.pm Perl module. +
+
+ Processing Action Triggers + action triggersprocessing + To run the action triggers, an Evergreen administrator will need to run the trigger processing script /openils/bin/action_trigger_runner.pl + . This should be set up as a cron job to run + periodically. + You have several options when running the script: + + : Run the pending events. + : Create hook events + : OpenSRF core config file. Defaults to: + /openils/conf/opensrf_core.xml. + : File containing a JSON Object which describes any hooks that should + use a user-defined filter to find their target objects. Defaults to: /openils/conf/action_trigger_filters.json + : When in process-hooks mode, wait up to [seconds] for the lock file to go away. + Defaults to 3600 (1 hour). + : Define which hooks to create events for. If none are defined, it defaults to the list of hooks defined + in the option. + : Print server responses to stdout (as JSON) for debugging. + : Sets the lock file for the process. + : Show help information. + +
+
+ diff --git a/admin/admin-booking.xml b/admin/admin-booking.xml new file mode 100644 index 0000000000..1a5ae446f8 --- /dev/null +++ b/admin/admin-booking.xml @@ -0,0 +1,310 @@ + + + + Booking Module Administration + + Adapted with permission from original material by the Evergreen + Community + + + + The Evergreen booking module is included in Evergreen 1.6.1.x and above.The following + documentation will include information about making cataloged items bookable; making + non-bibliographic items bookable; and setting permissions in the booking module for + staff. + + +
+ Make a Cataloged Item Bookable in Advance + booking reservationmaking a cataloged item bookable + If their permission settings allow, staff members can make items bookable. Staff members + can do this in advance of a booking request, or they can do it on the fly. + If you know in advance of the request that an item will need to be booked, you can make + the item bookable. + + + + + In the staff client, select + Search + Search the Catalog + + + + Begin a title search to find an item. + + + Click the title of the item that you want to book. + + + + The Record Summary will appear. In this view you can see + information about the item and its locations. Click + Actions for this Record + Holdings Maintenance + in the top right corner of the screen. + + + + The Holdings Maintenance screen will appear. In this screen, + you can view the volumes and copies of an item avaialable at each branch. To view the + barcodes and other information for each copy, click the arrow adjacent to the branch + with the copy that you need to view. Click on successive arrows until you find the + copy that you need to view. + + + Select the item that you want to make bookable. Right click to open the menu, and + click Make Item Bookable. + + + The item has now been added to the list of resources that are bookable. To book + the item, return to the Record Summary, and proceed with + booking.. + + + + + In Evergreen 1.6.1, there is no way to make an item “unbookable” after it has been + made bookable and has been reserved. The Delete Selected button + on this screen deletes the resource from the screen, but the item will be able to be + booked after it has been returned. + + +
+
+ Make a Cataloged Item Bookable On the Fly + If a patron wants to book an item immediately that does not have bookable status, you + can book the item on the fly if you have the appropriate permissions. + + + + Follow steps one through five in . + + + Select the item that you want to make bookable. Right click to open the menu, and + click Book Item Now. + + + A Reservations screen will appear in a new tab, and you can + make the reservation. + + + + +
+
+ Create a Bookable Status for Non-Bibliographic Items + booking reservationnon-bibliographic items + Staff with the required permissions can create a bookable status for non-bibliographic + items. For example, staff can book conference rooms or laptops. You will be able to create + types of resources, specify the names of individual resources within each type, and set + attributes to describe those resources. You can then bring the values together through the + Resource Attribute Map. + + + First, create the type of resource that you want to make bookable. Select + Admin + Server Administration + Booking + Resource Types + . + + + A list of resource types will appear. You may also see titles of cataloged items + on this screen if they were added using the Make Item Bookable + or Book Now links. You should not attempt to add cataloged items + on this screen; it is best to use the aforementioned links to make those items + bookable. In this screen, you will create a type of resource. + + + In the right corner, click New Resource Type. + + + A box will appear in which you will create a type of resource. In this box, you + can set fines, determine “elbow room” periods between reservations on this type of + resource, and indicate if this type of resource can be transferred to another + library. Click Save when you have entered the needed + information. + + + After you click Save, the box will disappear. Refresh the + screen to see the item that you have added. + + + Next, set the attributes for the type of resource that you have created. Select + Server Administration + Booking + Resource Attributes + . + + + + Click New Resource Attribute. + + + + A box will appear in which you can add the attributes of the resource. Attributes + are descriptive information that is provided to the staff member when the booking + request is made. For example, an attribute of the projector may be a cart that allows + for its transportation. Other attributes might be number of seats available in a + room, or MAC or PC attributes for a laptop. Click Save when + the necessary information has been entered. + + + + The box will disappear. Refresh the screen to see the added attribute. + + + + Next, add the values for the resource attributes. A value can be a number, yes/no, + or any other meaningful information. Select + Server Administration + Booking + Resource Attribute Values + . + + + + Select New Resource Attribute Value. + + + + A pop up box will appear. Select the Resource Attribute from + the drop down box. Add the value. You can add multiple values for this field. Click + Save when the required information has been added. + + + + If you refresh the screen, the attribute value may not appear, but it has been + saved. + + + + Next, identify the specific objects that are associated with this resource type. + Click + Admin + Server Administration + Booking + Resources + . + + + + Click New Resource. + + + + A pop-up box will appear. Add information for the resource and click + Save. Repeat this process for each resource. + + + + Refresh the screen, and the resource(s) that you added will appear. + + + + Finally, use Resource Attribute Maps to bring together the + resource and its attributes. Select + Admin + Server Administration + Booking + Resource Attribute Maps + . + + + + Select New Resource Attribute Map + + + + Select the resource that you want to match with its attributes, then click + Save. Repeat for all applicable resources. + + + + You have now created bookable, non-bibliographic resource(s) with + attributes. + + + +
+
+ Setting Booking Permissions + booking reservationsetting booking permissions + Administrators can set permissions so that staff members can view reservations, make + reservations, and make bibliographic or non-bibliographic items bookable. + + If a staff member attempts to book an item for which they do not have the appropriate + permissions, they will receive an error message. + + To set permissions, select + Admin + Server Administration + Permissions + . + + Staff members should be assigned the following permissions to do common tasks in the + booking module. These permissions could be assigned to front line staff members, such as + circulation staff. Permissions with an asterisk (*) are + already included in the Staff permission group. All other + booking permissions must be applied individually. + + + + View Reservations: VIEW_TRANSACTION* + + + Use the pull list: + RETRIEVE_RESERVATION_PULL_LIST + + + Capture reservations: CAPTURE_RESERVATION + + + Assist patrons with pickup and return: + VIEW_USER* + + + Create/update/delete reservations: + ADMIN_BOOKING_RESERVATION + + + + The following permissions allow users to do more advanced tasks, such as making items + bookable, booking items on the fly, and creating non-bibliographic resources for + booking. + + + + Create/update/delete booking resource type: + ADMIN_BOOKING_RESOURCE_TYPE + + + Create/update/delete booking resource attributes: + ADMIN_BOOKING_RESOURCE_ATTR + + + Create/update/delete booking resource attribute + values: ADMIN_BOOKING_RESOURCE_ATTR_VALUE + + + Create/update/delete booking resource: + ADMIN_BOOKING_RESOURCE + + + Create/update/delete booking resource attribute + maps: ADMIN_BOOKING_RESOURCE_ATTR_MAP + + + + In addition to having the permissions listed above, staff members will need a valid + working location in their profiles. This should be done when registering new staff members. + + + +
+
diff --git a/admin/admin-intro.xml b/admin/admin-intro.xml new file mode 100644 index 0000000000..813ed6c2e0 --- /dev/null +++ b/admin/admin-intro.xml @@ -0,0 +1,15 @@ + + This part of the documentation is intended for Evergreen administrators and requires root access to your Evergreen server(s) and administrator access to + the Evergreen + staff client. It deals with maintaining servers, installation, upgrading, and configuring both system wide and local library settings. + Some sections require understanding of Linux system administration while others require an understanding of your system hierarchy of locations + and users. Many procedures explained in the following + chapters are accomplished with Linux commandsLinuxcommands run from the + terminal without a Graphical User Interface (GUI). + In order to accomplish some of the tasks, prerequisite knowledge or experience will be required and you may need to consult system administration documentation for your + specific Linux distribution if you have limited Linux system experience. A vast ammount of free + resources can be found on the on the web for various experinece levels. You might also consider consulting + PostgreSQLdatabasesPostgreSQL and + ApacheApache documentation for a greater understanding + of the software stack on which Evergreen is built. + diff --git a/admin/admin-lsa.xml b/admin/admin-lsa.xml new file mode 100644 index 0000000000..30f33d69a5 --- /dev/null +++ b/admin/admin-lsa.xml @@ -0,0 +1,1417 @@ + + + + Local Administration Menu + +
+ + Overview + + + Many Evergreen configuration options are available under the + Admin (-) + Local Administration + rollover menu. + + + screenshot of staff client + + + + + + + This menu is new in Evergreen 1.6 and provides shortcuts to settings also available + from the Local Administration page. + Either access point can be used, but examples in this manual use the more comprehensive + Local Administration rollover menu. + Items on this menu are visible to anyone logged into the staff client but usually + require special permissions to edit. The following table describes each of the menu options. + + + + + + + Menu option + Description + + + + + + Receipt Template Editor + + Customize printed receipts (checkout receipts, hold slips, etc) for a + single workstation + + + + Global Font and Sound Settings + + Change font size and sound settings for a single workstation + + + + Printer Settings Editor + + Configure printer settings for a single workstation + + + + Closed Dates Editor + + Set library closure dates (affects due dates and fines) + + + + Copy Locations Editor + + Create and edit copy locations, also known as shelving locations + + + + Library Settings Editor + + Detailed library configuration settings + + + + Non-Catalogued Type Editor + + Create and edit optional non-catalogued item + types + + + + + Statistical Categories Editor + + Create and manage optional categories for detailed patron/item + information + + + Standing Penalties + + admin settings + + + + + Group Penalty Thresholds + + Set library-specific thresholds for maximum items out, maximum overdues, + and maximum fines + + + Field Documentation + + admin settings + + + + Notifications / Action Triggers + + admin settings + + + + + Surveys + + Create patron surveys to be completed at patron registration + + + + Reports + + Generate reports on any field in the Evergreen database + + + + Cash Reports + + View summary report of cash transactions for selected date range + + + + Transit List + + View items in transit to or from your library during selected date + range + + + Circulation Policies + + admin settings + + + + Hold Policies + + admin settings + + + + + +
+ +
+ + Global Font and Sound Settings + staff clientfonts + + + Global Font and Sound Settings apply to the current workstation + only. Use to turn staff client sounds on/off or to adjust the font size in the staff client + interface. These settings do not affect OPAC font sizes. + + + Select + Admin (-) + Local Administration + Global Font and Sound Settings + . + + + + staff clientsounds + To turn off the system sounds, like the noise that happens when a patron with a + block is retrieved check the disable sound box and click + Save to Disk.   + + + screenshot of staff client + + + + + + + + + + To change the size of the font, pick the desired option and click + Save to Disk.   + + + screenshot of staff client + + + + + + + + + +
+
+ + Printer Settings Editor + staff clientprinter settings + + Use the Printer Settings Editor to configure printer output for + each workstation. + + + Select + Admin (-) + Local Administration + Printer Settings Editor + . + + + + From this screen you can print a test page, or alter the page settings for your + receipt printer.   + + + screenshot of staff client + + + + + + + + + + Click on Page Settings to change printing format and + option settings.  Click on the Margins & + Header/Footer tab to adjust + + + screenshot of staff client + + + + + + + + + +
+
+ + Closed Dates Editor + closed dates editor + + These dates are in addition to your regular weekly closed days (see ).    Both regular closed days and those entered in the + Closed Dates Editor affect due dates and fines: + + + + Due dates + closed dates editordue dates + Due dates that would fall on closed days are automatically pushed forward to + the next open day. Likewise, if an item is checked out at 8pm, for example, and + would normally be due on a day when the library closes before 8pm, Evergreen + pushes the due date forward to the next open day. + + + + + Overdue fines + closed dates editorfines + Overdue fines are not charged on days when the library is closed. + + + + + Multi-Day Closing + + + Select + Admin (-) + Local Administration + Closed Dates Editor + . + + + + Select Add Multi-Date Closing if your closed dates + are entire business days. + + + screenshot of staff client + + + + + + + + + + Enter applicable dates and a descriptive reason for the closing and click + Save.  Check the Apply to all of my + libraries box if your library is a multi-branch system and the + closing applies to all of your branches.   + + + screenshot of staff client + + + + + + + + + + + You can type dates into fields using YYYY-MM-DD format or use calendar widgets to + choose dates. + + + + Detailed Closing + + If your closed dates include a portion of a business day, select Add Detailed + Closing at , then enter detailed hours and + dates and click Save. Time format must be HH:MM. + + + screenshot of staff client + + + + + + + + +
+
+ + Copy Locations Editor + copy locations editor + + + + Select + Admin (-) + Local Administration + Copy Locations Editor + . + + + + You can create new copy locations, or edit existing copy locations. To create a + new shelving location type in the name, and select Yes or + No for the various attributes: OPAC Visible, + Holdable, Circulate, and Hold Verify. + Holdable means a patron is able to place a hold on an item + in this location; Hold Verify means staff will be prompted + before an item is captured for a hold.  Finally click + Create. + + + screenshot of staff client + + + + + + + + + + + In the bottom part of the Copy Locations Editor you can + edit or delete existing copy locations. You cannot delete a location that contains + items. In this example the copy location Adult Videos is + being edited. + + + screenshot of staff client + + + + + + + + + + There are also options in the Copy Editor for a copy to be + OPAC Visible-yes or no, Holdable-yes or no, + or Circulate-yes or no.  If either the copy record or the shelving + location is set to Circulate-no, then the item will not be able to circulate. + + + This is where you see the shelving locations in the Copy + Editor: + + + + screenshot of staff client + + + + + + + This is where the shelving location appears in the OPAC. + + + screenshot of staff client + + + + + +
+
+ + Library Settings Editor + library settings editor + + With the Library Settings Editor Local System Admnistrators (LSAs) + can optionally customize Evergreen's behaviour for a particular library or library system. + For descriptions of available settings see the Settings Overview table below. + + To open the Library Settings Editor select + Admin (-) + Local Adminstration + Library Settings Editor + . + + Settings Overview + This table describes available settings and shows which LSAs can change on a + per-library basis. Below the table is a list of data types with details about acceptable + settings values. + + + + + + + + + Setting + Description + Data type + Notes + + + + + Alert on empty bib records + Alert staff before the last copy for a record is deleted + True/false + + + + Allow Credit Card Payments + Not available + True/false + + + + Change reshelving status interval + Amount of time to wait before changing an item from “reshelving” status + to “available” + + Duration + + + + + Charge item price when marked damaged + If true Evergreen bills item price to the last patron who checked out + the damaged item. Staff receive an alert with patron information and must + confirm the billing. + + True/false + + + + + + Charge processing fee for damaged items + Optional processing fee billed to last patron who checked out the + damaged item. Staff receive an alert with patron information and must + confirm the billing. + Number (dollars) + Disabled when set to 0 + + + Circ: Lost items usable on checkin + Lost items are usable on checkin instead of going 'home' first + + True/false + + + + + Circ: Restore overdues on lost item return + If true when a lost item is checked in overdue fines are charged (up to + the maximum fines amount) + + True/false + + + + + + + Circ: Void lost item billing when returned + If true,when a lost item is checked in the item replacement bill (item + price) is voided. If the patron has already paid the bill a credit is + applied. + + True/false + + + + + + + Circ: Void lost max interval + Items that have been lost this long will not result in voided billings + when returned. Only applies if Circ: Void lost item + billing or Circ: Void processing fee on lost + item are true. + + Duration + + + + + + + Circ: Void processing fee on lost item return + If true the processing fee is voided when a lost item is + returned + + True/false + + + + + + + Default Item Price + Replacement charge for lost items if price is unset in the + Copy Editor + . Does not apply if item price is set to $0 + Number (dollars) + + + + + + Default locale + Sets language used in staff client + Text (dollars) + + Can be set for each workstation at login + + + + Do not automatically delete empty bib records + If false bib records (aka MARC records) will automatically be deleted + when the last attached volume is deleted + + True/false + + + Set to false to avoid orphaned bib records + + + + GUI: Above-Tab Button Bar + If true the staff client button bar + appears by default on all workstations registered to your library; staff can + override this setting at each login. + + True/false + + + + + + + GUI: Alternative Horizontal Patron Summary Panel + If true replaces the vertical patron summary panel with a horizontal one + on all workstations registered to your library + + True/false + + + + + + + GUI: Network Activity Meter + If true displays a progress bar when the staff client is sending or + receiving information from the Evergreen server + + True/false + + + + + + GUI: Patron display timeout interval + Patron accounts opened in the staff client will close if inactive for + this period of time + + Duration + + + Not functional in this version of Evergreen + + + + Holds: Estimated Wait (Days) + Average number of days between check out and check in, multiplied by a + patron's position in the hold queue to estimate wait for holds + + Number + + + Not yet implemented + + + + Holds: Expire Alert Interval + Time before a hold expires at which to send an email notifying the + patron + + Duration + + + Only applies if your library notifies patrons of expired holds. + + + + Holds: Expire Interval + Amount of time until an unfulfilled hold expires + + Duration + + + + + + + Holds: Hard boundary + Administrative setting + + Number + + + + + + Holds: Soft boundary + Administrative setting + + Number + + + + + + + Holds: Soft stalling interval + Administrative setting + + Duration + + + + + + Juvenile Age Threshold + Upper cut-off age for patrons to be considered juvenile, calculated from + date of birth in patron accounts + Duration (years) + + + + + + Lost Materials Processing Fee + The amount charged in addition to item price when an item is marked los. +   + Number (dollars) + + + + + + Maximum previous checkouts displayed + Number of previous circulations displayed in staff client + + Number + + + + + + OPAC Inactivity Timeout (in seconds) + Number of seconds of inactivity before OPAC accounts are automatically + logged out. + + Number + + + + + + + OPAC: Allow pending addresses + If true patrons can edit their addresses in the OPAC. Changes must be + approved by staff + + True/false + + + + + + Password format + Defines acceptable format for OPAC account passwords + Regular expression + + Default requires that passwords "be at least 7 characters in length, + contain at least one letter (a-z/A-Z), and contain at least one number. + + + + + Patron barcode format + Defines acceptable format for patron barcodes + Regular expression + + + + + + Patron: password from phone # + If true the last 4 digits of the patron's phone number is the password + for new accounts (password must still be changed at first OPAC + login) + + True/false + + + + + + Selfcheck: Patron Login Timeout (in seconds) + Administrative setting + + Number + + + Not for SIP connections + + + + Selfcheck: Pop-up alert for errors + Administrative setting + + True/false + + + Not for SIP connections + + + Selfcheck: Require patron password + Administrative setting + + True/false + + + Not for SIP connections + + + + Sending email address for patron notices + This email address is for automatically generated patron notices (e.g. + email overdues, email holds notification).  It is good practice to set up a + generic account, like info@nameofyourlibrary.ca, so that one person’s + individual email inbox doesn’t get cluttered with emails that were not + delivered. + + Text + + + + + + + Show billing tab first when bills are present + If true, accounts for patrons with bills will open to the billing tab + instead of check out + + True/false + + + + + Staff Login Inactivity Timeout (in seconds) + Number of seconds of inactivity before staff client prompts for login + and password. + + Number + + + + + + + Void overdue fines when items are marked lost + If true overdue fines are voided when an item is marked lost + + True/false + + + + + + + + + + + Acceptable formats for each setting type are + listed below. Quotation marks are never required when updating settings in the staff + client. + + + + + + + + + + + + Data type + Formatting + + + + + + + + True/false + Select value from drop-down menu + + + Number + Enter a numerical value (decimals allowed in price settings) + + + Duration + Enter a number followed by a space and any of the following units: + minutes, hours, days, months (30 minutes, 2 days, etc) + + + Text + Free text + + + + + + + + + + + + +
+
+ + Non-Catalogued Type Editor + non-catalogued type editor + + + This is where you configure your non-catalogued types that appear in the dropdown menu + for non-catalogued circulations.  + + + + + Select + Admin (-) + Local Administration + Non Catalogued Type Editor + . + + + + + + + To set up a new non-catalogued type, type the name in the left hand box, and + choose how many days the item will circulate for.  Click + Create. + + + screenshot of staff client + + + + + + + + Select the Circulate In-House box for non-catalogued items + that will circulate in house.  This can be used to manually track computer use, or + meeting room rentals.   + + + + + + + + This is what the dropdown menu for non-catalogued circulations in the patron checkout + screen looks like: + + + + screenshot of staff client + + + + + + + +
+
+ + Group Penalty Thresholds + group penalty thresholds + + Group Penalty Thresholds block circulation transactions for users who exceed maximum + check out limits, number of overdue items, or fines. Settings for your library are + visible under + Admin (-) + Local Administration + Group Penalty Thresholds + . + + + + + + + + + + + Penalty + Effect + + + + + + + + PATRON_EXCEEDS_FINES + + Blocks new circulations and renewals if patron exceeds X in fines + + + + PATRON_EXCEEDS_OVERDUE_COUNT + + Blocks new circulations and renewals if patron exceeds X overdue items + + + + + PATRON_EXCEEDS_CHECKOUT_COUNT + + Blocks new circulations if patron exceeds X items out + + + + + + + + + + + + Accounts that exceed penalty thresholds display an alert message when opened and + require staff overrides for blocked transactions. + + + patron account with circulation blocks + + + + + + + + + + + + + Penalty threshold inheritance rules + + + Local penalty thresholds are identified by Org Unit and + appear in the same table as the system wide defaults. + + + + group penalty threshold table + + + + + + + + + Where there is more than one threshold for the same penalty Evergreen gives + precedence to local settings. In this example Salt Spring Island Public Library (BGSI) + patrons are blocked when owing $5.00 in fines ( + + + + ) instead of the system default( + + + + ). + + Thresholds + + + + and + + + + are both for BGSI but apply to different user profile groups. + Threshold + + + + limits all patrons to a maximum of 12 items out, but + + + + provides an exception for the Board + profile. + + + + Multi-branch libraries may create rules for the entire library system or for + individual branches. Evergreen will use the most specific applicable rule. + + + + + + + + Creating local penalty thresholds + group penalty thresholdscreating local penalty thresholds + Local System Administrators can override the system defaults by creating local penalty + thresholds for selected patron groups. + + + + Select + Admin (-) + Local Administration + Group Penalty Thresholds + . + + + + + + + Click New Penalty Threshold. + + + group penalty threshold interface + + + + + + + + + + + + + The new penalty pop-up appears. Complete all fields and click + Save. + + + new penalty threshold form + + + + + + + + + + + + + + Group - the profile group to which the rule applies. + Selecting Patrons includes all profiles below it in the + user hierarchy. + + + + + + + + + Org Unit - multi-branch libraries may create rules for + individual branches or the entire library system. + + + + + + + + + Penalty - select + PATRON_EXCEEDS_CHECKOUT_COUNT, + PATRON_EXCEEDS_OVERDUE_COUNT, or + PATRON_EXCEEDS_FINES + + + + + + After clicking Save the new threshold appears with + the defaults. Evergreen always gives precedence to local settings (in + this example, BSP). + + + group penalty threshold interface + + + + + + + + + + + Deleting or editing local penalty thresholds + + To delete a local threshold select the row to remove and click Delete + Selected. The threshold is removed immediately without further + confirmation. + + + screenshot of staff client + + + + + + + + To edit a local threshold, double-click the desired row to open the pop-up form. + Edit the form and click Save. New settings take effect + immediately. + + + screenshot of staff client + + + + + + + +
+
+ + Statistical Categories Editor + statistical categories editor + + This is where you configure your statistical categories (stat cats).  Stat cats are a + way to save and report on additional information that doesn’t fit elsewhere in Evergreen's + default records.  It is possible to have stat cats for copies or patrons.   + + + + Select + Admin (-) + Local Administration + Statistical Categories Editor + . + + + + To create a new stat cat, enter the name of the stat cat, select if you want + OPAC Visiblity, and select either + patron or copy from the + Type dropdown menu.   + + + screenshot of staff client + + + + + + + + + + Copy Stat Cats + copy stat cats + The image above shows some examples of copy stat cats. You would see these when + editing items in the Copy Editor, also known as the Edit + Item Attributes screen. You might use copy stat cats to track books you + have bought from a specific vendor, or donations. + + + + This is what the copy stat cat looks like in the Copy + Editor. + + + screenshot of staff client + + + + + + + + + + Patron stat cats + patron stat cats + Below are some examples of patron stat cats.  Patron stat cats can be used to keep + track of information like the high school a patron attends, or the home library for a + consortium patron, e.g. Interlink. You would see these in the fifth screen of patron + registration/edit patron.   + + + + screenshot of staff client + + + + + + + + This is what the patron stat cat looks like in the patron registration screen.  It + looks very similar in the patron edit screen. + + + screenshot of staff client + + + + + + +
+
+ Field Documentation + Field Documentation is custom field-level documentation that explains individual fields for + library staff. As of 2.0, the field documentation only is used in the Patron Registration screen. + + Administering Field Documentation + field documentationadministering field documentation + If their permission settings allow, staff members can create local field documentation. This + requires the ADMIN_FIELD_DOC permission. The 'depth' at which that permission is applied, is the maximum + level of the org tree at which the staff member will be able to create field documentation. + + + In the staff client, select + Admin + Local Administration + Field Documentation + + + + Click the New button. + + + Using the fm_class selector, select the database table for which you wish to create Field Documentation. This will show all of the + existing Field Documentation for that table. + As of Evergreen 2.0, only the ILS User table is used anywhere in the Evergreen UI + + + Using the owner selector, select the topmost org unit at which you would like the field documentation to be available. + + + Using the field selector, select the field you wish to document. + + + Enter your actual documentation in the string text box. + + + Click Save to save your Field Documentation entry + + + + To view field documentation for different tables, use the Class selector to filter the Field Documentation list + + + + Patron Field Documentation + field documentationpatron field documentation + On the patron registration screen there are small boxes along the left hand side. If a magnifying glass appears, you may click that magnifying + glass to retrieve the Field Documentation for that patron field. + +
+ +
+ + Cash Reports + cash reports + + + + + Select + Admin (-) + Local Administration + Cash Reports + . + + + + Select the start date and the end date that you wish to run a cash report for. +  You can either enter the date in the YYYY-MM-DD format, or click on the calendar + icon to use the calendar widget.   + + + screenshot of staff client + + + + + + + + + Select your library from the drop down menu.  Click Go. +   + + + + The output will show cash, check, and credit card payments.  It will also show + amounts for credits, forgiven payments, work payments and goods payments (i.e. + food for fines initiatives).  The output will look something like this: + + + screenshot of staff client + + + + + + + + + + + By clicking on the hyperlinked column headers (i.e. workstation, + cash_payment, check_payment, etc.) it is + possible to sort the columns to order the payments from smallest to largest, or largest + to smallest, or to group the workstation names.   + +
+
diff --git a/admin/admin-receipt.xml b/admin/admin-receipt.xml new file mode 100644 index 0000000000..4c4b843d1e --- /dev/null +++ b/admin/admin-receipt.xml @@ -0,0 +1,336 @@ + +
+ + + Receipt Template Editor + receipt template editor + + + This tip sheet will show you how to customize your receipts.  This example will walk you + through how to customize the receipt that is printed on checkout.   + + Receipt templates are saved on the workstation, but it is possible to export the templates + to import to other workstations.   + + + + + Select Admin (-)Local AdministrationReceipt Template Editor.   + + + + + + Select the checkout template from the dropdown menu. +   + + + + + You can edit the Header, Line + Item or Footer on the right hand side.   + + + + In the upper right hand corner you can see the available macros by clicking on the + Macros button.  A macro prints a real value from the database. + The macros that are available + vary slightly between types of receipt templates (i.e. bills, holds, items). + + + + Here are the available macros for an item receipt, like a checkout receipt.   + + + screenshot of staff client + + + + + + + + + + + + + + Adding an image + + + + You can edit the Header to have an image.  This is the default checkout Header. +   + + + + Using HTML tags you can insert a link to an image that exists on the web.  The + link will end in .jpg or possibly .gif.  To + get this link you can right click on the image and choose Copy Image + Location (Firefox).   + +If you are using Internet Explorer right click and select Save Picture + As… + + + + + Enter the URL of the + link for the image that you just copied off a website. + +By clicking outside the Header box the Preview will update to reflect the edit you just + made.   + + + + If the image runs into the text, add a <br/> after the + image to add a line break. + + You may use most HTML tags.  See http://www.w3schools.com/html/ for more information on HTML tags.   + + + + Line Item + + + This is what the default Line Item looks like: + + + + screenshot of staff client + + + + + + + + + + In this example, the macro %barcode% prints the item barcodes of the books that were + checked out.  The macro %due_date% prints the due date for each item that was checked out. +   + + In this example, we will not make any changes to the Line Item + + + The due date can only be printed in the YYYY-MM-DD format. + + + + + Editing the footer + + + + This is what the default Footer looks like: + + + + screenshot of staff client + + + + + + + + + + + Remove the “You were helped by %STAFF_FIRSTNAME% <br/>”.  As many + libraries use a generic circulation login on the circulation desk, the “You were + helped by…” note isn’t meaningful.   + + + + screenshot of staff client + + + + + + + + + + Once you have the checkout template how you want it, click Save Locally to save + the template to your computer.   + + + + + screenshot of staff client + + + + + + + + + Click OK. + + + + + screenshot of staff client + + + + + + + + + + The footer is a good place to advertise upcoming library programs or events.   + + + + + Exporting templates + + + As you can only save a template on to the computer you are working on you will need to + export the template if you have more than one computer that prints out receipts (i.e., more + than one computer on the circulation desk, or another computer in the workroom that you use + to checkin items or capture holds with). + + + Click on Export.   + + + + + screenshot of staff client + + + + + + + + + + + + + Select the location to save the template to, name the template, and click Save. +   + + + screenshot of staff client + + + + + + + + + + + + + Click OK.   + + + screenshot of staff client + + + + + + + + + + + + + Importing Templates + + + + Click Import. + + + + screenshot of staff client + + + + + + + + + + + Navigate to and select the template that you want to import.  Click Open. + + + + screenshot of staff client + + + + + + + + + + + Click OK. + + + + screenshot of staff client + + + + + + + + + + + + Click Save Locally. + + + screenshot of staff client + + + + + + + + + + + Click OK. + + + + + screenshot of staff client + + + + + + + + + +
diff --git a/admin/admin-survey.xml b/admin/admin-survey.xml new file mode 100644 index 0000000000..b84e95c1d5 --- /dev/null +++ b/admin/admin-survey.xml @@ -0,0 +1,194 @@ + +
+ + Surveys + surveys + + This section illustrates how to create a survey, shows where the survey responses are saved + in the patron record, and explains how to report on surveys. + + Survey questions show up on the 6th patron registration screen, or on the 6th patron edit + screen. Surveys questions can be optional or required. Some examples of survey questions + might include: Would you use the library if it were open on a Sunday? + Would you like to be contacted by the library to learn about new + services? Do you attend library programs? + + Surveys come up when a patron is first registered. If you would like staff to ask the + survey questions when the patron’s library card is renewed, you’ll need to make that part of + local procedure. + + It is possible to run reports on survey questions. For example, you could find out how + many people say they would use the library if it were open on a Sunday, or you could get a + list of patrons who say they would like to receive marketing material from the library. + + + + + From the Admin (-) menu, select + Local Administration + Surveys + . + + + surveys interface + + + + + + + + + + + + + The Survey List will open. In this example the table is + empty because no surveys have been created. Click Add New + Survey. + + + surveys interface + + + + + + + + + + + + + Fill out the New Survey form, then click Save + Changes. + + + surveys interface + + + + + + + + A few tips when creating a new survey: + + + Start Date must always be in the future. It is not + possible to add questions to a survey after the start date. + + + Dates should be in YYYY-MM-DD format + + + OPAC Survey? and Poll Style? are + not yet implemented - leave unchecked + + + Check Is Required if the survey should be mandatory + for all new patrons + + + Check Display in User Summary to make survey answers + visible from patron records + + + + + + + + A summary of your new survey will appear. Type the first survey question in + the Question field, then click Save Question + & Add Answer. Survey questions are multiple + choice. + + + + surveys interface + + + + + + + + + + + + + + Enter possible multiple choice answers and click Add + Answer. Each question may have as many answers as you + like. + + + surveys interface + + + + + + + + + + + + Repeat the steps above to add as many questions and answers as you wish. When + finished click Save, then Go Back to + return to the survey list. + + surveys interface + + + + + + + + + Your new survey will appear in the Survey List table. To make further changes click the survey name to open the detailed view. + + + surveys interface + + + + + + + + + This is what the survey looks like in the patron registration/edit screen. Note that in + this example this survey question appears in red and is required as the + Is Required box was checked when creating the survey. + + + surveys interface + + + + + + + To see a patron’s response to a survey, retrieve the patron record. Click OtherSurveys to see the response. + + surveys interface + + + + + + + surveys interface + + + + + +
diff --git a/admin/localization.xml b/admin/localization.xml new file mode 100644 index 0000000000..a237e3c3e5 --- /dev/null +++ b/admin/localization.xml @@ -0,0 +1,70 @@ + + + +Languages and Localization + +
+ Enabling and Disabling Languages + Evergreen 1.6 is bundled with support for a number of languages beyond American English (en-US). The translated interfaces are + split between static files that are automatically installed with Evergreen, and dynamic labels that can be stored in the Evergreen database. Evergreen is + installed with additional SQL files that contain translated dynamic labels for a number of languages, and to make the set of translated labels available in + all interfaces. Only a few steps are required to enable or disable one or more languages. + + Enabling a Localization + languagesenabling a localization + To enable the translated labels for a given language to display in Evergreen, just populate the database with the translated labels and enable the localization. The + following example illustrates how to enable Canadian French (fr-CA) support in the database. These same steps can be used with any of the + languages bundled with Evergreen, or you can create and add your own localization. + + + The translated labels for each locale are stored in SQL files named "950.data.seed-values-xx-YY.sql" where "xx-YY" represents the locale code for + the translation. Load the translated labels into the Evergreen database using the command psql, substituting your user, host and + database connection information accordingly: + -h -d \ +-f /path/to/Evergreen-source/Open-ILS/src/sql/Pg/950.data.seed-values-fr-CA.sql +]]> + + + Ensure the locale is enabled in the Evergreen database by using the utility psql to check for the existence of the locale in the + table config.i18n_locale: + + +SELECT code, marc_code, name, description +FROM config.i18n_locale +WHERE code = 'fr-CA'; + + + As shown in the following example, if one row of output is returned, then the locale is already enabled: + +code | marc_code | name | description +------+-----------+-----------------+----------------- +fr-CA | fre | French (Canada) | Canadian French +(1 row) + + If zero rows of output are returned, then the locale is not enabled: + +code | marc_code | name | description +------+-----------+------+------------- +(0 rows) + + To enable a locale, use psql to insert a row into the table config.i18n_locale as follows: + +INSERT INTO config.i18n_locale (code, marc_code, name, description) +VALUES ('fr-CA', 'fre', 'French (Canada)', 'Canadian French'); + + + + + + Disabling a Localization + languagesdisabling a localization + You might not want to offer all of the localizations that are preconfigured in Evergreen. If you choose to disable the dynamic labels for a locale, just delete those + entries from the table config.i18n_locale using the psql utility: + +DELETE FROM config.i18n_locale +WHERE code = 'fr-CA'; + + +
+
diff --git a/admin/migratingdata_1.6.xml b/admin/migratingdata_1.6.xml new file mode 100644 index 0000000000..3f4020d70d --- /dev/null +++ b/admin/migratingdata_1.6.xml @@ -0,0 +1,833 @@ + + + + Migrating Data + + Migrating data into Evergreen can be one of the most daunting tasks for an administrator. This chapter will explain some procedures to help to migrate + bibliographic records, copies and patrons into the Evergreen system. This chapter requires advanced ILS Administration experience, knowledge of Evergreen data structures, + as well as knowledge of how to export data from your current system or access to data export files from your current system. + + +
+ Migrating Bibliographic Records + migratingimporting bibliographic records + + One of the most important and challenging tasks is migrating your bibliographic records to a new system. The procedure may be different depending on the system from which you + are migrating and the content of the marc records exported from the existing system. The procedures in this section deal with the process once the data from the existing system + is exported into marc records. It does not cover exporting data from your existing non-Evergreen system. + Several tools for importing bibliographic records into Evergreen can be found in the Evergreen installation folder + (/home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/src/extras/import/ ) and are also available from the Evergreen repository + ( + http://svn.open-ils.org/trac/ILS/browser/branches/rel_1_6_1/Open-ILS/src/extras/import). + + Converting MARC records to Evergreen BRE JSON format + BRE JSON + If you are starting with MARC records from your existing system or another source, use the marc2bre.pl script to create the JSON representation of a bibliographic + record entry (hence bre) in Evergreen. marc2bre.pl can perform the following functions: + + Converts MARC-8 encoded records to UTF-8 encoding + Converts MARC21 to MARCXML21 + Select the unique record number field (common choices are '035' or '001'; check your records as you might be surprised how a supposedly unique field + actually has duplicates, though marc2bre.pl will select a unique identifier for subsequent duplicates) + Extracts certain pertinent fields for indexing and display purposes (along with the complete MARCXML21 record) + Sets the ID number of the first record from this batch to be imported into the biblio.record_entry table (hint - run the following + SQL to determine what this number should be to avoid conflicts: + +psql -U postgres evergreen + # SELECT MAX(id)+1 FROM biblio.record_entry; + + + + If you are processing multiple sets of MARC records with marc2bre.pl before loading the records into the database, you will need to keep track + of the starting ID number for each subsequent batch of records that you are importing. For example, if you are processing three files of MARC records with 10000 + records each into a clean database, you would use , , and + parameters for each respective file. + + + Ignore trash fields that you do not want to retain in Evergreen + + + If you use marc2bre.pl to convert your MARC records from the MARC-8 encoding to the UTF-8 encoding, it relies + on the MARC::Charset Perl module to complete the conversion. When importing a large set of items, you can speed up the process by using a + utility like marc4j or marcdumper to convert the records + to MARC21XML and UTF-8 before running them through marc2bre.pl with the + flag to tell marc2bre.pl that the records are already in MARC21XML format with + the UTF-8 encoding. If you take this approach, due to a current limitation of MARC::File::XML you have to do a + horrible thing and ensure that there are no namespace prefixes in front of the element names. marc2bre.pl cannot parse the following + example: + + + + + + 00677nam a2200193 a 4500 + H01-0000844 + t + 060420s1950 xx 000 u fre d + + CaOHCU + fre + +... +]]>; + + + But marc2bre.pl can parse the same example with the namespace prefixes removed: + + + + + 00677nam a2200193 a 4500 + H01-0000844 + t + 060420s1950 xx 000 u fre d + + CaOHCU + fre + +... +]]>; + + + + + + Converting Records for Import into PostgreSQL + migratingimport into PostgreSQL + Once you have your records in Evergreen's BRE JSON format, you then need to use direct_ingest.pl to convert the records + into the generic ingest JSON format for Open-ILS. + This step uses the open-ils.ingest application to extract the data that will be indexed in the database. + Once you have your records in Open-ILS JSON ingest format, you then need to use pg_loader.pl to convert these records into a + set of SQL statements that you can use to + load the records into PostgreSQL. The and command line options (bre, mrd, mfr, etc) map to class IDs defined in + /openils/conf/fm_IDL.xml. + + + Adding Metarecords to the Database + migratingadding metarecords + One you have loaded the records into PostgreSQL, you can create metarecord entries in the metabib.metarecord table by running the following SQL: + +psql evergreen +# \i /home/opensrf/Evergreen-ILS-1.6*/src/extras/import/quick_metarecord_map.sql + + Metarecords are required to place holds on items, among other actions. + +
+ + + +
+ Migrating Bibliographic Records Using the ESI Migration Tools + migratingbibliograohic records + The following procedure explains how to migrate bibliographic records from marc records into Evergreen. This is a general guide and will need to be adjusted for your + specific environment. It does not cover exporting records from specific proprietary ILS + systems. For assistance with exporting records from your current system please refer to the manuals for your system or you might try to ask for help from the + Evergreen community. + + + + Download the Evergreen migration utilities from the git repository. + Use the command git clone git://git.esilibrary.com/git/migration-tools.git to clone the migration tools. + Install the migration tools: + + + + + + + + Add environmental variables for migration and import tools. These paths must point to: + + the import perl scripts bundled with Evergreen + the folder where you extracted the migration tools + the location of the Equinox-Migration perl modules + the location of the Evergreen perl modules (e.g. perl5) + + + + +export PATH=[path to Evergreen]/Open-ILS/src/extras/import: \ +/[path to migration-tools]/migration-tools:$PATH:. +export PERL5LIB=/openils/lib/perl5: \ +/[path to migration-tools directory]/migration-tools/Equinox-Migration/lib + + + + + Dump marc records into MARCXML using yaz-marcdump + + + +' > imported_marc_records.xml +yaz-marcdump -f MARC-8 -t UTF-8 -o marcxml imported_marc_records.mrc >> imported_marc_records.xml +]]> + + + + + Test validity of XML file using xmllint + + + + marc.xml.err +]]> + + + + + + Clean up the marc xml file using the marc_cleanup utility: + + +marc_cleanup --marcfile=imported_marc_records.xml --fullauto [--renumber-from #] -ot 001 + + + The is required if you have bibliographic records already in your system. Use this to set the starting id number higher + then the last id in the biblio.record_entry table. The marc_cleanup command will generate a file called clean.marc.xml + + + Create a fingerprinter file using the fingerprinter utility: + + +fingerprinter -o incumbent.fp -x incumbent.ex clean.marc.xml + + + fingerprinter is used for deduplification of the incumbent records. The option specifies the + output file and the option is used to specify the error output file. + + + Create a fingerprinter file for existing Evergreen bibliographic records using the fingerprinter utility if you + have existing bibliographic records in your system previously imported: + + +fingerprinter -o production.fp -x production.fp.ex --marctype=MARC21 existing_marc_records.mrc \ +--tag=901 --subfield=c + + + fingerprinter is used for deduplification of the incumbant records. + + + + Create a merged fingerprint file removing duplicate records. + + +cat cat production.fp incumbent.fp | sort -r > dedupe.fp +match_fingerprints [-t start id] -o records.merge dedupe.fp + + + + + + Create a new import XML file using the extract_loadset utility + +extract_loadset -l 1 -i clean.marc.xml -o merged.xml records.merge + + + + + Extract all of the currently used TCN's an generate the .bre and .ingest files to prepare for the bibliographic record load. + + +psql -U evergreen -c "select tcn_value from biblio.record_entry where not deleted" \ +| perl -npe 's/^\s+//;' > used_tcns +marc2bre.pl --idfield 903 [--startid=#] --marctype=XML -f final.xml \ +--used_tcn_file=used_tcns > evergreen_bre_import_file.bre + + + + The option needs to match the start id used in earlier steps and must be higher than largest id value + in the biblio.record_entry table. the option should match the marc datafield used to store your records ids. + + + + + Ingest the bibliographic records into the Evergreen database. + + + evergreen_ingest_file.ingest +parallel_pg_loader.pl \ +-or bre \ +-or mrd \ +-or mfr \ +-or mtfe \ +-or mafe \ +-or msfe \ +-or mkfe \ +-or msefe \ +-a mrd \ +-a mfr \ +-a mtfe \ +-a mafe \ +-a msfe \ +-a mkfe \ +-a msefe evergreen_ingest_file.ingest +]]> + + + + + Load the records using psql and the sql scripts generated from the previous step. + + + load_pg_loader-output +psql -U evergreen < ~/Ever*/Open-ILS/src/extras/import/quick_metarecord_map.sql > log.create_metabib +]]> + + + + + Extract holdings from marc records for importing copies into Evergreen using the extract_holdings utility. + + +extract_holdings --marcfile=clean.marc.xml --holding 999 --copyid 999i --map holdings.map + + + This command would extract holdings based on the 949 datafield in the marc records. The copy id is generated from the subfile i in the 999 datafield. You may + need to adjust these options based on the field used for holdings informatiom in your marc records. + The option holdings.map refers to a file to be used for mapping subfields to the holdings data you would like extracted. Here is an example based on mapping holdings data to the 999 data field: + + + + Running the extract holdings script should produce an sql script HOLDINGS.pg similar to: + +BEGIN; + +egid, hseq, l_callnum, l_barcode, l_location, l_owning_lib, l_circ_modifier, +40 0 HD3616.K853 U54 1997 30731100751928 STACKS FENNELL BOOK +41 1 HV6548.C3 S984 1998 30731100826613 STACKS FENNELL BOOK +41 2 HV6548.C3 S984 1998 30731100804958 STACKS BRANTFORD BOOK +... + + + Edit the holdings.pg sql script like so: + +BEGIN; + +TRUNCATE TABLE staging_items; + +INSERT INTO staging_items (egid, hseq, l_callnum, l_barcode, +l_location, l_owning_lib, l_circ_modifier) FROM stdin; +40 0 HD3616.K853 U54 1997 30731100751928 STACKS FENNELL BOOK +41 1 HV6548.C3 S984 1998 30731100826613 STACKS FENNELL BOOK +41 2 HV6548.C3 S984 1998 30731100804958 STACKS BRANTFORD BOOK +\. + +COMMIT; + + This file can be used for importing holdings into Evergreen. the egid is a critical column. It is used to link the volume and + copy to the bibliographic record. Please refer to for the steps to import your holdings into Evergreen. + + + +
+
+ Adding Copies to Bibliographic Recordsmigratingholdings + Before bibliographic records can be found in an OPAC search copies will need to be created. It is very important to understand how various tables related to each other in regards + to holdings maintenance. + The following procedure will guide you through the process of populating Evergreen with volumes and copies. This is a very simple example. The SQL queries may need to be adjusted + for the specific data in your holdings. + + + Create a staging_items staging table to hold the holdings data: + +CREATE TABLE staging_items ( + l_callnum text, -- call number label + hseq int, + egid int, -- biblio.record_entry_id + createdate date, + l_location text, + l_barcode text, + l_circ_modifier text, + l_owning_lib text -- actor.org_unit.shortname +); + + + + Import the items using the HOLDINGS.pg SQL script created using the extract_holdings utility. + +psql -U evergreen -f HOLDINGS.pg evergreen + + the file HOLDINGS.pg and/or the COPY query may need to be adjusted for your particular circumstances. + + + + + Generate shelving locations from your staging table. + +INSERT INTO asset.copy_location (name, owning_lib) +SELECT DISTINCT l.l_location, ou.id +FROM staging_items l + JOIN actor.org_unit ou ON (l.l_owning_lib = ou.shortname); + + + + Generate circulation modifiers from your staging table. + +INSERT INTO config.circ_modifier (code, name, description, sip2_media_type, magnetic_media) + SELECT DISTINCT l_circ_modifier AS code, + l_circ_modifier AS name, + LOWER(l_circ_modifier) AS description, + '001' AS sip2_media_type, + FALSE AS magnetic_media + FROM staging_items + WHERE l_circ_modifier NOT IN (SELECT code FROM config.circ_modifier); + + + + Generate call numbers from your staging table: + +INSERT INTO asset.call_number (creator,editor,record,label,owning_lib) + SELECT DISTINCT 1, 1, l.egid, l.l_callnum, ou.id + FROM staging_items l + JOIN actor.org_unit ou ON (l.l_owning_lib = ou.shortname); + + + + Generate copies from your staging table: + +INSERT INTO asset.copy ( +circ_lib, creator, editor, create_date, barcode, +STATUS, location, loan_duration, fine_level, circ_modifier, deposit, ref, call_number) + +SELECT DISTINCT ou.id AS circ_lib, + 1 AS creator, + 1 AS editor, + l.l_createdate AS create_date, + l.l_barcode AS barcode, + 0 AS STATUS, + cl.id AS location, + 2 AS loan_duration, + 2 AS fine_level, + l.l_circ_modifier AS circ_modifier, + FALSE AS deposit, + CASE + WHEN l.l_circ_modifier = 'REFERENCE' THEN TRUE + ELSE FALSE + END AS ref, + cn.id AS call_number + FROM staging_items l + JOIN actor.org_unit ou + ON (l.l_owning_lib = ou.shortname) + JOIN asset.copy_location cl + ON (ou.id = cl.owning_lib AND l.l_location = cl.name) + JOIN metabib.real_full_rec m + ON (m.record = l.egid) + JOIN asset.call_number cn + ON (ou.id = cn.owning_lib + AND m.record = cn.record + AND l.l_callnum = cn.label) + + You should now have copies in your Evergreen database and should be able to search and find the bibliographic records with attached copies. + + +
+
+ Migrating Patron Data + migratingpatrons + + This section will explain the task of migrating your patron data from comma delimited filescomma delimited files into Evergreen. + It does not deal with the process of exporting from the non-Evergreen + system since this process may vary depending on where you are extracting your patron records. Patron could come from an ILS or it could come from a student database in the case of + academic records. + + When importing records into Evergreen you will need to populate 3 tables in your Evergreen database: + + actor.usr - The main table for user data + actor.card - Stores the barcode for users; Users can have more than 1 card but only 1 can be active at a given time; + actor.usr_address - Used for storing address information; A user can have more than one address. + + Before following the procedures below to import patron data into Evergreen, it is a good idea to examine the fields in these tables in order to decide on a strategy + for data to include + in your import. It is important to understand the data types and constraints on each field. + + + Export the patron data from your existing ILS or from another source into a comma delimited file. The comma delimited file used for importing + the records should use Unicode (UTF8) Unicode character encoding. + + + Create a staging table.staging table A staging table will allow you to tweak the data before importing. + Here is an example sql statement: + sql + +CREATE TABLE students ( + student_id int, barcode text, last_name text, first_name text, email text, address_type text, street1 text, street2 text, + city text, province text, country text, postal_code text, phone text, profile int, + ident_type int, home_ou int, claims_returned_count int DEFAULT 0, usrname text, + net_access_level int DEFAULT 2, password text +); + + Note the DEFAULT variables. These allow you to set default for your library or to populate required fields + if you data allows NULL values where fields are required in Evergreen. + The data field profile in the above SQL script refers to the user group and should be an + integer referencing the id field in + permission.grp_tree. + Setting this value will effect the permissions for the user. See the values in permission.grp_tree for + possibilities. + ident_type is the identification type used for identiying users. This is a integer value referencing + config.identification_type and should + match the id values of that table. The default values are 1 for Drivers License, 2 for SSN or + 3 for other. + home_ou is the home organizational unit for the user. This value needs to match the corresponding + id in the actor.org_unit + table. + + + Copy records into staging table from a comma delimited file. + +COPY students (student_id, last_name, first_name, email, address_type, street1, street2, city, province, country, postal_code, phone, password) + FROM '/home/opensrf/patrons.csv' + WITH CSV HEADER; + + The above script wil vary depending on the format of your patron load file (patrons.csv). You may want to review + PostgreSQL documentation + + + Formatting of some fields to fit Evergreen filed formatting may be required. Here is an example of sql to adjust phone numbers in the staging + table to fit the evergreen field: + +UPDATE students phone = replace(replace(replace(rpad(substring(phone from 1 for 9), 10, '-') || +substring(phone from 10), '(', ''), ')', ''), ' ', '-'); + + Data massaging may be required to fit formats used in Evergreen. + + + + + + + Insert records from the staging table into the actor.usr Evergreen table: + + INSERT INTO actor.usr ( + profile, usrname, email, passwd, ident_type, ident_value, first_given_name, + family_name, day_phone, home_ou, claims_returned_count, net_access_level) + SELECT profile, students.usrname, email, password, ident_type, student_id, + first_name, last_name, phone, home_ou, claims_returned_count, net_access_level + FROM students; + + + + Copy records into staging table from a comma delimited file. + +COPY students (student_id, last_name, first_name, email, address_type, street1, street2, city, province, country, postal_code, phone) + FROM '/home/opensrf/patrons.csv' + WITH CSV HEADER; + + The above script wil vary depending on the format of your patron load file (patrons.csv). You may want to review + PostgreSQL documentation. + + + + insert records into actor.card from actor.usr. + +INSERT INTO actor.card (usr, barcode) + SELECT actor.usr.id, students.barcode + FROM students + INNER JOIN actor.usr + ON students.usrname = actor.usr.usrname; + + This assumes a one to one card patron relationship. If your patron data import has multiple cards assigned to one patron more + complex import scripts may be required which look for inactive or active flags. + + + Update actor.usr.card field with actor.card.id to associate active card with the user: + +UPDATE actor.usr + SET card = actor.card.id + FROM actor.card + WHERE actor.card.usr = actor.usr.id; + + + + Insert records into actor.usr_address to add address information for users: + +INSERT INTO actor.usr_address (usr, street1, street2, city, state, country, post_code) + SELECT actor.usr.id, students.street1, students.street2, students.city, students.province, + students.country, students.postal_code + FROM students + INNER JOIN actor.usr ON students.usrname = actor.usr.usrname; + + + + update actor.usr.address with address id from address table. + +UPDATE actor.usr + SET mailing_address = actor.usr_address.id, billing_address = actor.usr_address.id + FROM actor.usr_address + WHERE actor.usr.id = actor.usr_address.usr; + + This assumes 1 address per patron. More complex scenarios may require more sophisticated SQL. + + + + Creating an sql Script for Importing Patrons + The procedure for importing patron can be automated with the help of an sql script. Follow these steps to create an import script: + + + + Create an new file and name it import.sql + + + + + Edit the file to look similar to this: + +BEGIN; + +-- Create staging table. +CREATE TABLE students ( + student_id int, barcode text, last_name text, first_name text, email text, address_type text, street1 text, street2 text, + city text, province text, country text, postal_code text, phone text, profile int, + ident_type int, home_ou int, claims_returned_count int DEFAULT 0, usrname text, + net_access_level int DEFAULT 2, password text +); + + +--Copy records from your import text file +COPY students (student_id, last_name, first_name, email, address_type, street1, street2, city, province, country, postal_code, phone, password) + FROM '/home/opensrf/patrons.csv' + WITH CSV HEADER; + +--Insert records from the staging table into the actor.usr table +INSERT INTO actor.usr ( + profile, usrname, email, passwd, ident_type, ident_value, first_given_name, family_name, + day_phone, home_ou, claims_returned_count, net_access_level) + SELECT profile, students.usrname, email, password, ident_type, student_id, first_name, + last_name, phone, home_ou, claims_returned_count, net_access_level FROM students; + +--Insert records from the staging table into the actor.usr table. +INSERT INTO actor.card (usr, barcode) + SELECT actor.usr.id, students.barcode + FROM students + INNER JOIN actor.usr + ON students.usrname = actor.usr.usrname; + +--Update actor.usr.card field with actor.card.id to associate active card with the user: +UPDATE actor.usr + SET card = actor.card.id + FROM actor.card + WHERE actor.card.usr = actor.usr.id; + +--INSERT records INTO actor.usr_address from staging table. +INSERT INTO actor.usr_address (usr, street1, street2, city, state, country, post_code) + SELECT actor.usr.id, students.street1, students.street2, students.city, students.province, + students.country, students.postal_code + FROM students + INNER JOIN actor.usr ON students.usrname = actor.usr.usrname; + + +--Update actor.usr mailing address with id from actor.usr_address table.: +UPDATE actor.usr + SET mailing_address = actor.usr_address.id, billing_address = actor.usr_address.id + FROM actor.usr_address + WHERE actor.usr.id = actor.usr_address.usr; + +COMMIT; + + Placing the sql statements between BEGIN; and COMMIT; creates a transaction block so that if any sql statements fail, the + entire process is canceled and the database is rolled back to its original state. Lines beginning with -- are comments to let you you what + each sql statement is doing and are not processed. + + + + + Batch Updating Patron Data + migratingbatch updating patrons + For academic libraries, doing batch updates to add new patrons to the Evergreen database is a critical task. The above procedures and + import script can be easily adapted to create an update script for importing new patrons from external databases. If the data import file contains only new patrons, then, + the above procedures will work well to insert those patrons. However, if the data load contains all patrons, a second staging table and a procedure to remove existing patrons from that second staging table may be required before importing the new patrons. Moreover, additional steps to update address information and perhaps delete + inactive patrons may also be desired depending on the requirements of the institution. + After developing the scripts to import and update patrons have been created, another important task for library staff is to develop an import strategy and schedule + which suits the needs of the library. This could be determined by registration dates of your institution in the case of academic libraries. It is important to balance + the convenience of patron loads and the cost of processing these loads vs staff adding patrons manually. + +
+
+ Restoring your Evergreen Database to an Empty State + If you've done a test import of records and you want to quickly get Evergreen back to a pristine state, you can create a clean Evergreen database schema by performing the + following: + + + +cd ILS/Open-ILS/src/sql/Pg/ + + + + Rebuild the database schema: + +./build-db.sh [db-hostname> [db-port] [db-name] [db-user] [db-password] [db-version] + + This will remove all of your data from the database and restore the default values. + + +
+
+ Exporting Bibliographic Records into MARC files + migratingexporting bibliographic recordsMARC + The following procedure explains how to export Evergreen bibliographic records into MARC files using the marc_export support script. All steps should be + performed by the opensrf user from your Evergreen server. + + + Create a text file list of the Bibliographic record IDs you would like to export from Evergreen. One way to do this is using SQL: + +SELECT DISTINCT bre.id FROM biblio.record_entry AS bre + JOIN asset.call_number AS acn ON acn.record = bre.id + WHERE bre.deleted='false' and owning_lib=101 \g /home/opensrf/records.txt; + + This query creates a file called records.txt containing a column of distinct IDs of items owned by the organizational unit with the + id 101. + + + Navigate to the support-scripts folder + +cd /home/opensrf/Evergreen-ILS*/Open-ILS/src/support-scripts/ + + + + Run marc_export, using the ID file you created in step 1 to define which files to export. + +cat /home/opensrf/records.txt | ./marc_export -i -c /openils/conf/opensrf_core.xml \ +-x /openils/conf/fm_IDL.xml -f XML --timeout 5 > exported_files.xml + + + The example above exports the records into MARCXML format. + + For help or for more options when running marc_export, run marc_export with the option: + +./marc_export -h + + + + + + Processing time for exporting records depends on several factors such as the number of records you are exporting. It is recommended that you divide the + export ID files (records.txt) into a manageable number of records if you are exporting a large number of records. + + +
+
+ Importing Authority Records + migratingimporting authority records + The following procedure explains how to export Evergreen bibliographic records into MARC files using the marc_export support script. All steps should be performed by the + opensrf user from your Evergreen server. + + Importing Authority Records from Command Line + The major advantages of the command line approach are its speed and its convenience for system administrators who can perform bulk loads of authority records in a + controlled environment. + + + Run marc2are.pl against the authority records, specifying the user name, password, MARC type (USMARC or XML). Use + STDOUT redirection + to either pipe the output directly into the next command or into an output file for inspection. For example, to process a set of authority records + named auth_small.xml using the default user name and password and directing the output into a file named auth.are: + +cd Open-ILS/src/extras/import/ +perl marc2are.pl --user admin --pass open-ils auth_small.xml > auth.are + + + + + + Run direct_ingest.pl to ingest records. + +perl direct_ingest.pl -a auth.are > ~/auth.ingest + + + + Run pg_loader.pl to generate the SQL necessary for importing the authority records into your system. + +cd Open-ILS/src/extras/import/ + perl pg_loader.pl-or are -or afr -a afr --output=auth < ~/auth.ingest + + + + + Load the authority records from the SQL file that you generated in the last step into your Evergreen database using the psql tool. Assuming the default user + name, host name, and database name for an Evergreen instance, that command looks like: + +psql -U evergreen -h localhost -d evergreen -f auth.sql + + + + + + + Importing authority records using the MARC Batch Import/Export interface from the Staff Client + Good for loading batches of up to 5,000 records (roughly) at a time, the major advantages to importing authority records using the MARC Batch Import/Export interface are + that it does not require command-line or direct database access – good for both security in that it minimizes the number of people who need this access and for spreading the + effort around to others in the library – and it does most of the work (for example, figuring out whether the batch of records is in XML or USMARC format) for you. + To import a set of MARC authority records from the MARC Batch Import/Export interface: + + + From the Evergreen staff client, select CatalogingMARC Batch Import/Export. + The Evergreen MARC File Upload screen opens, with Import Records as the highlighted tab. + + + From the Bibliographic records drop-down menu, select Authority records. + + + + Enter a name for the queue (batch import job) in the Create a new upload queue field. + + + + Select the Auto-Import Non-Colliding Records checkbox. + + + + Click the Browse… button to select the file of MARC authorities to import. + + + + Click the Upload button to begin importing the records. The screen displays Uploading… + Processing… to show that the records are being transferred to the server, then displays a progress bar to show the actual import + progress. When the staff client displays the progress bar, you can disconnect your staff client safely. Very large batches of records might time out at this + stage. + + + + Once the import is finished, the staff client displays the results of the import process. You can manually display the import progress by selecting + the Inspect Queue tab of the MARC Batch Import/Export interface and selecting the queue name. By default, the staff client does not + display records that were imported successfully; it only shows records that conflicted with existing entries in the database. The screen shows the overall + status of the import process in the top right-hand corner, with the Total and Imported number of records for the + queue. + + + + + +
+
+ + + + + + + diff --git a/admin/requirements-configuration.xml b/admin/requirements-configuration.xml new file mode 100644 index 0000000000..e399249c73 --- /dev/null +++ b/admin/requirements-configuration.xml @@ -0,0 +1,99 @@ + + + + System Requirements and Hardware Configurations + + Evergreen is extremely scalable and can serve the need of a large range of libraries. The specific requirements and configuration of your + system should be determined based on your specific needs of your organization or consortium. +
+ + Server Minimum Requirements + + The following are the base requirements setting Evergreen up on a test server: + + An available desktop, server or virtual imagevirtual image + 1GB RAM, or more if your server also runs a graphical desktop + Linux Operating SystemLinux + Ports 80 and 443 should be opened in your firewall for TCP connections to allow OPAC and staff + client connections to the Evergreen server. + + + + DebianLinuxDebian and + UbuntuLinuxUbuntu are the most widely used + Linux distributions for installing Evergreen and most development takes place on Debian based systems. If you are new + to Linux, it is strongly recommended that you install Evergreen on the latest stable server edition of Debian + (http://www.debian.org/) + or Ubuntu 10.04 Server(http://www.ubuntu.com/) since the installation instructions have been + tested on these distributions. Debian and Ubuntu are free distributions of + Linux. + +
+
+ + Server Hardware Configurations and Clustering + hardwareclustering + + The hardware requirements for running a functional Evergreen server are minimal. It is also possible to scale up your evergreen configuration to be + spread your Evergreen resources and services over several or even many servers in a clustered approach for the purpose + of system redundancy, load balancing and downtime reduction. This allows very large + consortia to share one Evergreen system with hundreds of libraries with millions of records and millions of users, making the scalability of + Evergreen almost infinite. + Here are some example scenarios for networked server configurations: + + A small library library with 1 location, under 25,000 items and a few thousand users could easily run Evergreen on a single server + (1 machine). + A college or university with 1 million items and 20,000 users could run an Evergreen system using several servers balancing the + load on their + system by spreading services over multiple servers. It should host their PostgreSQLdatabases + PostgreSQL + database on a separate server. They could also cluster the Evergreen services + strategically to minimize or eliminate any necessary downtown when upgrading Evergreen or other server software. Moreover, system redundancy will reduce the chance of + unplanned catastrophic downtime caused by system failure since Evergreen will be running over several machines. + A large library consortium with several public library systems and/or academic libraries with millions of users and items could run an + Evergreen + system over many servers with clusters for Evergreen services as well as a cluster for the Postgresql Database. + + The key to Evergreen scalability is in the OpenSRF configuration files + /openils/conf/opensrf.xmlconfiguration filesopensrf.xml and + /openils/conf/opensrf_core.xmlconfiguration filesopensrf_core.xml. + By configuring these files, an administrator could cluster evergreen services over multiple hosts, change the host running a specific service + or change the host of the PostgreSQL database. + + The default configuration of Evergreen in the installation instructions assumes a single localhost + server setup. For more complex + multi-server clustered configurations, some server administration and database administration experience or knowledge will be required. +
+
+ + Staff Client Requirements + + + Staff terminals connect to the central database using the Evergreen staff client, available for download from + The Evergreen download page. The staff client must be installed on each staff workstation and requires at + minimum: + + Windows (XP, Vista, or 7), Mac OS X, + or Linux operating system + a reliable high speed Internet connection + 512Mb of RAM + The staff client uses the TCP protocal on ports 80 and 443 to + communicate with the Evergreen server. + + + Barcode Scanners + Evergreen will work with virtually any barcode scannerbarcode scanner – + if it worked with your legacy system it should work on Evergreen. + + + + Printers + + Evergreen can use any printer configuredprinters for your terminal to print receipts, check-out slips, holds + lists, etc. The single exception is spine label printing, which is still under development. Evergreen + currently formats spine labels for output to a label roll printer. If you do not have a roll printer + manual formatting may be required. For more on configuring receipt printers, see Printer Settings. + +
+
diff --git a/admin/serveradministration.xml b/admin/serveradministration.xml new file mode 100644 index 0000000000..be9973ac1f --- /dev/null +++ b/admin/serveradministration.xml @@ -0,0 +1,2430 @@ + + + + Server Administration + + Administration of Evergreen involves configuration done from both the Staff Client as well a + the command line. The goal of this chapter is to provide you with the procedures to help + you optimize your Evergreen system. + + +
+ Organizational Unit Types and Organizational Units + + Organizational Unit Types + organizational unit types + Organizational Unit Types are the terms used to refer to levels in the hierarchy of your + library system(s). Examples could include>All-Encompassing Consortium, Consortium Within a + Consortium, Library System, Branch, Bookmobile, Sub-Branch, Twig, etc. + You can add or remove organizational unit types, and rename them as needed to match the + organizational hierarchy that exists in reality for the libraries using your installation of + Evergreen. Evergreen can support organizations as simple as a single library with one or more + branches or as complex as a consortium composed of many independently governed library + systems. Organizational unit types should never have proper names since they are only generic types . + It is a good idea to set up all of your organizational types and units before loading other data. In many cases, editing or deleting organizational units and types + may be difficult once you have loaded records or users. + The fields in the organizational unit type record include: + + Type Name - The name of the organization unit type. + Opac Label - This is the label displayed in the OPAC to describe the search + range and the copy count columns for results. They are range + relative labels. + + Parent Type - The parent organizational unit type of this type. + Can Have Volumes - Flag that allows an organizational unit of this type to contain + Volumes/Call Numbers and thus Copies. + Can Have Users - Flag that allows an Organizational unit of this type to be home to + Users. + + An organizational unit type can be added, edited, or removed using the staff client. + To navigate to the Organization Unit Types from the staff client select + + Admin + Server Administration + Organization Types + + + + Adding Organization Types<indexterm><primary>organizational unit types</primary><secondary>adding</secondary></indexterm> + Select an organization type from the organization type tree on the left and + click New Child. + Make sure your new type is selected and edit the Type Name, + OPAC Label and Parent Type. + Change the Parent Type if necessary. + Check the Can Have Volumes and Copies check box if the + organization units of this type will have volumes and copies assigned to it. + Check the Can Have Users check box if you will allow users + to be have the organization units of this type as their home unit. + Click Save to save your new organization type. + + From the server command line, run autogen to apply the changes to the database and scripts. Run the following command as the opensrf user: + +/openils/bin/autogen.sh -c /openils/conf/opensrf_core.xml -u + + + + As root, restart the Apache server: + +/etc/init.d/apache2 restart + + + The staff client will need to be restarted for changes to appear. + + + + Deleting Organization Types + organizational unit typesdeleting + Select the organization type from the Organization Type + tree. + Click Delete. + Click OK on the warning alert box. + From the server command line, run autogen to apply the changes to the database and scripts. Run the following command as the opensrf user: + +/openils/bin/autogen.sh -c /openils/conf/opensrf_core.xml -u + + + + As root, restart the Apache server: + +/etc/init.d/apache2 restart + + + The staff client will need to be restarted for changes to appear. + + + You will not be able to delete organization types if organization units are + assigned to that type. Before you can delete the organization + Type, you must change the organization type of the units associated with the type + or delete the units. + + + + + Editing Organization Types<indexterm><primary>organizational unit types</primary><secondary>editing</secondary></indexterm> + Select the organization type you wish to edit from the + organization type tree. + Make the changes in the right pane. + Click Save to save your changes. + From the server command line, run autogen to apply the changes to the database and scripts. Run the following command as the opensrf user: + +/openils/bin/autogen.sh -c /openils/conf/opensrf_core.xml -u + + + + As root, restart the Apache server: + +/etc/init.d/apache2 restart + + + The staff client will need to be restarted for changes to appear. + + + + + + Organizational Units + organizational units + + Organizational Units are the specific instances of the organization unit types that + make up your library's hierarchy. These can include consortia, systems, branches, + etc. The organizational units should have distinctive proper names such as + Main Street Branch or Townsville Campus. + + To navigate to the organizational units administration page in the staff client select + + Admin + Server Administration + Organizational Units + + + + Adding Organizational Units + organization unitsadding + Select an Organizational Unit from the organizational unit tree on the left and click + New Child. + Make sure your new unit is selected and edit the Organizational Unit + Name, Organizational Unit Policy Code, + Main Email Address and Main Phone Number. + + The Organizational Unit Name is the name that will appear in the + OPAC. The Policy Code is used by the system to associate policies and + copies with the unit. + + + Select the Organization Unit Type and + Parent Organization Unit. + Check the Can Have Volumes and Copies check box if the + organization units of this type will have volumes and copies assigned to it.organization unitsvolumes + and copies + Check the OPAC Visible check box if you want this location to be + visible in the OPAC for searching.Organization Unitsopac visible + Click Save to save your new organizational unit. + From the server command line, run autogen to apply the changes to the database and scripts. Run the following command as the opensrf user: + +/openils/bin/autogen.sh -c /openils/conf/opensrf_core.xml -u + + + + As root, restart the Apache server: + +/etc/init.d/apache2 restart + + + + As root, restart the Apache server: + +/etc/init.d/apache2 restart + + + The staff client will need to be restarted for changes to appear. + + + + Deleting Organizational Units + organization unitsdeleting + Select the organizational unit you wish to delete from the organizational unit tree in the left pane. + ClickDelete. + Click OK on the warning alert box. + + From the server command line, run autogen to apply the changes to the database and scripts. Run the following command as the opensrf user: + +/openils/bin/autogen.sh -c /openils/conf/opensrf_core.xml -u + + + + As root, restart the Apache server: + +/etc/init.d/apache2 restart + + + The staff client will need to be restarted for changes to appear. + + + You will not be able to delete organizational units if you have + users, workstations or copies assigned to the unit. Before you can delete the + organizational unit, you must move its users, workstations, copies and other associated resources to other + organizational units. + + + + Changing the Default Organizational Units and Types Using SQL + Evergreen comes with several default organizational units set up out-of-the-box. Most libraries will want to customize the Org units with their own Organizational Units and + types. The quickest way to do this is with SQL. + The following procedure should only be done before you have migrated users and items into your system. + + Delete all but the core organizational unit: + +BEGIN; +DELETE FROM actor.org_unit WHERE id > 1; +DELETE FROM actor.org_address WHERE id > 1; +DELETE FROM actor.workstation WHERE owning_lib > 1; +COMMIT; + + + + Clean up our org unit types, in preparation for creating the organizational units hierarchy: + +BEGIN; +DELETE FROM actor.org_unit_type WHERE id > 2; +UPDATE actor.org_unit_type SET name = 'System', can_have_users = TRUE +WHERE id = 1; +UPDATE actor.org_unit_type SET name = 'Branch', can_have_users = TRUE, +can_have_vols = TRUE WHERE id = 2; +COMMIT; + + + + Create a branch that hangs off the only remaining parent branch setting the addresses to the system address temporarily: + +INSERT INTO actor.org_unit (parent_ou, ou_type, ill_address, +holds_address, mailing_address, billing_address, shortname, name) + VALUES (1, 2, 1, 1, 1, 1, 'MYBRANCH', 'My Branch'); + + + + Find out what ID was assigned to the new branch: + +SELECT id FROM actor.org_unit WHERE shortname = 'MYBRANCH'; + + + + Create our required org address and update actor.org_unit to point ot correct actor.org_address id (assuming output of last step was 101, adjust accordingly.): + +BEGIN; +INSERT INTO actor.org_address (id, org_unit, street1, city, state, +country, post_code) + VALUES (2, 101, 'Fake Street', 'Fake', 'Fake', 'Fake', 'FOO BAR'); + +UPDATE actor.org_unit SET ill_address= 2, holds_address = 2, + mailing_address = 2, billing_address = 2 WHERE id = 101; +COMMIT; + + + + Run autogen.sh for your changes to be updated. + +./autogen.sh -c /openils/conf/opensrf_core.xml -u + + + + As root, restart the Apache server: + +/etc/init.d/apache2 restart + + + + + Editing Organizational Units<indexterm><primary>organization units</primary><secondary>editing</secondary></indexterm> + Select the organizational unit you wish to edit from the + organizational unit tree in the left pane. + Edit the fields in the right pane. + Click Save to save your changes. + From the server command line, run autogen to apply the changes to the database and scripts. Run the following command as the opensrf user: + +/openils/bin/autogen.sh -c /openils/conf/opensrf_core.xml -u + + + + As root, restart the Apache server: + +/etc/init.d/apache2 restart + + + + The staff client will need to be restarted for changes to appear. + + + + + + + Library Hours of Operation<indexterm><primary>hours of operation</primary><secondary>setting</secondary></indexterm> + + + Local System Administrators can use the Organizational Units interface to set the library's hours of operation. These are regular weekly hours; + holiday and other closures are recorded in the Closed Dates + Editor. + + Hours of operation and closed dates affect due dates and overdue fines. + + + + + Due dates<indexterm><primary>hours of operation</primary><secondary>due dates policy</secondary></indexterm> + Due dates that would fall on closed days are automatically pushed forward to + the next open day. Likewise, if an item is checked out at 8pm, for example, and + would normally be due on a day when the library closes before 8pm, Evergreen + pushes the due date forward to the next open day. + + + + + Overdue fines <indexterm><primary>hours of operation</primary><secondary>overdue fines policy</secondary></indexterm> + Overdue fines are not charged on days when the library is closed. + + + + To review or edit your library's hours of operation, + + + Open the Organizational Units interface. + + + + Click the Hours of + Operation tab. + + + organizational units, main settings + + + + + + + + + + + Review your library's weekly hours, editing as necessary. To set a closed day + click the corresponding Closed button. Closed days (Monday + and Sunday in the example below) have open and close times of 12:00 + AM. + + + hours of operation interface + + + + + + + + + + Click Save to record any changes + + + + + + + + + + + Library Addresses <indexterm><primary>library addresses </primary><secondary>setting</secondary></indexterm> + + + Addresses set in + Admin (-) + Server Administrations + Organizational Units + appear in patron email notifications, hold slips, and transit slips. Local + System Administrators should ensure that the Physical, + Holds, and Mailing addresses are set + correctly. + + + + + Open the Organizational Units interface as described in the previous section. + + + + Click the + Addresses tab. + + + organizational units, main settings + + + + + + + + + + + There are four address tabs: Physical, + Holds, Mailing, and + ILL. The Holds Address appears on transit slips when items are sent to fulfill holds at another branch. + + + + + + Click Save to record changes for each tab. + + + + + + The Valid check box is an optional setting that does not affect current Evergreen functions. + + + + +
+ +
+ User and Group Permissions <indexterm><primary>permissions</primary><secondary>group</secondary></indexterm> + + It is essential to understand how user and group permissions can be used to allow staff + to fulfill their roles while ensuring that they only have access to the appropriate level. + Permissions in Evergreen are applied to a specific location and system depth based on the home + library of the user. The user will only have that permission within the scope provided by the + Depth field in relation to his/her working locations. + Evergreen provides group application permissions in order to restrict which staff members + have the ability to assign elevated permissions to a user, and which staff members have the ability + to edit users in particular groups. + + + User Permissions + The User permissions editor allows an administrator to set up permission for an individual user. However, In most cases, permissions can be controlled more + efficiently at the group level with individuals being assigned to specific groups based on their roles in the library. + To open the user permission editor, select Admin + User Permission Editor. Type the user's barcode when prompted. + + Working Locations + You may select more than one working location for a user. This will effect + the availability of certain permissions which are dependent on the user having the working location. + + + User Permission Settings<indexterm><primary>permissions</primary><secondary>user</secondary></indexterm> + Below the working locations is the long list of all the permissions available on your + system. For each permission you can apply it by checking the + Applied check box. You can also select a depth to which the + permission is applied and also make the permission grantable, allowing + the user the ability to grant the permission to others. + + + + Group Permissions <indexterm><primary>permissions</primary><secondary>group</secondary></indexterm> + Most permissions should be assigned at the group level. Here you can create new + groups based on the roles and responsibilities of the users in your system. Staff will be able to + assign users to these groups when they register patrons. + It is a good idea to create your groups soon after creating your organizational units. + It is also important to give careful consideration to the hierarchy of your groups to make + permission assignment as efficient as possible. + To enter the Group Permission module from the staff client menu, select + Admin Server Administration + Permission Groups + + Adding Groups + Select the Group Configuration tab if not + already selected in the right pane + Click New Child + Enter a unique Group Name + Enter a Description + Select a Permission Interval. This will determine the + default expiry date of user account when you register patrons and select + their groups + Selecting an Editing Permission will determine the group level the user will have for editing other users. + Select the Parent Group for the group. + The group will inherit its parent group's permissions so it is unnecessary to assign permissions already inherited from its parent. + Click the Save button. + + + Deleting Groups + Select the group you wish to delete from the group tree on + left pane. + Click the Delete button. + Click on OKto verify. + + + Editing Groups + Select the group you wish to edit from the group tree on left pane. + Edit the fields you wish to change in the right pane. + Click on Save to save changes. + + + Adding Group Permissions + Select the Group Permissions tab on the right + pane + Click on New Mapping. + Select the permission you would like to add from the + Permission Select box. + Select the Depth you wish to set the + permission. This will determine if the group has the permission at a local level or across a + system, or consortium, or other organizational unit type. + check the Grantable check box to allow the user to + grant the permission to others. + Click Add Mapping to add the permission to the + group + + + Deleting Group Permissions + Select the group permission you wish to delete. + Click the Delete Selected button. + Click on OK to verify + + + Editing Group Permissions + Click on the Depth or Grantable + field for the permission setting you wish to change. + Make changes to other permissions in the same way. + Click Save Changes when you are finished all + the changes. + + + + Permissions + + + Permissions Table + + + + + + Permission Name + Permission Description + + + + + ABORT_REMOTE_TRANSIT + Allows user to abort a copy transit if the user is not at + the transit source or destination + + + ABORT_TRANSIT + Allows user to abort a copy transit if the user is at the + transit destination or source + + + ASSIGN_WORK_ORG_UNIT + Allows user to define where another staff member's + permissions apply via the Permissions Editor interface. + + + BAR_PATRON + Allows user to bar a patron + + + CANCEL_HOLDS + Allows user to cancel holds + + + CIRC_CLAIMS_RETURNED override + Allows user to check in/out an item that is claims + returned + + + CIRC_EXCEEDS_COPY_RANGE override + Allows user to override the copy exceeds range event + + + CIRC_OVERRIDE_DUE_DATE + Allows user to change due date + + + CIRC_PERMIT_OVERRIDE + Allows user to bypass the circ permit call for i + checkout + + + COPY_ALERT_MESSAGE override + Allows user to check in/out an item that has an alert + message + + + COPY_BAD_STATUS override + Allows user to check out an item in a non-circulating + status + + + COPY_CHECKIN + Allows user to check in a copy + + + COPY_CHECKOUT + Allows user to check out a copy + + + COPY_CIRC_NOT_ALLOWED override + Allows user to checkout an item that is marked as + non-circ + + + COPY_HOLDS + Allows user to place a hold on a specific copy + + + COPY_IS_REFERENCE override + Allows user to override the copy_is_reference event + + + + COPY_NOT_AVAILABLE override + Allows user to force checkout of Missing/Lost type + items + + + COPY_STATUS_LOST override + Allows user to remove the lost status from a copy + + + COPY_STATUS_MISSING override + Allows user to change the missing status on a copy + + + COPY_TRANSIT_RECEIVE + Allows user to close out a transit on a copy + + + CREATE_BILL + Allows user to create a new bill on a transaction + + + CREATE_CONTAINER + Allows user to create containers owned by other users + (containers are Item Buckets, Volume Buckets, and Book Bags) + + + CREATE_CONTAINER_ITEM + Allows user to place an item in a container (even if the + container is owned by other users). + + + CREATE_COPY + Allows user to create a new copy object + + + CREATE_COPY_LOCATION + Allows user to create a new copy location + + + CREATE_COPY_NOTE + Allows user to create a new copy note + + + CREATE_COPY_STAT_CAT + Allows user to create a statistical category for + copies + + + CREATE_COPY_STAT_CAT _ENTRY + Allows user to create a new entry for a copy statistical + category + + + CREATE_COPY_STAT_CAT _ENTRY_MAP + Allows user to link a copy to a statistical category + (i.e., allows user to specify the appropriate entry for a copy and + given statistical category) + + + CREATE_COPY_TRANSIT + Allows user to create a transit + + + CREATE_DUPLICATE_HOLDS + Allows user to create duplicate holds (e.g. two holds on the + same title) + + + CREATE_HOLD_NOTIFICATION + Allows user to create new hold notifications + + + CREATE_IN_HOUSE_USE + Allows user to create a new in-house-use + + + CREATE_MARC + Allows user to create new MARC records + + + CREATE_MY_CONTAINER + Allows user to create containers for self (containers are + Item Buckets, Volume Buckets, and Book Bags). + + + CREATE_NON_CAT_TYPE + Allows user to create a new non-cataloged item type + + + CREATE_PATRON_STAT _CAT + Allows user to create a new patron statistical + category + + + CREATE_PATRON_STAT _CAT_ENTRY + Allows user to create a new possible entry for patron + statistical categories + + + CREATE_PATRON_STAT _CAT_ENTRY_MAP + Allows user to link another user to a stat cat entry (i.e., + specify the patron's entry for a given statistical category) + + + CREATE_PAYMENT + Allows user to record payments in the Billing + Interface + + + CREATE_TITLE_NOTE + Allows user to create a new title note + + + CREATE_TRANSACTION + Allows user to create new billable transactions (these + include checkouts and transactions created via the Bill Patron + operation) + + + CREATE_TRANSIT + Allows user to place item in transit + + + CREATE_USER + Allows user to create another user + + + CREATE_USER_GROUP _LINK + Allows user to add other users to permission groups + + + CREATE_VOLUME + Allows user to create a volume + + + CREATE_VOLUME_NOTE + Allows user to create a new volume note + + + DELETE_CONTAINER + Allows user to delete containers (containers are Item Buckets, + Volume Buckets, and Book Bags). + + + DELETE_CONTAINER _ITEM + Allows user to remove items from buckets and bookbags + + + DELETE_COPY + Allows user to delete a copy + + + DELETE_COPY _LOCATION + Allows user to delete a copy location + + + DELETE_COPY_NOTE + Allows user to delete copy notes + + + DELETE_COPY_STAT _CAT + Allows user to delete a copy statistical category + + + DELETE_COPY_STAT _CAT_ENTRY + Allows user to delete an entry for a copy statistical + category + + + DELETE_COPY_STAT _CAT_ENTRY_MAP + Allows user to delete a copy stat cat entry map + + + DELETE_NON_CAT_TYPE + Allows user to delete a non cataloged type (the user still + cannot deleted a non-cat type if any items of that type have + circulated). + + + DELETE_PATRON_STAT _CAT + Allows user to delete a patron statistical category + + + DELETE_PATRON_STAT _CAT_ENTRY + Allows user to delete an entry for patron statistical + categories + + + DELETE_PATRON_STAT _CAT_ENTRY_MAP + Allows user to remove a patron's entry for a given + statistical category + + + DELETE_RECORD + Allows user to delete a bib record + + + DELETE_TITLE_NOTE + Allows user to delete title notes + + + DELETE_USER + Allows user to mark a user as deleted + + + DELETE_VOLUME + Allows user to delete a volume + + + DELETE_VOLUME_NOTE + Allows user to delete volume notes + + + DELETE_WORKSTATION + Allows user to remove an existing workstation so a new one + can replace it + + + EVERYTHING + Every permission is granted (for sysadmins and developers + only!) + + + HOLD_EXISTS.override + Allows users to place multiple holds on a single + copy/volume/title/metarecord (depending on hold type) + + + IMPORT_MARC + Allows user to import a MARC record via the z39.50 + interface + + + ITEM_AGE_PROTECTED override + Allows user to place a hold on an age-protected item + + ITEM_ON_HOLDS_SHELF override + Allows user to check out an item that is on holds shelf for a + different patron + + + MAX_RENEWALS_REACHED override + Allows user to renew an item past the maximum renewal + count + + + MERGE_BIB_RECORDS + Allows user to merge bib records and their associated data + regardless of their bib/volume/copy level perms (in theory - as of + 1.2.2, users still must have VOLUME_UPDATE and UPDATE_VOLUME in + order to merge records. + + + MR_HOLDS + Allows user to create a metarecord holds + + + OFFLINE_EXECUTE + Allows user to process an offline/standalone script + batch + + + OFFLINE_UPLOAD + Allows user to upload an offline/standalone script + + + OFFLINE_VIEW + Allows user to view uploaded offline script information + + + OPAC_LOGIN + Allows user to login to the OPAC + + + patron_exceeds_checkout _count.override + Allow user to override checkout count failure + + + patron_exceeds_fines override + Allow user to override fine amount checkout failure + + + patron_exceeds_overdue _count.override + Allow user to override overdue count failure + + + REGISTER_WORKSTATION + Allows user to register a new workstation + + + REMOTE_Z3950_QUERY + Allows user to perform z3950 queries against remote + servers + + + REMOVE_USER_GROUP_LINK + Allows user to remove other users from permission + groups + + + RENEW_CIRC + Allows user to renew items + + + RENEW_HOLD_OVERRIDE + Allows user to continue to renew an item even if it is + required for a hold. + + + REQUEST_HOLDS + Allows user to create holds for another user (if true, we + still check to make sure they have permission to make the type of + hold they are requesting, e.g. COPY_HOLDS) + + + RUN_REPORTS + Allows user to view the Reports Interface, create templates, + and run reports + + + SET_CIRC_CLAIMS _RETURNED + Allows user to mark an item as claimed returned + + + SET_CIRC_LOST + Allows user to mark an item as lost + + + SET_CIRC_MISSING + Allows user to mark an item as missing + + + SHARE_REPORT_FOLDER + Allows user to share Template/Report/Output folders via the + Reporting Interface + + + STAFF_LOGIN + Allows user to login to the staff client + + + TITLE_HOLDS + Allows user to place a hold at the title level + + + UNBAR_PATRON + Allows user to un-bar a patron + + + UPDATE_BATCH_COPY + Allows user to edit copies in batch + + + UPDATE_CONTAINER + Allows user to update another users Buckets or Book + Bags + + + UPDATE_COPY + Allows user to edit a copy + + + UPDATE_COPY_LOCATION + Allows user to edit a copy location + + + UPDATE_COPY_STAT_CAT + Allows user to change a copy statistical category + + + UPDATE_COPY_STAT _CAT_ENTRY + Allows user to change a copy statistical category entry + + + UPDATE_HOLD + Allows user to edit holds (such as change notification phone + number or pickup library, as well as re-target the hold and capture + an item for hold or pickup) + + + UPDATE_MARC + Allows user to edit a marc record + + + UPDATE_NON_CAT _TYPE + Allows user to update a non cataloged type + + + UPDATE_ORG_SETTING + Allows user to update an org unit setting + + + UPDATE_ORG_UNIT + Allows user to change org unit settings + + + UPDATE_PATRON_STAT _CAT + Allows user to change a patron statistical category (such as + renaming the category) + + + UPDATE_PATRON_STAT _CAT_ENTRY + Allows user to change a patron stat cat entry(such as + renaming the entry) + + + UPDATE_RECORD + Allows user to undelete a MARC record + + + UPDATE_USER + Allows user to edit a user's record + + + UPDATE_VOLUME + Allows user to edit volumes - needed for merging records. + This is a duplicate of VOLUME_UPDATE; user must have both + permissions at appropriate level to merge records. + + + VIEW_CIRCULATIONS + Allows user to see what another user has checked out + + + VIEW_CONTAINER + Allows user to view buckets and bookbags + + + VIEW_COPY_CHECKOUT _HISTORY + Allows user to view which users have checked out a given + copy + + + VIEW_COPY_NOTES + Allows user to view notes attached to a copy + + + VIEW_HOLD + Allows user to view another user's holds + + + VIEW_HOLD_NOTIFICATION + Allows user to view notifications attached to a hold + + + VIEW_HOLD_PERMIT + Allows user to see if another user has permission to place a + hold on a given copy + + + VIEW_PERM_GROUPS + Allows user to view permission groups. + + + VIEW_PERMISSION + Allows user to view user permissions within the user + permissions editor + + + VIEW_PERMIT_CHECKOUT + Allows user to see if another user can check out an item + (should be true for all staff) + + + VIEW_REPORT_OUTPUT + Allows user to view report output + + + VIEW_TITLE_NOTES + Allows user to view all notes attached to a title + + + VIEW_TRANSACTION + Allows user to see another users grocery/circ transactions + in the Bills Interface + + + VIEW_USER + Allows user to view another user's Patron Record + + + VIEW_USER_FINES _SUMMARY + Allows user to view bill details + + + VIEW_USER_TRANSACTIONS + *same as VIEW_TRANSACTION (duplicate perm) + + + VIEW_VOLUME_NOTES + Allows user to view all notes attached to a volume + + + VIEW_ZIP_DATA + Allows user to query the zip code data method + + + VOID_BILLING + Allows user to void a bill + + + VOLUME_HOLDS + Allows user to place a volume level hold + + + + actor.org_unit.closed _date.create + Allows user to create a new closed date for a location + + + actor.org_unit.closed _date.delete + Allows user to remove a closed date interval for a given + location + + + actor.org_unit.closed _date.update + Allows user to update a closed date interval for a given + location + + + group_application.user + Allows user to add/remove users to/from the User group + + + group_application.user .patron + Allows user to add/remove users to/from the Patron + group + + + group_application.user. sip_client + Allows user to add/remove users to/from the SIP-Client + group + + + group_application.user. staff + Allows user to add/remove users to/from the Staff + group + + + group_application.user.staff. admin.global_admin + Allows user to add/remove users to/from the GlobalAdmin + group + + + group_application.user.staff. admin.lib_manager + Allows user to add/remove users to/from the LibraryManager + group + + + group_application.user.staff. admin.local_admin + Allows user to add/remove users to/from the LocalAdmin + group + + + group_application.user.staff.cat + Allows user to add/remove users to/from the Cataloger group + + + group_application.user. staff.cat.cat1 + Allows user to add/remove users to/from the Cat1 group + + + group_application.user. staff.circ + Allows user to add/remove users to/from the Circulator + group + + + group_application.user. staff.supercat + Allows user to add/remove users to/from the Supercat + group + + + group_application.user. vendor + Allows user to add/remove users to/from the Vendor + group + + + money.collections_tracker. create + Allows user to put someone into collections + + + money.collections_tracker. delete + Allows user to take someone out of collections + + + +
+ +
+
+
+ + Staff Accounts + + + + New staff accounts are created in much the same way as patron accounts, using + Circulation + Register Patron + or + Shift + F1 + . Select one of the staff profiles from the Profile + Group drop-down menu. staff accounts + + Each new staff account must be assigned a Working + Locationstaff accountsworking location which determines its access level in staff client interfaces. + Accounts migrated from legacy systems or created before the upgrade to Evergreen 1.6 already + have working locations assigned. + + + + + To assign a working location open the newly created staff account using + F1 (retrieve patron) or F4 (patron search). + + + + + Select + Other + User Permission Editor + + + + Place a check in the box next to the desired working location, then scroll to the + bottom of the display and click Save. + + + + + + + + In multi-branch libraries it is possible to assign more than one working + location + + + + + + Staff Account Permissions <indexterm><primary>staff accounts</primary><secondary>permissions</secondary></indexterm> + + To view a detailed list + of permissions for a particular Evergreen account go to + Admin (-) + User permission editor + in the staff client. + + + + + + Granting Additional Permissions + A Local System Administrator (LSA) may selectively grant LSA permissions to other staff + accounts. In the example below a Circ +Full + Cat account is granted permission to process offline transactions, a function which otherwise requires an LSA login. + + + + Log in as a Local System Administrator. + + + + + Select + Admin (-) + User Permission Editor + and enter the staff account barcode when prompted + + OR + + + + Retrieve the staff account first, then select + Other + User Permission Editor + + + + + + + The User Permission Editor will load (this may take a + few seconds). Greyed-out permissions cannot be edited because they are + either a) already granted to the account, or b) not + available to any staff account, including LSAs. + + + User permissions screen shot + + + + + + + + + + + + + List of permission names. + + + + + + + + If checked the permission is granted to this account. + + + + + + + Depth limits application to the staff member's library and should be left at the default. + + + + + + + + If checked this staff account will be able to grant the new privilege to other accounts (not recommended). + + + + + + + + To allow processing of offline transactions check the Applied column next to OFFLINE_EXECUTE. + + + User permissions screen shot + + + + + + + + + + + + + Scroll down and click Save to apply the changes. + + + User permissions screen shot + + + + + + + + + + + + +
+
+ Copy Status + copy status + To navigate to the copy status editor from the staff client menu, select + Admin Server Administration + Copy Statuses + The Copy Status Editor is used to Add, edit and delete statuses of copies in your system. + Evergreen comes pre-loaded with a number of copy statuses. + + Copy Status Table + + + + + + + + ID + Name + Holdable - default setting + OPAC Visible - default setting + + + + + 0 + Available + true + true + + + 1 + Checked out + true + true + + + 2 + Bindery + false + false + + + 3 + Lost + false + false + + + 4 + Missing + false + false + + + 5 + In process + false + true + + + 6 + In transit + true + true + + + 7 + Reshelving + true + true + + + 8 + On holds shelf + true + true + + + 9 + On order + true + true + + + 10 + ILL + true + false + + + 11 + Cataloging + true + false + + + 12 + Reserves + false + true + + + 13 + Discard/Weed + false + false + + + 14 + Damaged + false + false + + + 15 + On reservation shelf + true + false + + + +
+ It is possible to add, delete and edit copy statuses. + + Adding Copy Statuses + In the New Status field, enter the name of the + new status you wish to add. + Click Add. + Locate you new status and check the Holdable check box + if you wish to all users to place holds on items in this status. Check + OPAC Visible if you wish for this status to appear in the public + OPAC. + Click Save Changes at the bottom of the screen to + save changes to the new status. + + + Deleting Copy Statuses + Highlight the statuses you wish to delete. Hold the + Shift to select more than one status. + Click Delete Selected. + Click OK to verify. + You will not be able to delete statuses if copies currently + exist with that status. + + + + Editing Copy Statuses + Double click on a status name to change its name and enter the new + name. To change whether a status is visible in the OPAC, check or uncheck + the OPAC Visible check box.To allow patrons the ability to + hold items in that status, check the Holdable check box. To prevent + users from holding items in that status, uncheck the Holdable + check box. + Once you have finished editing the statuses, remember to click + Save Changes. + +
+
+ Billing Types + billing types + The billing types editor is used for creating, editing and deleting billing types. + To navigate to the billing types editor from the staff client menu, select + Admin Server Administration + Billing Types + + Adding Billing Types + billing typesadding + Click New Billing Type. + Enter the name of the billing type. + Select the Org Unit to use this billing type. + Enter the Default Price. This is only the default since + the actual price of a specific billing can be adjusted when staff create + a billing + Click Save to save the new billing type. + + + Deleting Billing Types + billing typesdeleting + Check the check box of the billing type(s) you wish to delete. + Click Delete Selected. + The selected billing types will be deleted without a + verification alert. + + + + Editing Billing Types + billing typesediting + Double click on a billing types to open the editing window. + Make desired changes to the name, + Org Unit and Default Price. + Once you have finished editing, click + Save. + + +
+
+ Circulation Modifiers + circulation modifiers + The circulation modifier editor is used to create, edit and delete modifier categories to control + circulation policies on specific groups of items. + To navigate to the circulation modifiers editor from the staff client menu, select + + Admin Server Administration + Circulation Modifiers. + + + Adding Circulation Modifiers + circulation modifiersadding + Click New Circ Modifier. + Enter a Code, Name and + Description. + Select the SIP 2 Media Type. + Check the Magnetic Media check box if the item is magnetic media such as a cassette + tape. + Click Save to save the new circulation + modifier. + + + Deleting Circulation Modifiers + circulation modifiersdeleting + Check the check box(es) next to the circulation modifiers(s) you wish to + delete. + Click Delete Selected near the top of the page. + The selected circulation modifiers will be deleted without a + verification alert. + + + + Editing Circulation Modifiers + circulation modifiersediting + Double click on the row of the circulation modifier you wish to + edit. + Make desired changes. + Once you have finished editing, click + Save. + +
+
+ Cataloging Templates + catalogingtemplates + Cataloging templates are essential for making the cataloging process more efficient. Templates are used so that the basic structure of specific types of cataloging records can be loaded when the cataloger adds a new record + + Adding Cataloging Templates + + + Create a marc template in the directory /openils/var/templates/marc/. It should be in xml format. + Here is an example file k_book.xml: + + + + 00620cam a2200205Ka 4500 + 070101s eng d + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +]]> + + + + + Add the template to the to the marctemplates list in the open-ils.cat section of the Evergreen configuration file + opensrf.xmlconfiguration filesopensrf.xml + + + Restart PerlPerl services for changes to take effect. + /openils/bin/osrf_ctl.sh -l -a restart_perl + + +
+
+ Adjusting Search Relevancy Rankings + search relevancy + + + This section describes indexed field weighting and matchpoint weighting, which + control relevance ranking in Evergreen catalog search results. Adjusting relevancy can only be completed through access to the Evergreen database as of version 1.6. + + In tuning search relevance, it is good practice to make incremental + adjustments, capture search logs, and assess results before making further + adjustments. + + + + + Indexed-field Weighting<indexterm><primary>search relevancy</primary><secondary>indexed-field weighting</secondary></indexterm> + Indexed-field weighting is configured in the Evergreen database in the weight column + of the config.metabib_field table, which follows the other four columns in this table: + field_class, name, xpath, and format. + The following is one representative line from the config.metabib_field table: + +author | conference | //mods32:mods/mods32:name[@type='conference']/mods32: +namePart[../mods32:role/mods32:roleTerm[text()='creator']] | mods32 | 1 ) + + The default value for index-field weights in config.metabib_field is 1. Adjust the + weighting of indexed fields to boost or lower the relevance score for matches on that + indexed field. The weight value may be increased or decreased by whole integers. + For example, by increasing the weight of the title-proper field from 1 to 2, a search + for jaguar would double the relevance for the book titled + Aimee and Jaguar than for a record with the term + jaguar in another indexed field. + + + Match point Weighting + search relevancymatch point weighting + Match point weighting provides another way to fine-tune Evergreen relevance ranking, + and is configured through floating-point multipliers in the multiplier column of the + search.relevance_adjustment table. + Weighting can be adjusted for one, more, or all multiplier fields in + search.relevance_adjustment. + You can adjust the following three matchpoints: + + + first_wordboosts relevance if the query is + one term long and matches the first term in the indexed field (search for twain, get a bonus for twain, mark + but not mark twain) + + + word_order increases relevance for words + matching the order of search terms, so that the results for the search legend suicide would match higher for the book Legend of a Suicide than for the book, + Suicide Legend + + + full_match boosts relevance when the full + query exactly matches the entire indexed field (after space, case, and diacritics are + normalized). So a title search for The Future of Ice + would get a relevance boost above Ice>Ages of the + Future. + + + Here are the default settings of the search.relevance_adjustment table: + + search.relevance_adjustment table + + + + + + + + field_class + name + bump_type + multiplier + + + + + author + conference + first_word + 1.5 + + + author + corporate + first_word + 1.5 + + + author + other + first_word + 1.5 + + + author + personal + first_word + 1.5 + + + keyword + keyword + word_order + 10 + + + series + seriestitle + first_word + 1.5 + + + series + seriestitle + full_match + 20 + + + title + abbreviated + first_word + 1.5 + + + title + abbreviated + full_match + 20 + + + title + abbreviated + word_order + 10 + + + title + alternative + first_word + 1.5 + + + title + alternative + full_match + 20 + + + title + alternative + word_order + 10 + + + title + proper + first_word + 1.5 + + + title + proper + full_match + 20 + + + title + proper + word_order + 10 + + + title + translated + first_word + 1.5 + + + title + translated + full_match + 20 + + + title + translated + word_order + 10 + + + title + uniform + first_word + 1.5 + + + title + uniform + full_match + 20 + + + title + uniform + word_order + 10 + + + +
+
+ + Combining Index Weighting and Match point Weighting + search relevancycombining index weighting and match point weighting + + Index weighting and matchpoint weighting may be combined. The relevance boost of the combined + weighting is equal to the product of the two multiplied values. + If the relevance setting in the config.metabib_field were increased to 2, and the multiplier + set to 1.2 in the search.relevance_adjustment table, the resulting matchpoint increase would be + 240%. + + In practice, these weights are applied serially -- first the index weight, then all + the matchpoint weights that apply -- because they are evaluated at different stages of the + search process. + + + + Adjusting Relevancy for Keyword Searches + search relevancykeyword search adjusting + Searching the out of the box keyword does not boost the ranking for terms appearing in, the title or subject fields since there is just one + keyword index which does not distinguish terms that appear in the title field from those in the notes field for example. In comparison, the title index is actually composed of + a number of separate indexes: title|proper, title|uniform, title|alternative, title|translated, etc, that collectively form the title index. You can see this in the + config.metabib_field table. The following procedure will add a keyword|title index so that terms found in the title field of an + item are given more weight than terms in other fields. + + + From the command line, access the PostgreSQL command line interface + psql -U evergreen + + + Clone the title|proper index to create a keyword|title index + 6 = the title|proper index + +INSERT INTO config.metabib_field + (field_class, name, xpath, weight, format, search_field, facet_field) + SELECT 'keyword', 'title', xpath, weight, format, search_field, facet_field + FROM config.metabib_field + WHERE id = 6; + + + + Populate the keyword|title index with a set of index entries cloned from the metabib.title_field_entry table; + 6 = the title|proper index + +INSERT INTO metabib.keyword_field_entry + (source, field, value) + SELECT source, 17, value (the field value, 17, field be different in your database + so you may need to check the config.metabib_field + for the id of your new index). + FROM metabib.title_field_entry + WHERE field = 6; + + + + Bump the relevance when the first search term appears first in the title in a keyword search. + 17 = our new keyword|title index (This may be different in your database so you may need to check the + config.metabib_field for the id + of your new index). + +INSERT INTO search.relevance_adjustment + (active, field, bump_type, multiplier) +VALUES (true, 17, 'first_word', 5); + + + + Boost the relevance for search terms appearing in the title in general + 17 = our new keyword|title index (This may be different in your database so you may need to check the + config.metabib_field for the id + of your new index). + +UPDATE config.metabib_field +SET weight = 10 +WHERE id = 17; + + + + +
+
+ Notifications + Notifications can be set up for Holds, Overdue items and Predue items. There are two ways to configure notifications for each of these type of notifications. +
+ Hold Notifications + notificationshold + Hold notifications can be used so that library users are sent an email when their items are available for pickup. This notification is triggered when the item being held + is captured by a library staff member and the item is in the on holds shelf status. + + Hold Notifications using the Action Trigger + The easiest way to set up hold notifications is to use the Action Trigger mechanism introduced in Evergreen 1.6. + + + From the staff client menu, Click on + + Admin + Local Administration + Notifications / Action triggers + + + + + + Locate the Action Trigger Definition with the Name Hold Ready for Pickup Email Notification. + + + Double click on the item row to open the editing page, but not on the hyperlinked Name + + + Check the Enabled check box to enable it. + + + Edit the Template text box to customize the body of the email as needed. Note that text between [% %] are variables to be + generated by the system. For example, [% user.family_name %] with be replaced by the family name of the user receiving a notice. + + + Click Save to save your changes. + + + Hold notices are now activated and will be processed the next time action triggers are processed. See for + more details on processing action triggers. + + + + + Hold Notifications using the Evergreen Configuration File + An older method for Setting up hold notifications is through the Configuration file /openils/conf/opensrf.xml. + + + Open the file /openils/conf/opensrf.xml with your favorite text editor + Locate this section of the configuration file: + + +true + +]]> + + + + Ensure that <email> is set to true. + + + Locate the following section of the configuration file: + + + +... +]]> + + Point the <template> variable to the hold notification template you will be using for hold notifications. + + + Locate the template and edit as desired. Use the example template provided as a guide. + + + +
+
+ Overdue and Predue Notifications + Overdue and Predue email notifications can be used to inform users that they have materials which are overdue or to warn them that materials are almost overdue. + + Activating the Existing Overdue Action Triggers + notificationsoverdueactivating action triggers + The easiest way to set up overdue notifications is to use the Action Trigger mechanism introduced in Evergreen 1.6. + + + From the staff client menu, Click on + + Admin + Local Administration + Notifications / Action triggers + + + + + + Locate the Action Trigger Definition you wish to activate. There are several overdue notices preloaded wit Evergreen 1.6. + + + Double click on the item row to open the editing page, but not on the hyperlinked Name + + + Check the Enabled check box to enable it. + + + Edit the Template text box to customize the body of the email as needed. Note that text between [% %] are variables to be + generated by the system. For example, [% user.family_name %] with be replaced by the family name of the user receiving a notice. + + + Click Save to save your changes. + + + Overdue notices are now activated and will be processed the next time action triggers are processed. See for + more details on processing action triggers. + + + + + Creating Overdue and Predue Notifications by Cloning Existing Action Triggers + notificationsoverduecreating using action triggers + notificationspreduecreating using action triggers + If you wish to add overdue notices for different periods of time or wish to create a predue notice simply clone an existing overdue note, give it a + unique Name, customize as needed. and save. + There are no pre-existing predue notices so they will need to be created by cloning an existing overdue notice. + To make them predue notices, use a negative value in the Processing Delay Context Field. For example, to create a predue notice the day before the + due date, use the value -1 days. + + + Creating Overdue and Predue Notices using the Evergreen Configuration File + notificationsoverduecreating using the configuration file + notificationspreduecreating using the configuration file + It is also possible to create overdue and predue notices using the Evergreen configuration file /openils/conf/opensrf.xml + + + Open /openils/conf/opensrf.xml with your favorite text editor. + Locate this section of the configuration file: + + +... + + + 7 days + + noemail + + true + + + /openils/var/data/templates/overdue_7day.example + + + + + + + + + 3 days + 13 days + + + 1 day + false + true + + /openils/var/data/templates/predue_1day.example + + + +... +]]> + + + + From this section of the configuration file, you may: + + Point to the template file for the specific notice: <email_template> + Set the interval time for the specific notice: <notify_interval> + Indicate whether to attempt email notification for the notice: <email_notify> + For predue notices, you may also specify on which circulation ranges to activate the courtesy notice: + <circ_duration_range> + + + + Locate the templates and edit as desired. Use the example templates provided as guides. + + + From the configuration file you may also set the default email sender address. However, this is just the default and the email sender + address for specific organizational units can be specified in the library settings editor + from the staff client. + + + You also need to set the email server from the configuration file. By default, it uses the localhost. + +
+
+
diff --git a/admin/serversideinstallation.xml b/admin/serversideinstallation.xml new file mode 100644 index 0000000000..08eb13fede --- /dev/null +++ b/admin/serversideinstallation.xml @@ -0,0 +1,2432 @@ + + + + Server-side Installation of Evergreen Software + + This section describes installation of the Evergreen server-side software and its associated components. + Installation, configuration, testing and verification + of the software is straightforward if you follow some simple directions. + + + Installing, configuring and testing the Evergreen server-side software is straightforward with the current + stable software release. See for instructions tailored to + installing on some particular distributions of the Linux operating + system. + The current version of the Evergreen server-side software runs as a native application on any of several + well-known Linux distributions + (e.g., Ubuntu and Debian). + It does not currently run as a native application on the Microsoft Windows + operating system (e.g., WindowsXP, WindowsXP + Professional, Windows7), but the software can still be + installed and run on Windows via a so-called + virtualized Linux-guest Operating System (using, for example, + "VirtualBox" or "VMware" + to emulate a Linux + environment). It can also be installed to run on other Linux + systems via virtualized environments (using, for example, "VirtualBox" or + "VMware"). More information on virtualized environments can be found in + . + Installation of the Evergreen Staff Client software is reviewed in . + The Evergreen server-side software has dependencies on particular versions of certain major software + sub-components. Successful installation of Evergreen software requires that software versions agree with those + listed here: + + + Evergreen Software Dependencies + + Evergreen software dependencies + + + + + + + + Evergreen + OpenSRF + PostgreSQL + + + + + 1.6.1.x + 1.4.0 + 8.2 / 8.3 + + + 1.6.0.x + 1.2 + 8.2 / 8.3 + + + 1.4.x + 1.0 + 8.1 / 8.2 + + + 1.2.x + 0.9 + 8.1 / 8.2 + + + +
+
+ Installing Server-Side Software + This section describes the installation of the major components of Evergreen server-side software. + As far as possible, you should perform the following steps in the exact order given since the + success of many steps relies on the successful completion of earlier steps. You should make backup + copies of files and environments when you are instructed to do so. In the event of installation problems + those copies can allow you to back out of a step gracefully and resume the installation from a known + state. See for further information. + Of course, after you successfully complete and test the entire Evergreen installation you should + take a final snapshot backup of your system(s). This can be the first in the series of regularly + scheduled system backups that you should probably also begin. +
+ + OpenSRF + installation + + Installing OpenSRF 1.6.x On <systemitem class="osname">Ubuntu</systemitem> or + <systemitem class="osname">Debian</systemitem> + + Linux + Debian + + + Linux + Ubuntu + + This section describes the installation of the latest version of the Open Service Request + Framework (OpenSRF), a major component of the Evergreen server-side software, on + Ubuntu or Debian + systems. Evergreen software is integrated with and depends on the OpenSRF software + system. + Follow the steps outlined here and run the specified tests to ensure that OpenSRF is + properly installed and configured. Do not + continue with any further Evergreen installation steps + until you have verified that OpenSRF has been successfully installed and tested. + + The following steps have been tested on the x86 (32-bit) and x86-64 (64-bit) + platforms. OpenSRF 1.4.0 has been tested on Debian Etch + (4.0), Debian Lenny (5.0) and + Ubuntu Lucid Lynx (10.04). + In the following instructions, you are asked to perform certain steps as + either the root user, the + opensrf user, or the + postgres user. + + + Debian -- To become the + root user, issue the command + su - and enter the password of the + root user. + + + Ubuntu -- To become the + root user, issue the command + sudo su - and enter the password of the + root user. + + + To switch from the root user to a + different user, issue the command su - USERNAME. For example, to + switch from the root user to the + opensrf user, issue the command + su - opensrf. Once you have become a non-root user, to become + the root user again, simply issue the command + exit. + + + + Add New <systemitem class="username">opensrf</systemitem> User + As the root user, add the + opensrf user to the system. + In the following example, the default shell for the + opensrf user is automatically set + to /bin/bash to inherit a reasonable environment: + + + # as the root user: + useradd -m -s /bin/bash opensrf + passwd opensrf + + + + Download and Unpack Latest OpenSRF Version + + OpenSRF + download + + The latest version of OpenSRF can be found here: + . + As the opensrf user, change to + the directory /home/opensrf then download + and extract OpenSRF. The new subdirectory + /home/opensrf/opensrf-1.6.3 will be created: + + + # as the opensrf user: + cd /home/opensrf + wget http://evergreen-ils.org/downloads/opensrf-1.6.3.tar.gz + tar zxf opensrf-1.6.3.tar.gz + + + + Install Prerequisites to Build OpenSRF + In this section you will install and configure a set of prerequisites that will be + used to build OpenSRF. In a following step you will actually build the OpenSRF software + using the make utility. + As the root user, enter the commands show + below to build the prerequisites from the software distribution that you just downloaded + and unpacked. Remember to replace [DISTRIBUTION] in the following + example with the keyword corresponding to the name of one of the + Linux distributions listed in the following + distribution keywords table . + For example, to install the prerequisites for Ubuntu version 10.04 (Lucid Lynx) you would + enter this command: make -f src/extras/Makefile.install ubuntu-lucid . + + + # as the root user: + cd /home/opensrf/opensrf-1.6.3 + make -f src/extras/Makefile.install [DISTRIBUTION] + + + + Keyword Targets for OpenSRF <application>"make"</application> Command + + + + + + Keyword + Linux Version + + + + + debian-etch + Debian "Etch" (4.0) + + + debian-lenny + Debian "Lenny" (5.0) + + + ubuntu-hardy + Ubuntu "Hardy Heron" (8.04) + + + ubuntu-karmic + Ubuntu "Karmic Koala" (9.10) + + + ubuntu-lucid + Ubuntu "Lucid Lynx" (10.04) + + + fedora13 + Fedora "Goddard" (13) + + + centos + Centos + + + rhel + RHEL + + + gentoo + Gentoo + + + +
+ This will install a number of packages on the system that are required by OpenSRF, + including some Perl modules from CPAN. You can say No to the initial + CPAN configuration prompt to allow it to automatically configure itself to download and + install Perl modules from CPAN. The CPAN installer will ask you a number of times whether + it should install prerequisite modules - say Yes. +
+ + Build OpenSRF + In this section you will configure, build and install the OpenSRF + components that support other Evergreen services. + + + Configure OpenSRF + + OpenSRF + configure + + As the opensrf + user, return to the new OpenSRF build directory and use the + configure utility to prepare for the next + step of compiling and linking the software. If you wish to + include support for Python and Java, add the configuration + options and + , respectively: + + + # as the opensrf user: + cd /home/opensrf/opensrf-1.6.3 + ./configure --prefix=/openils --sysconfdir=/openils/conf + make + + This step will take several minutes to complete. + + + Compile, Link and Install OpenSRF + As the root + user, return to the new OpenSRF build directory and use the + make utility to compile, link and install + OpenSRF: + + + # as the root user: + cd /home/opensrf/opensrf-1.6.3 + make install + + This step will take several minutes to complete. + + + Update the System Dynamic Library Path + You must update the system dynamic library path to force + your system to recognize the newly installed libraries. As the + root user, do this by + creating the new file + /etc/ld.so.conf.d/osrf.conf containing a + new library path, then run the command + ldconfig to automatically read the file and + modify the system dynamic library path: + + + # as the root user: + echo "/openils/lib" > /etc/ld.so.conf.d/osrf.conf + ldconfig + + + + Define Public and Private OpenSRF Domains + For security purposes, OpenSRF uses Jabber domains to separate services + into public and private realms. On a single-server system the easiest way to + define public and private OpenSRF domains is to define separate host names by + adding entries to the file /etc/hosts. + In the following steps we will use the example domains + public.localhost for the public + domain and private.localhost + for the private domain. In an upcoming step, you will configure two special + ejabberd users + to handle communications for these two domains. + As the root user, edit the file + /etc/hosts and add the following example domains: + + Jabber + + + + # as the root user: + 127.0.1.2 public.localhost public + 127.0.1.3 private.localhost private + + + + Change File Ownerships + Finally, as the root + user, change the ownership of all files installed in the + directory /openils to the + user opensrf: + + + # as the root user: + chown -R opensrf:opensrf /openils + + + + + + Stop the <systemitem class="service">ejabberd</systemitem> Service + + ejabberd + + Before continuing with configuration of ejabberd + you must stop that service. As the root user, + execute the following command to stop the service: + + + # as the root user: + /etc/init.d/ejabberd stop + + If ejabberd reports that it + is already stopped, there may have been a problem when it started back + in the installation step. If there are any remaining daemon processes such as + beam or + epmd + you may need to perform the following commands to kill them: + + + # as the root user: + epmd -kill + killall beam; killall beam.smp + rm /var/lib/ejabberd/* + echo 'ERLANG_NODE=ejabberd@localhost' >> /etc/default/ejabberd + + + + Edit the <systemitem class="service">ejabberd</systemitem> configuration + You must make several configuration changes for the + ejabberd service before + it is started again. + As the root user, edit the file + /etc/ejabberd/ejabberd.cfg and make the following changes: + + + Change the line: + {hosts, ["localhost"]}. + to instead read: + {hosts, ["localhost", "private.localhost", "public.localhost"]}. + + + + Change the line: + {max_user_sessions, 10} + to instead read: + {max_user_sessions, 10000} + + If the line looks something like this: + {access, max_user_sessions, [{10, all}]} + then change it to instead read: + {access, max_user_sessions, [{10000, all}]} + + + Change all three occurrences of: + max_stanza_size + to instead read: + 2000000 + + + Change both occurrences of: + maxrate + to instead read: + 500000 + + + Comment out the line: + {mod_offline, []} + by placing two % comment signs in front + so it instead reads: + %%{mod_offline, []} + + + + + Restart the <systemitem class="service">ejabberd</systemitem> service + As the root user, restart the + ejabberd service to test the + configuration changes and to register your users: + + + # as the root user: + /etc/init.d/ejabberd start + + + + Register <systemitem class="username">router</systemitem> and + <systemitem class="username">opensrf</systemitem> as + <systemitem class="service">ejabberd</systemitem> users + The two ejabberd users + router and + opensrf must be registered + and configured to manage OpenSRF router service and communications + for the two domains public.localhost and + private.localhost that you added to the file + /etc/hosts in a previous step + (see ). + The users include: + + + the router user, + to whom all requests to connect to an OpenSRF service will be + routed; + + + the opensrf user, + which clients use to connect to OpenSRF services (you may name + the user anything you like, but we use + opensrf in these examples) + + + As the root user, execute the + ejabberdctl utility as shown below to register and create passwords + for the users router and + opensrf on each domain (remember to replace + NEWPASSWORD with the appropriate password): + + + # as the root user: + # Note: the syntax for registering a user with ejabberdctl is: + # ejabberdctl register USER DOMAIN PASSWORD + ejabberdctl register router private.localhost NEWPASSWORD + ejabberdctl register router public.localhost NEWPASSWORD + ejabberdctl register opensrf private.localhost NEWPASSWORD + ejabberdctl register opensrf public.localhost NEWPASSWORD + + Note that the users router and + opensrf and their respective passwords + will be used again in when + we modify the OpenSRF configuration file /openils/conf/opensrf_core.xml . + + + Create OpenSRF configuration files + As the opensrf user, + execute the following commands to create the new configuration files + /openils/conf/opensrf_core.xml and + /openils/conf/opensrf.xml from the example templates: + + + # as the opensrf user: + cd /openils/conf + cp opensrf.xml.example opensrf.xml + cp opensrf_core.xml.example opensrf_core.xml + + + + Update usernames and passwords in the OpenSRF configuration file + As the opensrf user, edit the + OpenSRF configuration file /openils/conf/opensrf_core.xml + and update the usernames and passwords to match the values shown in the + following table. The left-hand side of + shows common XPath syntax to indicate the approximate position within the XML + file that needs changes. The right-hand side of the table shows the replacement + values: + + + Sample XPath syntax for editing "opensrf_core.xml" + + + + + + XPath location + Value + + + + + /config/opensrf/username + + opensrf + + + + /config/opensrf/passwd + private.localhost + password for + opensrf user + + + + /config/gateway/username + + opensrf + + + + /config/gateway/passwd + public.localhost + password for + opensrf user + + + + /config/routers/router/transport/username, + first entry where server == public.localhost + + router + + + + /config/routers/router/transport/password, + first entry where server == public.localhost + public.localhost + password for + router user + + + + /config/routers/router/transport/username, + second entry where server == private.localhost + + router + + + + /config/routers/router/transport/password, + second entry where server == private.localhost + private.localhost + password for + router user + + + + +
+ You may also need to modify the file to specify the domains from which + OpenSRF will accept connections, + and to which it will make connections. + If you are installing OpenSRF on a single server + and using the private.localhost and + public.localhost domains, + these will already be set to the correct values. Otherwise, search and replace + to match values for your own systems. +
+ + Set location of the persistent database + As the opensrf user, edit the + file /openils/conf/opensrf.xml, then find and modify the + element dbfile (near the end of the file) to set the + location of the persistent database. Change the default line: + /openils/var/persist.db + to instead read: + /tmp/persist.db + Following is a sample modification of that portion of the file: + + + + /tmp/persist.db + + +]]> + + + Create configuration files for users needing <command>srfsh</command> + In this section you will set up a special configuration file for each user + who will need to run the srfsh (pronounced surf + shell) utility. + + srfsh + + The software installation will automatically create the utility + srfsh (surf shell), a command line diagnostic tool for + testing and interacting with OpenSRF. It will be used + in a future step to complete and test the Evergreen installation. See + for further information. + As the root user, copy the + sample configuration file /openils/conf/srfsh.xml.example + to the home directory of each user who will use srfsh. + For instance, do the following for the + opensrf user: + + + # as the root user: + cp /openils/conf/srfsh.xml.example /home/opensrf/.srfsh.xml + + Edit each user's file ~/.srfsh.xml and make the + following changes: + + + Modify domain to be the router hostname + (following our domain examples, + private.localhost will give + srfsh access to all OpenSRF services, while + public.localhost + will only allow access to those OpenSRF services that are + publicly exposed). + + + Modify username and + password to match the + opensrf Jabber user for the chosen + domain + + + Modify logfile to be the full path for + a log file to which the user has write access + + + Modify loglevel as needed for testing + + + Change the owner of the file to match the owner of the home directory + + + Following is a sample of the file: + + + + +router +private.localhost +opensrf +SOMEPASSWORD +5222 +/tmp/srfsh.log + +4 + +]]> + + + Modify the environmental variable <envar>PATH</envar> for the + <systemitem class="username">opensrf</systemitem> user + As the opensrf user, modify the + environmental variable PATH by adding a new file path to the + opensrf user's shell configuration + file ~/.bashrc: + + + # as the opensrf user: + echo "export PATH=/openils/bin:\$PATH" >> ~/.bashrc + + + + Start OpenSRF + As the root user, start the + ejabberd and + memcached services: + + + # as the root user: + /etc/init.d/ejabberd start + /etc/init.d/memcached start + + As the opensrf user, + start OpenSRF as follows: + + + # as the opensrf user: + osrf_ctl.sh -l -a start_all + + The flag forces Evergreen to use + localhost (your current system) + as the hostname. The flag starts the other + OpenSRF router , + Perl , and + C services. + + + You can also start Evergreen without the + flag, but the osrf_ctl.sh + utility must know the fully qualified domain name for the system + on which it will execute. That hostname was probably specified + in the configuration file opensrf.xml which + you configured in a previous step. + + + If you receive an error message similar to + osrf_ctl.sh: command not found, then your + environment variable PATH does not include the + directory /openils/bin. + As the opensrf user, + edit the configuration file ~/.bashrc and + add the following line: + export PATH=$PATH:/openils/bin + + + + + Test connections to OpenSRF + Once you have installed and started OpenSRF, as the + root user, test your connection to + OpenSRF using the srfsh + utility and trying to call the add method on the OpenSRF + math service: + + + # as the root user: + /openils/bin/srfsh + + srfsh# request opensrf.math add 2 2 + + Received Data: 4 + ------------------------------------ + Request Completed Successfully + Request Time in seconds: 0.007519 + ------------------------------------ + + For other srfsh commands, type in + help at the prompt. + + + Stop OpenSRF + After OpenSRF has started, you can stop it at any time by using the + osrf_ctl.sh again. As the + opensrf + user, stop OpenSRF as follows: + + + # as the opensrf user: + osrf_ctl.sh -l -a stop_all + + +
+
+
+ Installing Evergreen 1.6.1.x On <systemitem class="osname">Ubuntu</systemitem> or + <systemitem class="osname">Debian</systemitem> + + Linux + Debian + + + Linux + Ubuntu + + This section outlines the installation process for the latest stable version of + Evergreen. + In this section you will download, unpack, install, configure and test the Evergreen + system, including the Evergreen server and the PostgreSQL database system. You will make several + configuration changes and adjustments to the software, including updates to configure the system + for your own locale, and some updates needed to work around a few known issues. + + The following steps have been tested on the x86 (32-bit) and x86-64 (64-bit) + architectures. There may be differences between the Desktop and Server editions of + Ubuntu. These instructions assume the Server + edition. + In the following instructions, you are asked to perform certain steps as + either the root user, the + opensrf user, or the + postgres user. + + + Debian -- To become the + root user, issue the command + su - and enter the password of the + root user. + + + Ubuntu -- To become the + root user, issue the command + sudo su - and enter the password of the + root user. + + + To switch from the root user to a + different user, issue the command su - USERNAME. For example, to + switch from the root user to the + opensrf user, issue the command + su - opensrf. Once you have become a non-root user, to become the + root user again, simply issue the command + exit. + + + + Install OpenSRF + Evergreen software is integrated with and depends on the Open Service + Request Framework (OpenSRF) software system. For further information on + installing, configuring and testing OpenSRF, see + . + Follow the steps outlined in that section and run the specified tests to + ensure that OpenSRF is properly installed and configured. Do + not continue with + any further Evergreen installation steps until you have verified that OpenSRF + has been successfully installed and tested. + + + Download and Unpack Latest Evergreen Version + The latest version of Evergreen can be found here: + . + As the opensrf user, change to + the directory /home/opensrf then download + and extract Evergreen. The new subdirectory + /home/opensrf/Evergreen-ILS-1.6.1.8 will be created: + + + # as the opensrf user: + cd /home/opensrf + wget http://evergreen-ils.org/downloads/Evergreen-ILS-1.6.1.8.tar.gz + tar zxf Evergreen-ILS-1.6.1.8.tar.gz + + + + Install Prerequisites to Build Evergreen + In this section you will install and configure a set of prerequisites that will be + used later in and + to build the Evergreen software + using the make utility. + As the root user, enter the commands show + below to build the prerequisites from the software distribution that you just downloaded + and unpacked. Remember to replace [DISTRIBUTION] in the following + example with the keyword corresponding to the name of one of the + Linux distributions listed in the following + distribution keywords table . + For example, to install the prerequisites for Ubuntu version 9.10 (Karmic Koala) you would + enter this command: make -f Open-ILS/src/extras/Makefile.install + ubuntu-karmic. + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-1.6.1.8 + make -f Open-ILS/src/extras/Makefile.install [DISTRIBUTION] + + + + Keyword Targets for Evergreen <application>"make"</application> Command + + + + + + Keyword + Linux Version + + + + + debian-etch + Debian "Etch" (4.0) + + + debian-lenny + Debian "Lenny" (5.0) + + + ubuntu-hardy + Ubuntu "Hardy Heron" (8.04) + + + ubuntu-intrepid + Ubuntu "Intrepid Ibex" (8.10) + + + ubuntu-karmic + Ubuntu "Karmic Koala" (9.10) + + + ubuntu-karmic + Ubuntu "Lucid Lynx" (10.04) + + + centos + Centos + + + rhel + RHEL + + + gentoo + Gentoo + + + +
+
+ + (OPTIONAL) Install the PostgreSQL Server + + databases + PostgreSQL + + Since the PostgreSQL server is usually a standalone server in multi-server + production systems, the prerequisite installer Makefile in the previous section + (see ) + does not automatically install PostgreSQL. You must install the PostgreSQL server + yourself, either on the same system as Evergreen itself or on another system. + If your PostgreSQL server is on a different system, just skip this step. + If your PostgreSQL server will be on the same system as your Evergreen + software, you can install the required PostgreSQL server packages as described + in , or you can visit the official + web site http://www.postgresql.org + for more information. + + PostgreSQL versions 8.3 or 8.4 are the recommended versions to work + with Evergreen version 1.6.1.8 . If you have an older version of PostgreSQL, + you should upgrade before installing Evergreen. To find your current version + of PostgreSQL, as the postgres + user execute the command psql, then type + SELECT version(); to get detailed information + about your version of PostgreSQL. + + + + Install Perl Modules on PostgreSQL Server + If PostgreSQL is running on the same system as your Evergreen software, + then the Perl modules will automatically be available. Just skip this step. + Otherwise, continue if your PostgreSQL server is running on another system. + You will need to install several Perl modules on the other system. As the + root user install the following Perl + modules: + + + # as the root user: + # first, ensure the gcc compiler is installed: + apt-get install gcc + + # then install the Perl modules: + perl -MCPAN -e shell + + cpan> install JSON::XS + cpan> install MARC::Record + cpan> install MARC::File::XML + + For more information on installing Perl Modules vist the official + CPAN site. + + Perl + CPAN + + + + Update the System Dynamic Library Path + You must update the system dynamic library path to force your system to recognize + the newly installed libraries. As the root user, + do this by creating the new file /etc/ld.so.conf.d/osrf.conf + containing a new library path, then run the command ldconfig to + automatically read the file and modify the system dynamic library path: + + + # as the root user: + echo "/usr/local/lib" >> /etc/ld.so.conf.d/osrf.conf + echo "/usr/local/lib/dbd" >> /etc/ld.so.conf.d/osrf.conf + ldconfig + + + + Restart the PostgreSQL Server + If PostgreSQL is running on the same system as the rest of Evergreen, as + the root user you must restart + PostgreSQL to re-read the new library paths just configured. If PostgreSQL is + running on another system, you may skip this step. + As the opensrf user, + execute the following command (remember to replace + PGSQL_VERSION with your installed PostgreSQL version, + for example 8.3): + + + # as the opensrf user: + /etc/init.d/postgresql-PGSQL_VERSION restart + + + + Configure Evergreen + In this step you will use the configure and + make utilities to configure Evergreen so it can be compiled + and linked later in . + As the opensrf user, return to + the Evergreen build directory and execute these commands: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.8 + ./configure --prefix=/openils --sysconfdir=/openils/conf + make + + + + Compile, Link and Install Evergreen + In this step you will actually compile, link and install Evergreen and the + default Evergreen Staff Client. + As the root user, return to the + Evergreen build directory and use the make utility as shown below: + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-1.6.1.8 + make STAFF_CLIENT_BUILD_ID=rel_1_6_1_8 install + + The Staff Client will also be automatically built, but you must remember + to set the variable STAFF_CLIENT_BUILD_ID to match the version of the + Staff Client you will use to connect to the Evergreen server. + The above commands will create a new subdirectory + /openils/var/web/xul/rel_1_6_1_8 + containing the Staff Client. + To complete the Staff Client installation, as the + root user execute the following commands to + create a symbolic link named server in the head of the Staff Client + directory /openils/var/web/xul that points to the + subdirectory /server of the new Staff Client + build: + + + # as the root user: + cd /openils/var/web/xul + ln -sf rel_1_6_1_8/server server + + + + Copy the OpenSRF Configuration Files + In this step you will replace some OpenSRF configuration files that you set up in + when you installed and + tested OpenSRF. + You must copy several example OpenSRF configuration files into place after first + creating backup copies for troubleshooting purposes, then change all the file ownerships + to opensrf. + As the root user, execute the following + commands: + + + # as the root user: + cd /openils/conf + cp opensrf.xml opensrf.xml.BAK + cp opensrf_core.xml opensrf_core.xml.BAK + cp opensrf.xml.example opensrf.xml + cp opensrf_core.xml.example opensrf_core.xml + cp oils_web.xml.example oils_web.xml + chown -R opensrf:opensrf /openils/ + + + + Create and Configure PostgreSQL Database + + databases + PostgreSQL + + In this step you will create the Evergreen database. In the commands + below, remember to adjust the path of the contrib + repository to match your PostgreSQL server + layout. For example, if you built PostgreSQL from source the path would be + /usr/local/share/contrib , and if you + installed the PostgreSQL 8.3 server packages on Ubuntu 8.04, + the path would be + /usr/share/postgresql/8.3/contrib/ . + + + + Create and configure the database + + As the postgres + user on the PostgreSQL system create the PostgreSQL database, + then set some internal paths: + + + # as the postgres user: + createdb evergreen -E UTF8 -T template0 + createlang plperl evergreen + createlang plperlu evergreen + createlang plpgsql evergreen + + Continue as the postgres user + and execute the SQL scripts as shown below (remember to adjust the paths as needed, + where PGSQL_VERSION is your installed PostgreSQL + version, for example 8.3). + + + # as the postgres user: + psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/tablefunc.sql evergreen + psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/tsearch2.sql evergreen + psql -f /usr/share/postgresql/PGSQL_VERSION/contrib/pgxml.sql evergreen + + + + Create <systemitem class="username">evergreen</systemitem> PostgreSQL user + As the postgres + user on the PostgreSQL system, create a new PostgreSQL user + named evergreen and + assign a password (remember to replace NEWPASSWORD + with an appropriate new password): + + + # as the postgres user: + createuser -P -s evergreen + + Enter password for new role: NEWPASSWORD + Enter it again: NEWPASSWORD + + + + Create database schema + In this step you will create the database schema and configure your + system with the corresponding database authentication details for the + evergreen database user that you just created in + . + As the root user, enter + the following commands and replace HOSTNAME, PORT, + PASSWORD and DATABASENAME with appropriate + values: + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-1.6.1.8 + perl Open-ILS/src/support-scripts/eg_db_config.pl --update-config \ + --service all --create-schema --create-bootstrap --create-offline \ + --hostname HOSTNAME --port PORT \ + --user evergreen --password PASSWORD --database DATABASENAME + + On most systems, HOSTNAME will be + localhost and + PORT will be 5432. + Of course, values for PASSWORD and + DATABASENAME must match the values you used in + . + As the command executes, you may see warnings similar to: + ERROR: schema SOMENAME does not exist (in fact, + you may see one warning per schema) but they can be safely ignored. + If you are entering the above command on a single line, do not + include the \ (backslash) characters. If you are using + the bash shell, these should only be used at the end of + a line at a bash prompt to indicate that the command is + continued on the next line. + + + + + Configure the Apache web server + + web server + Apache + + In this step you will configure the Apache web server to support Evergreen + software. + First, you must enable some built-in Apache modules and install some + additional Apache configuration files. Then you will create a new Security + Certificate. Finally, you must make several changes to the Apache configuration + file. + + + Enable the required Apache Modules + As the root + user, enable some modules in the Apache server, then copy the + new configuration files to the Apache server directories: + + Apache modules + + + + # as the root user: + a2enmod ssl # enable mod_ssl + a2enmod rewrite # enable mod_rewrite + a2enmod expires # enable mod_expires + + As the commands execute, you may see warnings similar to: + Module SOMEMODULE already enabled but you can + safely ignore them. + + + Copy Apache configuration files + You must copy the Apache configuration files from the + Evergreen installation directory to the Apache directory. As the + root user, perform the + following commands: + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-1.6.1.8 + cp Open-ILS/examples/apache/eg.conf /etc/apache2/sites-available/ + cp Open-ILS/examples/apache/eg_vhost.conf /etc/apache2/ + cp Open-ILS/examples/apache/startup.pl /etc/apache2/ + + + + Create a Security Certificate + In this step you will create a new Security Certificate (SSL Key) + for the Apache server using the openssl command. For a + public production server you must configure or purchase a signed SSL + certificate, but for now you can just use a self-signed certificate and + accept the warnings in the Staff Client and browser during testing and + development. As the root user, + perform the following commands: + + + # as the root user: + mkdir /etc/apache2/ssl + cd /etc/apache2/ssl + openssl req -new -x509 -days 365 -nodes -out server.crt -keyout server.key + + You will be prompted for several items of information; enter + the appropriate information for each item. The new files + server.crt and server.key will + be created in the directory + /etc/apache2/ssl . + This step generates a self-signed SSL certificate. You must install + a proper SSL certificate for a public production system to avoid warning + messages when users login to their account through the OPAC or when staff + login through the Staff Client. For further information on + installing a proper SSL certificate, see + . + + + Update Apache configuration file + You must make several changes to the new Apache + configuration file + /etc/apache2/sites-available/eg.conf . + As the root user, + edit the file and make the following changes: + + + In the section + <Directory "/openils/var/cgi-bin"> + replace the line: + Allow from 10.0.0.0/8 + with the line: + Allow from all + This change allows access to your configuration + CGI scripts from any workstation on any network. This is + only a temporary change to expedite testing and should be + removed after you have finished and successfully tested + the Evergreen installation. See + + for further details on removing this change after the + Evergreen installation is complete. + + + + Comment out the line: + Listen 443 + since it conflicts with the same declaration in + the configuration file: + /etc/apache2/ports.conf. Note that + Debian users + should not do this since the conflict does not apply to + that operating system. + + + The following updates are needed to allow the logs + to function properly, but it may break other Apache + applications on your server: + For the + Linux distributions + Ubuntu Hardy or + Debian Etch, as + the root user, + edit the Apache configuration file + /etc/apache2/apache2.conf and change + the line User www-data to User + opensrf. + For the + Linux distributions + Ubuntu Karmic, + Ubuntu Lucid or + Debian Lenny, as + the root user, + edit the Apache configuration file and change the lines: + + + export APACHE_RUN_USER=www-data + export APACHE_RUN_GROUP=www-data + + to instead read: + + + export APACHE_RUN_USER=opensrf + export APACHE_RUN_GROUP=opensrf + + + + As the + root user, + edit the Apache configuration file + /etc/apache2/apache2.conf and + modify the value for KeepAliveTimeout + and MaxKeepAliveRequests to match + the following: + + + KeepAliveTimeout 1 + MaxKeepAliveRequests 100 + + + + Further configuration changes to Apache may be + necessary for busy systems. These changes increase the + number of Apache server processes that are started to + support additional browser connections. + As the + root user, + edit the Apache configuration file + /etc/apache2/apache2.conf, locate + and modify the section related to prefork + configuration to suit the load on your + system: + + StartServers 20 + MinSpareServers 5 + MaxSpareServers 15 + MaxClients 150 + MaxRequestsPerChild 10000 + +]]> + + + + + Enable the Evergreen web site + Finally, you must enable the Evergreen web site. As the + root user, execute the + following Apache configuration commands to disable the default + It Works web page and enable the Evergreen + web site, and then restart the Apache server: + + + # as the root user: + # disable/enable web sites + a2dissite default + a2ensite eg.conf + # restart the server + /etc/init.d/apache2 reload + + + + + + Update the OpenSRF Configuration File + As the opensrf user, edit the + OpenSRF configuration file /openils/conf/opensrf_core.xml + to update the Jabber usernames and passwords, and to specify the domain from + which we will accept and to which we will make connections. + If you are installing Evergreen on a single server and using the + private.localhost / + public.localhost domains, + these will already be set to the correct values. Otherwise, search and replace + to match your customized values. + The left-hand side of + shows common XPath syntax to indicate the approximate position within the XML + file that needs changes. The right-hand side of the table shows the replacement + values: + + + Sample XPath syntax for editing "opensrf_core.xml" + + + + + + XPath location + Value + + + + + /config/opensrf/username + + opensrf + + + + /config/opensrf/passwd + private.localhost + password for + opensrf user + + + + /config/gateway/username + + opensrf + + + + /config/gateway/passwd + public.localhost + password for + opensrf user + + + + /config/routers/router/transport/username, + first entry where server == public.localhost + + router + + + + /config/routers/router/transport/password, + first entry where server == public.localhost + public.localhost + password for + router user + + + + /config/routers/router/transport/username, + second entry where server == private.localhost + + router + + + + /config/routers/router/transport/password, + second entry where server == private.localhost + private.localhost + password for + router user + + + + +
+
+ + (OPTIONAL) Create Configuration Files for Users Needing <command>srfsh</command> + When OpenSRF was installed in , the + software installation automatically created a utility named srfsh (surf + shell). This is a command line diagnostic tool for testing and interacting with + OpenSRF. It will be used in a future step to complete and test the Evergreen installation. + Earlier in you also created a configuration + file ~/.srfsh.xml for each user that might need to use the utility. + See for further information. + + + Modify the OpenSRF Environment + In this step you will make some minor modifications to the OpenSRF environment: + + + Modify the permissions in the directory + /openils/var/cgi-bin + to make the files executable: + + + # as the opensrf user: + chmod 755 /openils/var/cgi-bin/*.cgi + + + + As the opensrf user, + modify the shell configuration file ~/.bashrc for + user opensrf by adding a Perl + environmental variable, then execute the shell configuration file to load + the new variables into your current environment. + In a multi-server environment, you must add any + modifications to ~/.bashrc to the top of the file + before the line [ -z "$PS1" ] && + return . This will allow headless (scripted) logins to load the + correct environment. + + + # as the opensrf user: + echo "export PERL5LIB=/openils/lib/perl5:\$PERL5LIB" >> ~/.bashrc + . ~/.bashrc + + + + + + (OPTIONAL) Enable and Disable Language Localizations + You can load translations such as Armenian (hy-AM), Canadian French + (fr-CA), and others into the database to complete the translations available in + the OPAC and Staff Client. For further information, see + . + +
+
+
+ Starting Evergreen + In this section you will learn how to start the Evergreen services. + For completeness, instructions for stopping Evergreen can be found later in + . + + + As the root + user, start the ejabberd and + memcached services as follows: + + + # as the root user: + /etc/init.d/ejabberd start + /etc/init.d/memcached start + + + + As the opensrf user, + start Evergreen as follows: + + + # as the opensrf user: + osrf_ctl.sh -l -a start_all + + The flag forces Evergreen to use + localhost (your current system) + as the hostname. The flag starts the other + OpenSRF router , + Perl , and + C services. + + + You can also start Evergreen without the + flag, but the osrf_ctl.sh + utility must know the fully qualified domain name for the system + on which it will execute. That hostname was probably specified + in the configuration file opensrf.xml which + you configured in a previous step. + + + If you receive an error message similar to + osrf_ctl.sh: command not found, then your + environment variable PATH does not include the + directory /openils/bin. + As the opensrf user, + edit the configuration file ~/.bashrc and + add the following line: + export PATH=$PATH:/openils/bin + + + If you receive an error message similar to Can't + locate OpenSRF/System.pm in @INC ... BEGIN failed--compilation + aborted, then your environment variable + PERL5LIB does not include the + directory /openils/lib/perl5. + As the opensrf user, + edit the configuration file ~/.bashrc and + add the following line: + export PERL5LIB=$PERL5LIB:/openils/lib/perl5 + + + + + In this step you will generate the Web files needed by the Staff Client + and catalog, and update the proximity of locations in the Organizational Unit + tree (which allows Holds to work properly). + You must do this the first time you start Evergreen and after making any + changes to the library hierarchy. + As the opensrf user, execute the + following command and review the results: + + + # as the opensrf user: + cd /openils/bin + ./autogen.sh -c /openils/conf/opensrf_core.xml -u + + Updating Evergreen organization tree and IDL using '/openils/conf/opensrf_core.xml' + Updating fieldmapper + Updating web_fieldmapper + Updating OrgTree + removing OrgTree from the cache for locale hy-AM... + removing OrgTree from the cache for locale cs-CZ... + removing OrgTree from the cache for locale en-CA... + removing OrgTree from the cache for locale en-US... + removing OrgTree from the cache for locale fr-CA... + removing OrgTree from the cache for locale ru-RU... + Updating OrgTree HTML + Updating locales selection HTML + Updating Search Groups + Refreshing proximity of org units + Successfully updated the organization proximity + Done + + + + As the root user, restart the + Apache Web server: + + + # as the root user: + /etc/init.d/apache2 restart + + If the Apache Web server was running when you started the OpenSRF + services, you might not be able to successfully log into the OPAC or Staff + Client until the Apache Web server has been restarted. + + +
+
+ Testing Your Evergreen Installation + This section describes several simple tests you can perform to verify that the Evergreen + server-side software has been installed and configured properly and is running as + expected. + + Testing Connections to Evergreen + Once you have installed and started Evergreen, test your connection to Evergreen. Start the + srfsh application and try logging onto the Evergreen server using the default + administrator username and password. Following is sample output generated by executing + srfsh after a successful Evergreen installation. For help with + srfsh commands, type help at the prompt. + As the opensrf user, + execute the following commands to test your Evergreen connection: + + + # as the opensrf user: + /openils/bin/srfsh + + srfsh% login admin open-ils + Received Data: "250bf1518c7527a03249858687714376" + ------------------------------------ + Request Completed Successfully + Request Time in seconds: 0.045286 + ------------------------------------ + Received Data: { + "ilsevent":0, + "textcode":"SUCCESS", + "desc":" ", + "pid":21616, + "stacktrace":"oils_auth.c:304", + "payload":{ + "authtoken":"e5f9827cc0f93b503a1cc66bee6bdd1a", + "authtime":420 + } + } + ------------------------------------ + Request Completed Successfully + Request Time in seconds: 1.336568 + ------------------------------------ + + If this does not work, try the following: + + + As the opensrf user, run the + settings-tester.pl utility to review your Evergreen + installation for any system configuration problems: + + + # as the opensrf user: + cd /home/opensrf + ./Evergreen-ILS-1.6.1.8/Open-ILS/src/support-scripts/settings-tester.pl + + If the output of settings-tester.pl does not help you + find the problem, please do not make any significant changes to your + configuration. + + + Follow the steps in the troubleshooting guide in + . + + + If you have followed the entire set of installation steps listed here + closely, you are probably extremely close to a working system. Gather your + configuration files and log files and contact the + Evergreen Development Mailing List + list for assistance before making any drastic changes to your system + configuration. + + + + + Testing the Staff Client on Linux + In this section you will confirm that a basic login on the Staff Client works + properly. + Run the Evergreen Staff Client on a Linux system by using the application + XULRunner (installed automatically and by default with Firefox + version 3.0 and later on Ubuntu and Debian distributions). + As the root user, start the Staff Client + as shown: + + + # as the root user: + xulrunner /home/opensrf/Evergreen-ILS-1.6.1.8/Open-ILS/xul/staff_client/build/application.ini + + A login screen for the Staff Client similar to this should appear: + + Logging into the Staff Client + + + + + First, add the name of your Evergreen server to the field + Hostname in the Server section. You will probably + want to use 127.0.0.1. After adding the server name, click Re-Test + Server. You should now see the messages 200:OK in the fields + Status and Version. + Because this is the initial run of the Staff Client, you will see a warning in the + upper-right saying: Not yet configured for the specified + server. To continue, you must assign a workstation name. Refer to + for further details. + Try to log into the Staff Client with the username admin and + the password open-ils. If the login is successful, you will see the + following screen: + + Logging into the Staff Client + + + + + Otherwise, you may need to click 'Add SSL Exception' in the + main window. You should see a popup window titled Add Security Exception: + + Adding an SSL Exception in the Staff Client + + + + + Click 'Get Certificate', then click 'Confirm + Security Exception', then click 'Re-Test Server' in the + main window and try to log in again. + + + Testing the Apache Web Server + In this section you will test the Apache configuration file(s), then restart the + Apache web server. + As the root user, execute the following + commands. Note the use of restart to force the new Evergreen + modules to be reloaded even if the Apache server is already running. Any problems found + with your configuration files should be displayed: + + + # as the root user: + apache2ctl configtest && /etc/init.d/apache2 restart + + + + Stopping Evergreen + In you learned how to start the + Evergreen services. For completeness, following are instructions for stopping the + Evergreen services. + As the opensrf user, stop all Evergreen + services by using the following command: + + + # as the opensrf user + # stop the server; use "-l" to force hostname to be "localhost" + osrf_ctl.sh -l -a stop_all + + You can also stop Evergreen services without the + flag, but the osrf_ctl.sh utility must know the + fully qualified domain name for the system on which it will execute. That hostname may + have been specified in the configuration file opensrf.xml, which + you configured in a previous step. + +
+
+ Post-Installation Chores + There are several additional steps you may need to complete after Evergreen has been + successfully installed and tested. Some steps may not be needed (e.g., setting up support for + Reports). +
+ Remove temporary Apache configuration changes + You modified the Apache configuration file + /etc/apache2/sites-available/eg.conf in an earlier step as a + temporary measure to expedite testing (see + for further information). + Those changes must now be reversed in order to deny unwanted access to your + CGI scripts from users on other public networks. + + + This temporary network update was done to expedite + testing. You must correct + this for a public production system. + + + As the root user, edit the configuration + file again and comment out the line Allow from all and uncomment the + line Allow from 10.0.0.0/8, then change it to match your network + address scheme. +
+
+ Configure a permanent SSL key + You used the command openssl in an earlier step to + temporarily create a new SSL key for the Apache server (see + for further + information). This self-signed security certificate was adequate during + testing and development, but will continue to generate warnings in the Staff + Client and browser. For a public production server you should configure or + purchase a signed SSL certificate. + There are several open source software solutions that provide schemes to + generate and maintain public key security certificates for your library + system. Some popular projects are listed below; please review them for + background information on why you need such a system and how you can provide + it: + + + http://www.openca.org/projects/openca/ + + + http://sourceforge.net/projects/ejbca/ + + + http://pki.fedoraproject.org + + + + + The temporary SSL key was only created to expedite + testing. You should install a proper SSL certificate for a public + production system. + + +
+
+ (OPTIONAL) IP-Redirection + By default, Evergreen is configured so searching the OPAC always starts in the + top-level (regional) library rather than in a second-level (branch) library. Instead, + you can use "IP-Redirection" to change the default OPAC search location to use the IP + address range assigned to the second-level library where the seach originates. You must + configure these IP ranges by creating the configuration file + /openils/conf/lib_ips.txt and modifying the Apache startup script + /etc/apache2/startup.pl. + First, copy the sample file + /home/opensrf/Evergreen-ILS-1.6.1.8/Open-ILS/examples/lib_ips.txt.example + to /openils/conf/lib_ips.txt. The example file contains the single + line: "MY-LIB 127.0.0.1 127.0.0.254". You must modify the file to use + the IP address ranges for your library system. Add new lines to represent the IP address + range for each branch library. Replace the values for MY-LIB with the + values for each branch library found in the table + actor.org_unit. + Finally, modify the Apache startup script + /etc/apache2/startup.pl by uncommenting two lines as shown, then + restarting the Apache server: + +# - e.g. LIB123 10.0.0.1 10.0.0.254 +use OpenILS::WWW::Redirect qw(/openils/conf/opensrf_core.xml); +OpenILS::WWW::Redirect->parse_ips_file('/openils/conf/lib_ips.txt'); +]]> +
+
+ (OPTIONAL) Set Up Support For Reports + Evergreen reports are extremely powerful but require some simple configuration. + See for information on starting and + stopping the Reporter daemon processes. +
+
+
+ Installing In Virtualized <systemitem class="osname">Linux</systemitem> Environments + This section describes the installation of Evergreen software in so-called + "virtualized" software environments running on the + Microsoft Windows operating system. + Evergreen software runs as a native application + on any of several well-known x86 (32-bit) and x86-64 (64-bit) + Linux distributions including + Ubuntu and + Debian, but will not run directly on + the Microsoft Windows operating system. + Instead, Evergreen executes within an encapsulated virtual + Linux "guest" installation, + which itself executes directly on Windows. + The Linux environment is fully emulated + and acts (within limits) just as if it were executing on a real standalone system. + This technique of emulating a Linux + environment on a Windows host is a practical + way to install and run an Evergreen system if it is not possible to dedicate a + physical machine solely as a Linux host, but + the architecture is not recommended for large scale systems. There are performance + limitations to running Evergreen in a virtualized environment, since the + virtualization application itself consumes memory and contributes to the CPU load on + the Windows host system. The emulated + Evergreen environment will execute more slowly than if it were a standalone system. + However, it is still a reasonable architecture for smaller experimental systems or as + a proof of concept. +
+ Installing Virtualization Software + As described above, Evergreen can be installed on top of an emulated + Linux environment which, in turn, + is installed on top of a software application such as + "VirtualBox" or "VMware" + executing on Windows. + This section contains step-by-step examples on installing popular virtualization + applications on a Windows host system. + Following this section are further descriptions of installing + Linux and Evergreen systems on top + of that virtualization software. +
+ Installing <application>"VirtualBox"</application> Virtualization Software + This section reviews installation of the + "VirtualBox" application on + WindowsXP Professional (SP3). + Download the latest version of the + VirtualBox from the official website: + + http://www.virtualbox.org/wiki/Downloads, + then run the executable file. Continue with the steps shown in the + next five figures until the software has been successfully + installed. The following example shows the installation of VirtualBox + version 3.8.2 . +
+ Starting the Windows installation of <application>VirtualBox</application> + + + + + +
+
+ Welcome to <application>VirtualBox</application> setup wizard + + + + + +
+
+ Accept the license agreement + + + + + +
+
+ Waiting for installation to complete + + + + + +
+
+ Installation is complete; start <application>VirtualBox</application> + + + + + +
+ At this point, VirtualBox has been + installed and started for the first time. Please continue with + + for further instructions on the next step: installing the + Linux / Evergreen distribution. +
+
+ Installing <application>"VMware"</application> Virtualization Software + For instructions on installing VMware, + visit the official website + http://www.vmware.com/. Then continue with + for + further instructions on the next step: installing the + Linux / Evergreen distribution. +
+
+
+ Installing <systemitem class="osname">Linux</systemitem> + / Evergreen on Virtualization Software + After the virtualization software is installed and running, there are + two ways to continue with installing + Linux and Evergreen software in the new + virtualized environment: + + + Manually install a + Linux guest system, + then manually install Evergreen on it (see + for + details) + + + Download and install a prebuilt software image. The following + example shows installation of a working Debian "Lenny" (5.0) + Linux / Evergreen 1.6.1.4 system + (see for + details) + + + We review each method in the following sections. +
+ Manually install <systemitem class="osname">Linux</systemitem> and Evergreen + Instead of installing a pre-built, pre-configured virtual image + of Linux containing the + Evergreen software, you could just install a bare virtual + Linux guest system, then install + Evergreen from scratch on that system. + We recommend this approach if you need to specially configure + either the Linux system or + Evergreen itself. This will require a detailed review of both + Linux and Evergreen + configuration details. You are essentially doing a normal Evergreen + installation on a Linux + system; it just happens that + Linux is running within a + virtualized environment on a Windows + system. See for + information on a normal Evergreen installation. +
+
+ Download and install a prebuilt software image + You can download a prebuilt software image that, when installed + on your virtualization software, emulates a + Linux guest system containing + a running Evergreen distribution. The image is essentially a snapshot + of a hard disk from a fully configured, functional + Linux system with Evergreen + already installed. It is even possible to install a software image + that is preloaded with useful data, e.g., Gutenberg records. + We recommend this approach if you wish to get Evergreen running + quickly with minimal attention to configuration. After adjusting only + a few configuration details you can have a working Evergreen system + that integrates smoothly with the rest of your network. See + for a list of + prebuilt software images that are currently available to download and + install. + Evergreen servers and staff clients must match. For example, if + you are running server version 1.4.0.1, you should use version 1.4.0.1 + of the staff client. + DISCLAIMER: The following virtual images have been contributed + by members of the Evergreen community for the purposes of testing, + evaluation, training, and development. + + + Linux / Evergreen Virtual Images + + + + + + + + Linux Version + Evergreen Version + Image + Comments + + + + + Debian "Lenny" (5.0) + 1.6.1.4 + + + download + + VirtualBox image (no preloaded data) + + + Debian "Lenny" (5.0) + 1.6.0.1 + + + download + + VirtualBox image (no preloaded data) + + + Ubuntu "Karmic Koala" (9.10) + 1.6.0.0 + + + download + + VirtualBox image (no preloaded data) + + + Ubuntu "Hardy Heron" (8.04) + 1.2.3.1 + + + download + + VirtualBox image (no preloaded data) + + + Debian Etch (4.0) + 1.2.2.3 + + + download + + VMware image (preloaded with 13,000 Gutenberg records) + + + Ubuntu "Gutsy Gibbon" (7.10) + 1.2.1.4 + + + download + + VMware image, contributed by + + the Hekman Library, Calvin College + + + Gentoo + 1.1.5 + + + download + + VMware image on Gentoo, courtesy of + Dan Scott, + Laurentian University + (file size is 1.1GB) + + + +
+ In the following example you will install a prebuilt Debian + "Lenny" (5.0) / Evergreen 1.6.1.4 system. We assume you have already + installed the VirtualBox application (see + for + details). Continue with the following steps; refer to the accompanying + figures for more information: + + + Download software + Download the prebuilt software image for Debian + "Lenny" (5.0) / Evergreen 1.6.1.4 contained in the + file Evergreen_1_6_1_4_Lenny.zip . + Create a temporary directory + C:\temp, then extract the contents + of the .ZIP file there. + + + Add new virtual disk + You must configure VirtualBox to recognized the new disk + image before you can create a new virtual machine to use it. + Start VirtualBox and select + FileVirtualBox Media ManagerAdd, + then choose the disk image Lenny_1614_disk1.vmdk + that you just extracted to the temporary directory. Review + , + and + + for details. + + + Start virtual machine wizard + Click New to start the "Virtual + Machine Wizard", then click Next to + create a new virtual machine (VM) + ). + + + Define new virtual machine + Define a name for the new virtual machine, set the operating + system type, then click Next (see + ). + + + Set memory size + Set the memory size (we chose a default value of 512Mb), + then click Next (see + ). + + + Attach virtual disk + Attach the virtual hard disk image by setting the radio boxes + Boot Hard Disk and Use existing hard + disk. Ensure that the proper disk name is selected. + Click Finish to finish the setup. Review + , + and + and + for details. + + + Start new virtual machine + Click Start to boot the new VM. + + + Manually start Evergreen + After the new virtual machine boots up for the first time, + you must manually start Evergreen. Start it as follows, starting + as the root user (see + for more + information): + + + su - # become the root user - enter "evergreen" for the password + su - opensrf # as the opensrf user + osrf_ctl.sh -l -a start_all # start all Evergreen services + exit # become the root user again + /etc/init.d/apache2 restart # restart the Apache server + + The following table lists the default accounts already set + up in the virtual machine: + + + Default Accounts + + + + + + + Account + Password + Type + + + + + root + evergreen + Linux account + + + + + evergreen + evergreen + Linux account + + + + + opensrf + evergreen + Linux account + + + + + evergreen + evergreen + Database account + + + + + admin + open-ils + Evergreen account + + + +
+ At this point you have a running + Linux / Evergreen system. If + you need to modify the Evergreen configuration in any way, review + + in the standard Evergreen installation instructions. +
+ + Start staff client + The virtual machine just installed has been configured + to include an optional graphical desktop environment. If you + configure the virtual machine for 1.0 GB RAM, you should be + able to run the desktop at the same time as Evergreen. To + start the desktop, log in as the + opensrf user and + enter the command startx. + The desktop in this virtual machine includes the web + browser IceWeasel (the + Debian version of + Firefox) and XULRunner 1.9. Once you + start the desktop and Evergreen, you can connect to Evergreen + using the built-in staff client with the following + commands: + + + # as the opensrf user + cd /home/opensrf/Evergreen-ILS-1.6.1.8/Open-ILS + xulrunner-1.9 xul/staff_client/build/application.ini + + Connect to + localhost using the + username and password + admin / + open-ils and begin populating the + data in your image. + + + (OPTIONAL) Modify network connections + This machine was configured with a NAT connection on the + first Ethernet adapter + (eth0). As the virtual machines + tend to map virtual devices to real MAC addresses on their host, + you might need to clear that mapping before making a connection. + As root, run: + + + # as the root user: + rm /etc/udev/rules.d/70-persistent-net.rules + reboot + + To create a network connection, as root run: + dhclient eth0 to set up a NAT + connection. + + + Add another host connection + To add another host connection, you must add a second + Ethernet adapter (eth1) network + configuration interface and configure it as a host-based + connection. After you add the second Ethernet adapter for the + host connection, to create the host network connection, as root + run: dhclient eth1. + To connect to your virtual machine from your host + machine, create the host connection and check the IP address + of device eth1 using the + ifconfig command: + /sbin/ifconfig eth1. The IP address + will be listed in the inet_addr stanza as something like: inet addr: 192.168.56.101. + + + Network connections for external staff clients + While you can use the IP address to access the OPAC, the + staff client needs a hostname to connect to Evergreen. For the + built-in staff client in the Linux graphical desktop, you can + just use "localhost". But for external staff + clients, if your network does not assign a real hostname to the + IP address for the virtual image, you may need to alter the + hosts file on your client workstations to provide an alias for + the IP address. + On Linux, the hosts file can be found in the file + /etc/hosts. On + Windows, the hosts file + can be found in + C:\WINDOWS\System32\drivers\etc\hosts. + + + External staff clients + You can connect a staff client to the virtual Evergreen system + by getting your host-based connection running (see + ). + Once you have a host-based connection, you can install and use the + Windows 1.6.1.8 staff + client available from + + http://evergreen-ils.org/downloads/evergreen-setup-rel_1_6_1_8.exe + to connect to the virtual Evergreen system from another + Windows machine. + +
+
+ Starting <application>VirtualBox</application> for the first time + + + + + +
+
+ Selecting the software image in Virtual Media Manager + + + + + +
+
+ New software image added to <application>VirtualBox</application> + + + + + +
+
+ Creating a new VM + + + + + +
+
+ Setting the VM name and OS type + + + + + +
+
+ Setting memory size + + + + + +
+
+ Setting up the Virtual Hard Disk + + + + + +
+
+ Finishing definition of new VM + + + + + +
+
+ Summary of the new VM + + + + + +
+
+
+
+
+
diff --git a/admin/sip.xml b/admin/sip.xml new file mode 100644 index 0000000000..b22021b461 --- /dev/null +++ b/admin/sip.xml @@ -0,0 +1,613 @@ + + + + SIP Server + + SIP, standing for Standard Interchange Protocol, was developed by the + 3Mcorporation to be a common protocol for data transfer between ILS' + (referred to in SIP as an ACS, or Automated Circulation System) + Automated Circulation System and a + third party device. Originally, the protocol was developed for + use with 3M SelfCheck (often abbreviated SC, not to be confused with Staff Client) systems, but has since expanded to other companies and devices. It is now common to find + SIP in use in several other vendors' SelfCheck systemsSelfCheck, as well as other non-SelfCheck devices. + Some examples include: + + Patron Authentication (computer access, subscription databases) + Automated Material Handling (AMH) Automated Material Handling (AMH)- The automated sorting of items, often to bins or + book carts, based on shelving location or other programmable criteria + + +
+ + Installing the <systemitem class="protocol">SIP</systemitem> Server + + This is a rough intro to installing the SIP server for Evergreen. + + Getting the code + Current SIP code lives at github: + cd /opt + git clone git://github.com/atz/SIPServer.git SIPServer + Or use the old style: + $ cd /opt + $ sudo cvs -d:pserver:anonymous@openncip.cvs.sourceforge.net:/cvsroot/openncip login + When prompted for the CVS password, just hit Enter (sudo password may be req'd) + $ sudo cvs -z3 -d:pserver:anonymous@openncip.cvs.sourceforge.net:/cvsroot/openncip co -P SIPServer + + + + Configuring the Server + + + Type the following commands from the command prompt:configuration filesoils_sip.xml + $ sudo su opensrf + $ cd /openils/conf + $ cp oils_sip.xml.example oils_sip.xml + + + Edit oils_sip.xmlconfiguration filesoils_sip.xml. + Change the commented out <server-params> section to this: + +<server-params +min_servers='1' +min_spare_servers='0' +max_servers='25' +/> + + + + max_servers will directly correspond to the number of allowed SIP clients. Set the number accordingly, but + bear in mind that too many connections can + exhaust memory. On a 4G RAM/4 CPU server (that is also running evergreen), it is not recommended to exceed 100 + SIP client connections. + + + + + Adding <systemitem class="protocol">SIP</systemitem> Users + + + Type the following commands from the command prompt:configuration filesoils_sip.xml + $ sudo su opensrf + $ cd /openils/conf + $ cp oils_sip.xml.example oils_sip.xml + + + in the <accounts> section, add SIP client login information. Make sure that all + <logins> use the same institution attribute, and make + sure the institution is listed in <institutions>. All attributes in the <login> section will be + used by the SIP client. + + + + In Evergreen, create a new profile group called SIP. + This group should be a sub-group of Users + (not Staff or Patrons). + Set Editing Permission as group_application.user.sip_client and give the group the following permissions: + + COPY_CHECKIN + COPY_CHECKOUT + RENEW_CIRC + VIEW_CIRCULATIONS + VIEW_COPY_CHECKOUT_HISTORY + VIEW_PERMIT_CHECKOUT + VIEW_USER + VIEW_USER_FINES_SUMMARY + VIEW_USER_TRANSACTIONS + + OR use SQL like: + + +INSERT INTO permission.grp_tree (id,name,parent,description,application_perm) +VALUES (8, 'SIP', 1, 'SIP2 Client Systems', 'group_application.user.sip_client'); + +INSERT INTO + permission.grp_perm_map (grp, perm, depth, grantable) +SELECT + g.id, p.id, 0, FALSE +FROM + permission.grp_tree g, + permission.perm_list p +WHERE + g.name = 'SIP' AND + p.code IN ( + 'COPY_CHECKIN', + 'COPY_CHECKOUT', + 'RENEW_CIRC', + 'VIEW_CIRCULATIONS', + 'VIEW_COPY_CHECKOUT_HISTORY', + 'VIEW_PERMIT_CHECKOUT', + 'VIEW_USER', + 'VIEW_USER_FINES_SUMMARY', + 'VIEW_USER_TRANSACTIONS' +); + + + + Verify: + + +SELECT * +FROM permission.grp_perm_map JOIN permission.perm_list ON +permission.grp_perm_map.perm=permission.perm_list.id +WHERE grp=8; + + + + Keep in mind that the id (8) may not necessarily be available on your system. + + + For each account created in the <login> section of oils_sip.xml, create a user (via the staff client user editor) + that has the same username + and password and put that user into the SIP group. + The expiration date will affect the SIP users' connection so you might want to make a note of + this somewhere. + + + + + Running the server + To start the SIP server type the following commands from the command prompt: + $ sudo su opensrf + $ oils_ctl.sh -d /openils/var/run -s /openils/conf/oils_sip.xml -a [start|stop|restart]_sip + + + Logging-SIPSIP + + <systemitem class="service">Syslog</systemitem> + It is useful to log SIP requests to a separate file especially during initial setup by modifying your + syslog config file.syslog + + + Edit syslog.conf. + $ sudo vi /etc/syslog.conf # maybe /etc/rsyslog.conf + + + Add this: + local6.* -/var/log/SIP_evergreen.log + + + Syslog expects the logfile to exist so create the file. + $ sudo touch /var/log/SIP_evergreen.log + + + Restart sysklogd. + $ sudo /etc/init.d/sysklogd restart + + + + + <systemitem class="service">Syslog-NG</systemitem> + + + + Edit logging config.syslog-NG + sudo vi /etc/syslog-ng/syslog-ng.conf + + + Add: + +# SIP2 for Evergreen +filter f_eg_sip { level(warn, err, crit) and facility(local6); }; +destination eg_sip { file("/var/log/SIP_evergreen.log"); }; +log { source(s_all); filter(f_eg_sip); destination(eg_sip); }; + + + + Syslog-ng expects the logfile to exist so create the file. + $ sudo touch /var/log/SIP_evergreen.log + + + Restart syslog-ng + $ sudo /etc/init.d/syslog-ng restart + + + + + + Testing Your <systemitem class="protocol">SIP</systemitem> ConnectionSIP + + + In the top level CVS checkout of the SIPServer code. + $ cd SIPServer/t + + + Edit SIPtest.pm, change the $instid, $server, $username, and + $password variables. This will be enough to test connectivity. + To run all tests, you'll need to change all the variables in the Configuration section. + $ PERL5LIB=../ perl 00sc_status.t + This should produce something like: + +1..4 +ok 1 - Invalid username +ok 2 - Invalid username +ok 3 - login +ok 4 - SC status + + + + Don't be dismayed at Invalid Username. That's just one of the many tests that are run. + + + + + More Testing + + + Once you have opened up either the SIP OR SIP2 ports to be + accessible from outside you can do some testing via telnet. You can try this with localhost + if you so wish, but we want to prove that SIP2 works from non-localhost. + Replace $instid, $server, $barcode, $username, + and $password variables below as necessary. + We are using 6001 here which is associated with SIP2 as per our configuration.telnet + +$ telnet $server 6001 +Connected to $server. +Escape character is '^]'. +9300CN**$username**|CO**$password**|CP**$instid** + + You should get back. + 941 + + + Now just copy in the following line (with variables replaced) you don't need to hit enter, just paste! + 2300120080623 172148AO**$instid**|AA**$barcode**|AC$password|AD**$password** + You will get back the patron information for $barcode (something similar to the what's below). +24 Y 00120100113 170738AEFirstName MiddleName LastName|AA**$barcode**|BLY|CQY +|BHUSD|BV0.00|AFOK|AO**$instid**| + + The response declares it is a valid patron BLY with a valid password CQY and shows the user's + $name. + + + +
+
+ + <systemitem class="protocol">SIP</systemitem> CommunicationSIP + + SIP generally communicates over a TCP connection (either raw sockets or over + telnet), but can also communicate via serial connections and other methods. In Evergreen, + the most common deployment is a RAW socket connection on port 6001. + SIP communication consists of strings of messages, each message request and response begin with a 2-digit + command - Requests usually being an odd + number and responses usually increased by 1 to be an even number. The combination numbers for the request command and response is often referred to as a + Message Pair (for example, a 23 command is a request for patron status, a 24 response is a patron status, and the message pair 23/24 is + patron status message pair). The table in the next section shows the message pairs and a description of them. + For clarification, the Request is from the device (selfcheck or otherwise) to the ILS/ACS. The response is… the response + to the request ;). + Within each request and response, a number of fields (either a fixed width or separated with a | [pipe symbol] and preceeded with a + 2-character field identifier) + are used. The fields vary between message pairs. + + + + + + + + + Pair + Name + Supported? + Details + + + + + 01 + Block Patron + Yes + 01_Block_Patron - ACS responds with 24 Patron Status Response + + + 09/10 + Checkin + Yes (with extensions) + 09/10_Checkin + + + 11/12 + Checkout + Yes (no renewals) + 11/12_Checkout + + + 15/16 + Hold + No + 15/16_Hold + + + 17/18 + Item Information + Yes (no extensions) + 17/18_Item_Information + + + 19/20 + Item Status Update + No + 19/20_Item_Status_Update - Returns Patron Enable response, but doesn't make any changes in EG + + + 23/24 + Patron Status + Yes + 23/24_Patron_Status - 63/64 Patron Information preferred + + + 25/26 + Patron Enable + No + 25/26_Patron_Enable - Used during system testing and validation + + + 29/30 + Renew + NO (maybe?) + 29/30_Renew + + + 35/36 + End Session + Yes + 35/36_End_Session + + + 37/38 + Fee Paid + No + 37/38_Fee_Paid + + + 63/64 + Patron Information + Yes (no extensions) + 63/64_Patron_Information + + + 65/66 + Renew All + No + 65/66_Renew_All + + + 93/94 + Login + Yes + 93/94_Login - Must be first command to Evergreen ACS (via socket) or SIP will terminate + + + 97/96 + Resend last message + Yes + 97/96_Resend + + + 99/98 + SC/ACS Status + Yes + 99/98_SC_and_ACS_Status + + + + + + 01 Block Patron + A selfcheck will issue a Block Patron command if a patron leaves their card in a selfcheck machine or if the selfcheck detects tampering (such as attempts + to disable multiple items during a single item checkout, multiple failed pin entries, etc).SelfCheck + In Evergreen, this command does the following: + + User alert message: CARD BLOCKED BY SELF-CHECK MACHINE (this is independent of the AL + Blocked Card Message field). + Card is marked inactive. + + The request looks like: + 01<card retained><date>[fields AO, AL, AA, AC] + Card Retained: A single character field of Y or N - tells the ACS whether the SC has + retained the card (ex: left in the machine) or not. + Date: An 18 character field for the date/time when the block occurred. + Format: YYYYMMDDZZZZHHMMSS (ZZZZ being zone - 4 blanks when local time, Z (3 blanks and a Z) represents UTC(GMT/Zulu) + Fields: See Fields for more details. + The response is a 24 Patron Status Response with the following: + + Charge privileges denied + Renewal privileges denied + Recall privileges denied (hard-coded in every 24 or 64 response) + hold privileges denied + Screen Message 1 (AF): blocked + Patron + + + + + 09/10 Checkin + The request looks like: + 09<No block (Offline)><xact date><return date>[Fields AP,AO,AB,AC,CH,BI] + No Block (Offline): A single character field of Y or N - Offline transactions are not currently + supported so send N. + xact date: an 18 character field for the date/time when the checkin occurred. Format: YYYYMMDDZZZZHHMMSS (ZZZZ being zone - + 4 blanks when local time, Z (3 blanks and a Z) represents UTC(GMT/Zulu) + Fields: See Fields for more details. + The response is a 10 Checkin Response with the following: + 10<resensitize><magnetic media><alert><xact date>[Fields AO,AB,AQ,AJ,CL,AA,CK,CH,CR,CS,CT,CV,CY,DA,AF,AG] + Example (with a remote hold): + 09N20100507 16593720100507 165937APCheckin Bin 5|AOBR1|AB1565921879|ACsip_01| + +101YNY20100623 165731AOBR1|AB1565921879|AQBR1|AJPerl 5 desktop reference|CK001|CSQA76.73.P33V76 1996 +|CTBR3|CY373827|DANicholas Richard Woodard|CV02| + + Here you can see a hold alert for patron CY 373827, named DA Nicholas Richard Woodard, + to be picked up at CT BR3. Since the transaction is happening + at AO BR1, the alert type CV is 02 for hold at remote library. + The possible values for CV are: + + 00: unknown + 01: local hold + 02: remote hold + 03: ILL transfer (not used by EG) + 04: transfer + 99: other + + + the logic for Evergreen to determine the content is magnetic_media comes from either legacy circ scripts or search_config_circ_modifier. + The default is non-magnetic.magnetic media + The same is true for media_type (default 001). Evergreen does not populate the collection_code because it does not really have any, but it will provide the + call_number where available. + Unlike the item_id (barcode), the title_id is actually a title string, unless the configuration forces the return of + the bib ID. + Don't be confused by the different branches that can show up in the same response line. + + AO is where the transaction took place, + AQ is the permanent location, and + CT is the destination location (i.e., pickup lib for a hold or target lib for a transfer). + + + + + 11/12 Checkout + + + 15/16 Hold + Not yet supported. + + + 17/18 Item Information + The request looks like: + 17<xact_date>[fields: AO,AB,AC] + The request is very terse. AC is optional. + The following response structure is for SIP2. (Version 1 of the protocol had only 6 total fields.) + +18<circulation_status><security_marker><fee_type><xact_date> +[fields: CF,AH,CJ,CM,AB,AJ,BG,BH,BV,CK,AQ,AP,CH,AF,AG,+CT,+CS] + + Example: + 1720060110 215612AOBR1|ABno_such_barcode| + 1801010120100609 162510ABno_such_barcode|AJ| + 1720060110 215612AOBR1|AB1565921879| +1810020120100623 171415AB1565921879|AJPerl 5 desktop reference|CK001|AQBR1|APBR1|BGBR1 +|CTBR3|CSQA76.73.P33V76 1996| + + The first case is with a bogus barcode. The latter shows an item with a circulation_status of 10 for in transit between libraries. + The known values of circulation_status are enumerated in the spec. + EXTENSIONS: The CT field for destination location and CS call number are used by + Automated Material Handling systems.Automated Material Handling (AMH) + + + 19/20 Item Status Update + + + 23/24 Patron Status + Example: + 2300120060101 084235AOUWOLS|AAbad_barcode|ACsip_01|ADbad_password| + 24YYYY 00120100507 013934AE|AAbad_barcode|BLN|AOUWOLS| + 2300120060101 084235AOCONS|AA999999|ACsip_01|ADbad_password| + 24 Y 00120100507 022318AEDoug Fiander|AA999999|BLY|CQN|BHUSD|BV0.00|AFOK|AOCONS| + 2300120060101 084235AOCONS|AA999999|ACsip_01|ADuserpassword|LY|CQN|BHUSD|BV0.00|AFOK|AOCONS| + 24 Y 00120100507 022803AEDoug Fiander|AA999999|BLY|CQY|BHUSD|BV0.00|AFOK|AOCONS| + + The BL field (SIP2, optional) is valid patron, so the + N value means + bad_barcode doesn't match a patron, the Y value means 999999 does. + The CQ field (SIP2, optional) is valid password, so the N + value means bad_password doesn't match 999999's password, the Y means userpassword + does. + + So if you were building the most basic SIP2 authentication client, you would check for + |CQY| in the response to know the user's barcode and password + are correct (|CQY| implies |BLY|, since you cannot check the password unless the barcode exists). However, in practice, + depending on the application, there are other factors to consider in authentication, like whether the user is blocked from checkout, owes excessive fines, reported their + card lost, etc. These limitations are reflected in the 14-character patron status string immediately following the 24 code. + See the field definitions in your copy of the spec. + + + 25/26 Patron Enable + Not yet supported. + + + 29/30 Renew + Evergreen ACS status message indicates renew is supported. + + + 35/36 End Session + 3520100505 115901AOBR1|AA999999| + 36Y20100507 161213AOCONS|AA999999|AFThank you!| + The Y/N code immediately after the 36 indicates success/failure. Failure is not particularly meaningful or + important in this context, and for evergreen it is hardcoded Y. + + + 37/38 Fee Paid + Not implemented. + + + 63/64 Patron Information + Attempting to retrieve patron info with a bad barcode: + 6300020060329 201700 AOBR1|AAbad_barcode| + 64YYYY 00020100623 141130000000000000000000000000AE|AAbad_barcode|BLN|AOBR1| + Attempting to retrieve patron info with a good barcode (but bad patron password): + 6300020060329 201700 AOBR1|AA999999|ADbadpwd| + +64 Y 00020100623 141130000000000000000000000000AA999999|AEDavid J. Fiander|BHUSD|BV0.00 +|BD2 Meadowvale Dr. St Thomas, ON Canada + +90210|BEdjfiander@somemail.com|BF(519) 555 1234|AQBR1|BLY|CQN|PB19640925|PCPatrons +|PIUnfiltered|AFOK|AOBR1| + + See 23/24 Patron Status for info on BL and CQ fields. + + + 65/66 Renew All + Not yet supported. + + + 93/94 Login + Example: + 9300CNsip_01|CObad_value|CPBR1| + [Connection closed by foreign host.] + ... + 9300CNsip_01|COsip_01|CPBR1| + 941 + 941 means successful terminal login. 940 or getting dropped means failure. + + + 97/96 Resend + + + 99/98 SC and ACS Status + 99<status code><max print width><protocol version> + All 3 fields are required: + + status code - 1 character: + + 0: SC is OK + 1: SC is out of paper + 2: SC shutting down + + max print width - 3 characters - the integer number of characters the client can print + protocol version - 4 characters - x.xx + + +98<on-line status><checkin ok><checkout ok><ACS renewal policy> +<status update ok><offline ok><timeout period> + + +<retries allowed><date/time sync><protocol version><institution id> +<library name><supported messages><terminal + + location><screen message><print line> + Example: + 9910302.00 + 98YYYYNN60000320100510 1717202.00AOCONS|BXYYYYYYYYYNYNNNYN| + The Supported Messages field BX appears only in SIP2, and specifies whether 16 different + SIP commands are supported by the ACS or not. + + + Fields + All fixed-length fields in a communication will appear before the first variable-length field. This allows for simple parsing. Variable-length fields are by + definition delimited, though there will not necessarily be an initial delimiter between the last fixed-length field and the first variable-length one. It would be + unnecessary, since you should know the exact position where that field begins already. + +
+
+ diff --git a/admin/staffclientinstallation.xml b/admin/staffclientinstallation.xml new file mode 100644 index 0000000000..fc3ad5b12f --- /dev/null +++ b/admin/staffclientinstallation.xml @@ -0,0 +1,1537 @@ + + + + Installation of Evergreen Staff Client Software + + This section describes installation of the Evergreen Staff Client software. + + +
+ Installing the Staff Client + + staff client + installing + +
+ Installing a Pre-Built Staff Client + A pre-built Staff Client is available for Windows, + Mac or Linux systems. Installing the Staff Client in + each of these environments is described in the following sections. +
+ Installing on <systemitem class="osname">Windows</systemitem> + + staff client + installing + Windows + + In this section we describe the process of installing the Staff Client on the + Microsoft Windows operating system. + Visit the downloads section of the Evergreen website at + http://www.evergreen-ils.org/downloads.php + and find the standard Microsoft Windows Installer + that contains the current version of the Staff Client. Download the Installer, then run + it. A screen that looks similar to this should appear: + + + Running the Staff Client installer + + + + + + Click 'Next' to continue through the guided install + process. The Install Wizard will ask you to agree to the end-user license, ask you where + to install the software, ask about where to place icons, and then will automatically + install the software on your workstation. + When you run the Staff Client for the first time, a screen similar to this should + appear: + + + Running the Staff Client for the first time + + + + + + First, add the name of your Evergreen server to the field + Hostname in the Server + section. For example, the PINES demo system is + http://demo.gapines.org. + After adding the server name, click 'Re-Test Server'. + Because this is the initial run of the Staff Client, you will see a warning in the + upper-right saying: Not yet configured for the specified + server. The first thing you must do to the Staff Client on every workstation + is to assign it a workstation name. This is covered in + . + Users must have the REGISTER_WORKSTATION permission and be assigned the appropriate working location(s) in order to + register a workstation. + To add working locations to a user’s account: + + + Retrieve the user through a patron search and select OtherUser Permission + Editor and select the boxes for the locations necessary. + Save the user record. + + Making modifications to Working Locations while changing permission settings does not work – when this + workflow is performed, permission changes will not be applied to the database. + + + + Alternately, from the Admin menu, select User Permission Editor and retrieve the user by + barcode. + Make changes to working locations as described above. + + +
+
+ Installing on <systemitem class="osname">Mac OS</systemitem> + + staff client + installing + Mac OS + + This section describes Mac OS + packages and related versions of XULrunner that can + be used to run the Staff Client in a Mac OS + environment. + + Evergreen Version 1.2.3.0 + + + A Mac OS package that + contains an early version of the Staff Client (version 1.2.3.0) for use + with XULrunner is available. You can find + current releases of XULrunner here: + + http://releases.mozilla.org/pub/mozilla.org/xulrunner/releases . + Download and install the latest version. You can find further information + about XULrunner here: + + https://developer.mozilla.org/en/xulrunner. + Note that later versions of XULrunner + (e.g., version 1.9.2.13) have replaced version 1.8.0.4, which has known + security holes and is not recommended for applications that deal with + public web content. + + + A Mac OS + Installation package for Staff Client version 1.2.3.0 is + available from Evergreen Indiana. Download and install it from + here: + + evergreen_osx_staff_client_1_2_3.zip . + + + + To upgrade to a more recent version of the Staff Client, you can + copy the build directory from a + working Windows installation of + the desired version of the Staff Client to your + Mac. + The required files may be located in a directory like this on the + Windows machine: + C:\Program Files\Evergreen Staff Client\build. + Copy these files to the Resources + folder within the Open-ILS package in your + Applications directory on the Mac, + overwriting files with the same names. + + Drag the application's icon to your toolbar for easier + access. + + When you run the Staff Client installer, a screen will appear that looks + similar to this: + + + Running the Staff Client installer for + Mac OS + + + + + + Click 'Continue', accept the license, then finish the + installation. The application will be located at the destination you selected + during installation. You will then be able to drag the application into your + toolbar for easier access. + + + Finishing the installation + + + + + + + + Running directly using <application>XULrunner</application> + + staff client + XULRunner + + You must install an appropriate version of XULrunner + to match the Evergreen version. See the following table for the recommended version of + XULrunner: + + + Evergreen / <application>XULrunner</application> Dependencies + + + + + + Evergreen Version + XULRunner Version + + + + + Evergreen 1.6.x.x + XULrunner 1.9.x.x + + + Evergreen 1.4.x.x + XULrunner 1.8.0.4 or XULrunner 1.8.0.3 + + + Evergreen 1.2.x.x + XULrunner 1.8.0.4 or XULrunner 1.8.0.3 + + + +
+ If you have issues removing previously installed + XULrunner versions see + + for further information. + The Staff Client data from the directory + ./staff_client/build must be placed + somewhere on the machine (e.g. + ~/Desktop/Evergreen_Staff_Client). + Remember to call XULrunner with the full path to the + binary, followed by the install command and the path to the client data: + + + /Library/Frameworks/XUL.framework/xulrunner-bin --install-app ~/Desktop/Evergreen_Staff_Client + + The command should exit quietly and will create the folder + /Applications/OpenILS, + containing a launcher named open_ils_staff_client. +
+ + (OPTIONAL) Removing previously installed XULRunner versions + + XULRunner + removing previous versions + + If you already have a newer version of + XULrunner installed, per the release notes, + you will need to remove the entire directory + /Library/Frameworks/XUL.framework + before downgrading. + In addition, you may also need to remove the previous file + /Library/Receipts/xulrunner-ver-mak.pkg . + If file /Library/Receipts/xulrunner-ver-mak.pkg does + not exist (possibly in newer Mac OS + releases), you need to flush the file receiptdb. + If you install a newer version of XULrunner + over a previous (older) install, the older install is not removed but the + symlinks are changed to the newer one. + + + (OPTIONAL) Flush Receiptdb file: + First, get the package identifier, then purge/forget the build that was + initially installed: + + + sudo pkgutil --pkgs > /tmp/pkgs.txt + sudo pkgutil --forget org.mozilla.xulrunner + + It may not be necessary to edit the file + /Library/Receipts/InstallHistory.plist after deleting the + folder XUL.framework. See + + http://lists.apple.com/archives/Installer-dev/2009/Jul/msg00008.html + for more information. + + + Creating an APP file: Staff Client and <application>XULrunner</application> Bundled + An APP file is basically a folder. Start with a folder stucture like this: + + + Evergreen.app + __Contents + ____Frameworks + ____Resources + ____MacOS + + Create an APP folder structure with the following commands: + + + mkdir -p Evergreen.app/Contents/Frameworks + mkdir -p Evergreen.app/Contents/Resources + mkdir -p Evergreen.app/Contents/MacOS + + + + Create a new file in the folder + Evergreen.app/Contents/Info.plist + containing the following data (adjust for your version of + Evergreen): + + + + + CFBundleExecutable + xulrunner + CFBundleGetInfoString + OpenILS open_ils_staff_client rel_1_6_1_6 + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Evergreen Staff Client + CFBundlePackageType + APPL + CFBundleShortVersionString + rel_1_6_1_6 + CFBundleVersion + rel_1_6_1_6.rel_1_6_1_6 + NSAppleScriptEnabled + + CFBundleTypeIconFile + Evergreen.icns + + +]]> + + Download and install an appropriate + Mac OS package of + XULrunner from the Mozilla website + + https://developer.mozilla.org/en/xulrunner (see + for recommendations). + + Make a copy of the folder + /Library/Frameworks/XUL.Framework + inside your APP file. It should look something like this: + + + Evergreen.app/ + __Contents/ + ____Frameworks/ + ______XUL.Framework/ + ______Versions/ + ________Current -> 1.9.1.3 (symlink) + ________1.9.1.3/ + ______XUL -> Versions/Current/XUL + ______libxpcom.dylib -> Versions/Current/libxpcom.dylib + ______xulrunner-bin -> Versions/Current/xulrunner-bin + + + Copy + XUL.Framework/Versions/Current/xulrunner into the + folder Evergreen.app/MacOS + (do not symlink; copy the file). + + Make Evergreen.app/Resources the root + of your Evergreen application files like this: + + + Evergreen.app/ + __Contents/ + ____Resources/ + ______BUILD_ID + ______application.ini + ______chrome/ + ______components/ + ______etc. + + + Put a Mac + format icon file named Evergreen.icns in + Resources. + + +
+
+ Installing on Linux + + Quick Upgrade of the Staff Client + A Linux Staff Client is automatically built on the server as part of the + normal make install process for Evergreen server-side + software. To upgrade the Staff Client on a remote Linux workstation with a new + version, just copy the directory tree containing the Staff Client from your + server to the remote workstation. + Execute the following commands, replacing USER, + WORKSTATION, and SOME_PATH with + appropriate values: + + + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + scp -r ./build USER@WORKSTATION:/SOME_PATH/ + + You should test the newly copied Staff Client on the remote workstation. + Log into the workstation and execute the following command: + + + xulrunner /SOME_PATH/build/application.ini + + + + Building the Staff Client on the Server + + staff client + building on the server + + A Linux Staff Client is automatically built on the server as part of the + normal make install process for Evergreen server-side + software. See for details of + the build process. + In order to install a compatible Staff Client on another Linux system, you + can copy the appropriate files from the Staff Client build directory on your + server to the new Linux system. You could manually build the Staff Client on the + new system, but you must ensure that the BUILD_ID you chose on + the server matches the BUILD_ID for each Staff Client you use on + other systems. + If you wish to use a pre-packaged Windows + version on some systems, you may want to choose the BUILD_ID on + both server and other versions to match that of the + Windows Staff Client. To determine which + BUILD_ID was used for existing Staff Client installations, + execute each Staff Client and click the 'About this Client' + button. + If you are allowed to make changes on the Evergreen server, another option + is to create a symbolic link. In order for a copy of the Staff Client and server + to work together, the BUILD_ID must match the name of the + directory containing the server components of the Staff Client, or the name of a + symbolic link to that directory. As the + root user, make the changes as follows: + + + # as the root user: + cd /openils/var/web/xul + ln -s SERVER_BUILD_ID/ CLIENT_BUILD_ID + + + + Building the Staff Client on a Client Machine + This section is directed toward end-users who wish to use Linux rather than + Windows for client machines, but have limited + Linux experience. You can build the Staff Client on a Linux system without installing the + Evergreen Server component. This is a relatively simple process compared to server + installation, but does require some command-line work. The following instructions are + for building Staff Client version 1.2.1.4 on + Kubuntu 7.10; modify them as needed for + other distributions (the instructions should work as-is for + Ubuntu or + Ubuntu derivatives). + + + Prerequisites + Both subversion and + XULrunner are required to build the Staff + Client. As the root user, + use apt-get to install packages for + subversion and + XULrunner. You can also use + synaptic, the graphical user interface for + apt-get. For subversion, + select the latest version; for XULrunner, + select version 1.8.1.4-2ubuntu5. + + + # as the root user: + sudo apt-get install subversion + sudo apt-get install xulrunner + + + + Download the Source Code + + + Determine which version is needed + For most end-users, a specific version is required + to communicate properly with the Evergreen server. Check + with your system administrator, IT person, or HelpDesk to + determine which Staff Client versions are + supported. + Next, you need to determine which + tag to use when downloading the + source code. Tags are markers in the source code to create + a snapshot of the code as it existed at a certain time; + tags usually point to tested and stable code, or at least + a community-recognized release version. + To determine which tag to use, browse to + + http://svn.open-ils.org/trac/ILS/browser. + Look in the Visit drop-down box; see + the list of Branches and, further + down, a list of Tags. You may have + to do some guesswork, but it is fairly straightforward to + determine which tag to use. If the server is version + 1.6.1.6, you will want to use the tag that looks most + appropriate. For example, as you look through the tag + list, notice the tag named 'rel_1_6_1_6'. This is the tag + you need; make a note of it for the next step. + + + Download the Code + As the + opensrf + user, open a terminal (command-line prompt) and navigate + to the directory in which you wish to download the Staff + Client. Use the following commands to download the proper + version of the source code by tag name: + + + # as the opensrf user: + cd /DOWNLOAD/DIRECTORY + svn co rel_1_6_1_6/ + + Remember to change "rel_1_6_1_6" to the appropriate + tag for your installation. + + + + + Build the Staff Client + In the following example, navigate to the directory in + which the source code was downloaded, then navigate to the + proper subdirectory and run the "make" utility to actually build + the Staff Client. Remember to check with your system + administrator about which Staff Client BUILD_ID + to use. The server checks the Staff Client + BUILD_ID against itself to determine whether or + not a connecting client is supported. For instance, for the + PINES installation (version 1.6.1.6) the supported + BUILD_ID is "rel_1_6_1_6". Modify the following + commands accordingly. + As the opensrf + user, run the following commands to build the Staff Client: + + + # as the opensrf user: + wget http://evergreen-ils.org/downloads/Evergreen-ILS-1.6.1.6.tar.gz + tar xfz Evergreen-ILS-1.6.1.6.tar.gz + cd /home/opensrf/Evergreen-ILS-1.6.1.6 + ./configure --prefix=/openils --sysconfdir=/openils/conf + cd ./Open-ILS/xul/staff_client/ + make STAFF_CLIENT_BUILD_ID='rel_1_6_1_6' install + + + + Run the Staff Client + As the opensrf + user, navigate to the build/ + subdirectory and run the following command: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client/build + xulrunner application.ini + + + + (OPTIONAL) Clean Up / Create Shortcuts + The source code download included many files that are + needed to build the Staff Client but are not necessary to run + it. You may wish to remove them to save space, or to create a + clean staging directory containing the + finished Staff Client that can then be copied to other + machines. To do this, execute the following commands (remember + to replace DOWNLOAD_DIRECTORY and + STAGING_DIRECTORY with the appropriate + paths): + + + # as the opensrf user: + mkdir ~/STAGING_DIRECTORY + cd ~/DOWNLOAD_DIRECTORY/Open-ILS/xul/ + cp -r staff_client ~/STAGING_DIRECTORY + + Test the Staff Client to verify that all necessary files + were copied to the staging directory: + + + # as the opensrf user: + cd ~/STAGING_DIRECTORY/staff_client/build + xulrunner application.ini + + If there were no problems, then finish the cleanup by + removing the original download directory as shown: + + + # as the opensrf user: + rm -r -f ~/DOWNLOAD_DIRECTORY + + Finally, the command: + + + # as the opensrf user: + xulrunner ~/STAGING_DIRECTORY/staff_client/build/application.ini + + will now run the Staff Client. You may wish to create a + shortcut for the Staff Client. To do so, use the previous + command as the target for the shortcut: + + Desktop + StartMenu + K-Menu + + + + + + Using Wine to Install on Linux + + staff client + using wine to install on Linux + + The Linux application Wine is another + alternative if you wish to install the packaged + Windows versions rather than manually + building the Staff Client. Wine is a Linux + application that allows users to directly run + Windows executables, and is a simple + way for casual Linux users to use the Staff Client. You can find more information + about Wine at + + http://www.winehq.org/site/docs/wineusr-guide/getting-wine. + As the root user, use + apt-get to install the package for Wine. + You can also use synaptic, the graphical user interface. + + + Install wine: + + + # as the root user: + sudo apt-get install wine + + + + Visit the downloads section of the Evergreen website at + + http://www.evergreen-ils.org/downloads.php and find the + Microsoft Windows Installer + that contains the desired version of the Staff Client. Download + the installer and place it in a temporary directory. + + + As the opensrf + user, navigate to the temporary directory where you downloaded + the Windows installer + file, then execute it with the wine + application (remember to replace VERSION with + the release number of the Staff Client you downloaded): + + + # as the opensrf user: + cd /TEMP_DIRECTORY + wine evergreen-setup-rel_VERSION.exe + + If this step fails, you may need to configure + Wine first to properly emulate + Windows XP. To do so, + type winecfg from the command line; in the + Applications tab of the window that pops up, + select Default Settings and choose + Windows XP from the drop-down menu, then + click 'Apply'. + + + Launch the Staff Client + A new entry for the Staff Client should now appear + somewhere in the All Applications menu of + your Linux desktop. You may also find a new desktop shortcut for + the Staff Client. To launch the Staff Client, visit the + All Applications menu on your desktop and + find the section similar to: + + + Wine + Program Files + Evergreen Staff Client + Evergreen Staff Client + , + + or else launch the Staff Client from the new desktop shortcut. + + + +
+
+
+ Building the Staff Client + + staff client + building + + You can also manually build the Staff Client by using the make + utility in the Staff Client source directory (e.g., the directory + /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + for the current Evergreen version). There are a number of possible options to manually + build special versions of the Staff Client on a Linux system. Following is a list of + variables that you can pass to make to influence the manual build + process: + + + Build Variable <envar>STAFF_CLIENT_BUILD_ID</envar> + During the normal make install Evergreen server-side + software build process, the variable defaults to an automatically generated + date/time string, but you can also override the value of BUILD_ID. + You could use the following commands during the normal install process: + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6 + make STAFF_CLIENT_BUILD_ID=1_6_1_6 install + + You can also manually build the Staff Client in the Staff Client + source directory with a different BUILD_ID. + As the opensrf user, + execute the following commands to build the Staff Client (remember to replace + NEW_VERSION with an appropriate value): + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make STAFF_CLIENT_BUILD_ID=NEW_VERSION build + + + + + Build Variable <envar>STAFF_CLIENT_VERSION</envar> + During the normal make install Evergreen server-side + software build process, the variable is pulled automatically from a README file + in the Evergreen source root. The variable defaults to + 0trunk.revision, where the value of "revision" is + automatically generated. You can override the value of VERSION + similarly to the BUILD_ID. + You could use the following commands during the normal install process: + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6 + make STAFF_CLIENT_VERSION=0mytest.200 install + + You can also manually build the Staff Client in the Staff Client + source directory with a different VERSION. + If you plan to make extensions update automatically, the + VERSION needs to conform to the format recommended in + + Toolkit Version Format and newer versions need to be "higher" than older + versions. + As the opensrf user, + execute the following commands to build the Staff Client: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make STAFF_CLIENT_VERSION=0mytest.200 build + + + + + Build Variable <envar>STAFF_CLIENT_STAMP_ID</envar> + During the normal make install Evergreen + server-side software build process, the variable is generated from + STAFF_CLIENT_VERSION. You may want to have multiple versions + of the Staff Client with different stamps, possibly for different uses or + client-side customizations. You can override the value of + STAMP_ID similarly to the BUILD_ID. + You could use the following commands during the normal install process: + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6 + make STAFF_CLIENT_STAMP_ID=my_test_stamp install + + You can also manually build the Staff Client in the Staff Client + source directory with a different STAMP_ID. + As the opensrf user, + execute the following commands to build the Staff Client: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make STAFF_CLIENT_STAMP_ID=my_test_stamp build + + +
+
+ Advanced Build Options + + staff client + building + advanced build options + + In addition to the basic options listed above, there are a number of advanced + options for building the Staff Client. Most are target names for the + make utility and require that you build the Staff Client from the + staff_client directory. See the following table for a list of + possible make target keywords: + + Keywords For Advanced Build Options + + + + + + + Keyword + Description + + + + + clients + Runs "make win-client", "make linux-client", and "make + generic-client" individually + + + client_dir + Builds a client directory from the build directory, without + doing a rebuild. The same as "copy everything but + server/". + + + client_app + Prerequisite "client_dir"; removes "install.rdf" from + client directory so an APP bundle can't be installed as an + extension + + + client_ext + Prerequisite "client_dir"; remove "application.ini", + "autoupdate.js", "standalone_xul_app.js" from client directory so + an extension won't break Firefox + + + extension + Prerequisite "client_ext"; rewritten to use "client_ext" + + + generic-client + Prerequisite "client_app"; makes an XPI file suitable for + use with "xulrunner --install-app"" + + + win-xulrunner + Prerequisite "client_app"; adds Windows xulrunner to client build + + + linux-xulrunner + Prerequisite "client_app"; adds Linux xulrunner to client build + + + win-client + Prerequisite "win-xulrunner"; builds "setup exe" (requires + that "nsis" package be installed, will add options for automatic + update if configured and developer options if client build was a + "make devbuild") + + + linux-client + Prerequisite "linux_xulrunner"; builds a "tar.bz2" bundle + of the Linux client + + + [generic-|win-|linux-|extension-]updates[-client] + Calls external/make_updates.sh to build full and partial + updates generic/win/linux/extension prefix limit to that + distribution; Adding builds clients and + copies them to a subdirectory of the + updates directory as well; + doesn't exist. + + + +
+ Following are descriptions of other special build options: + + Developer Build + You can create a so-called developer build + of the Staff Client by substituting for + when running make from the + staff_client directory. The build will contain an + extra configuration file that enables some developer options. + As the opensrf user, run + the following commands from the Staff Client source directory: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make devbuild + + + + Compressed Javascript + You can execute the Google Closure Compiler + utility to automatically review and compress Javascript code after the build + process completes, by substituting for + when running make. + For more information on the Google Closure Compiler, see + + http://code.google.com/closure/compiler. + As the opensrf user, run + the following commands from the Staff Client source directory: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make compress-javascript + + You can also combine Javascript review and compression, and also perform a + developer build. + As the opensrf user, run + the following make command from the Staff Client source directory + (the order of options is important): + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make devbuild compress-javascript + + + + Automatic Update Host + You can override the host used to check for automatic Staff Client updates + by specifying the option. + You could use the following commands during the normal install process: + + + # as the root user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6 + make AUTOUPDATE_HOST=localhost install + + You can manually build the Staff Client in the Staff Client + source directory and set to enable automatic + update checking. + As the opensrf user, + execute the following commands to build the Staff Client: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make AUTOUPDATE_HOST=localhost build + + For more information on Automatic Updates, see + . + +
+
+ Installing and Activating a Manually Built Staff Client + The Staff Client is automatically built, installed and activated as part of the + normal make process for Evergreen + server-side software. However, if you manually build the Staff Client from the + staff_client directory, then you need to take additional steps to + properly install and activate it. You also have the option of installing the Staff + Client on the same machine it was built on, or on a different machine. + Assuming you have already built the Staff Client, and that your installation is + in the directory /openils/var/web/xul, as the + opensrf user execute the following + commands: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + mkdir -p "/openils/var/web/xul/$(cat build/BUILD_ID)" + cp -R build/server "/openils/var/web/xul/$(cat build/BUILD_ID)" + +
+
+ Packaging the Staff Client + Once you have built the Staff Client, you can create several forms of special client + packages by using a modified make command in the staff_client + directory. + + Packaging a Generic Client + This build creates a Staff Client packaged as an XPI file suitable for use with + the parameter of XULrunner. + It requires that you already have the zip utility + installed on your system. + As the opensrf user, execute + the following commands: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make generic-client + + The output file evergreen_staff_client.xpi will be created. + + + Packaging a <systemitem class="osname">Windows</systemitem> Client + This build creates a Staff Client packaged as a + Windows executable. It requires that + you already have the unzip utility installed on + your system. It also requires that you install + NSIS (Nullsoft Scriptable Install System), + a professional open source utility package used to create + Windows installers (the + "makensis" utility is installed as part of the + "nsis" package). You should use Version 2.45 or + later. + If you wish for the Staff Client to have a link icon/tray icon by + default, you may wish to provide a pre-modified + xulrunner-stub.exe. Place it in the Staff Client + source directory and make will automatically use it instead + of the one that comes with the downloaded XULrunner + release. The version of xulrunner-stub.exe need not + match exactly. + You can also use a tool such as + Resource Hacker + to embed icons. Resource Hacker is an open-source + utility used to modify resources within 32-bit + Windows executables. + Some useful icon ID strings include the following: + + + Icon IDs for Packaging a Windows Client + + + + + + IDI_APPICON + Tray icon + + + 32512 + Default window icon + + + +
+ As the opensrf user + execute the following commands: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make win-client + + The output file evergreen_staff_client_setup.exe will be created. +
+ + Packaging a Linux Client + This build creates a Staff Client packaged as a compressed + tar archive file with XULrunner + already bundled with it. It requires that you already have the + bzip2 utility installed on your system. + As the opensrf user, + execute the following commands: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make linux-client + + The output file evergreen_staff_client.tar.bz2 will be created. + + + Packaging a <application>Firefox</application> Extension + This build creates a Staff Client packaged as a Firefox + extension. It requires that you already have the zip + utility installed on your system. + As the opensrf user, + execute the following commands: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make extension + + The output file evergreen.xpi will be created. + +
+
+ Staff Client Automatic Updates + + staff client + automatic updates + + It is possible to set up support for automatic Staff Client updates, either during + the normal Evergreen server-side build process, or by manually building the Staff Client + with certain special options. + + Automatic update server certificate requirements are more strict than + normal server requirements. Firefox and + XULrunner will both ignore any automatic update + server that is not validated by a trusted certificate authority. Servers with + exceptions added to force the Staff Client to accept them WILL NOT + WORK. + In addition, automatic updates have special requirements for the file + update.rdf: + + It must be served from an SSL server, or + It must be signed with the + https://developer.mozilla.org/en/McCoy tool. + + You can pre-install the signing key into the file + install.rdf directly, or install it into a copy as + install.mccoy.rdf. If the latter exists it will be copied + into the build instead of the original file + install.rdf. + + + Autoupdate Host + You can manually set the name of the automatic update host. If you do + not set the name then, by default, the Staff Client will not include an + automatic update preference. You can set the autoupdate host name as + follows: + + + At configuration time during the normal make install + process for Evergreen server-side software. + You can do this when you first configure the Evergreen server-side + software (see ). + As the opensrf user, execute + the following commands: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6 + ./configure --prefix=/openils --sysconfdir=/openils/conf --with-updateshost=hostname + make + + + + During a manual Staff Client build process. + You can override the variable + AUTOUPDATE_HOST=hostname and manually build the + Staff Client from the staff_client + directory (see + for details). If you specify only a bare hostname (for example, + example.com) then + the Staff Client will automatically use the secure URL + https://example.com. + If you wish to use a non-https URL, then you must explicitly + specify the full URL (for example, + http://example.com). + As the opensrf user, + execute the following commands to build the Staff Client (remember to + replace SOME_URL with an appropriate value): + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make AUTOUPDATE_HOST=http://SOME_URL build + + + + + + Building Updates + + staff client + automatic updates + building + + Similar to building clients, you can use the targets + , , + , and + individually with make to build the update files for the + Staff Client. To build all the targets at once, simply use the target + . + A full update will be built for each specified target (or for all if you + use the target ). For all but extensions any previous + full updates (archived by default in the directory + /openils/var/updates/archives) will be + used to make partial updates. Partial updates tend to be much smaller and will + thus download more quickly, but if something goes wrong with a partial update + the full update will be used as a fallback. Extensions do not currently support + partial updates. + As the opensrf user, change + directory to the Staff Client source directory, then execute the following + commands: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + + Command to build all updates at once: + + + # as the opensrf user: + make updates + + commands to build updates individually: + + + # as the opensrf user: + make generic-updates + make win-updates + make linux-updates + make extension-updates + + + + Building updates with clients + + staff client + automatic updates + building with clients + + To save time and effort you can build updates and manual download + clients at the same time by adding the phrase "-client" to each + target name (for example, you could specify to build + all the targets at once, or you could specify + to build updates individually). This process will not work for the option + . + The clients will be installed alongside the updates and listed on the + manualupdate.html page, instead of being left in the + staff_client directory. + As the opensrf user, execute + one of the following commands: + To build all updates at once: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make updates-client + + To build updates individually: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make generic-updates-client + make win-updates-client + make linux-updates-client + + + + Activating the Update Server + + staff client + automatic updates + activating the update server + + This section reviews scripts associated with the update server, and + requires some final adjustments to file permissions. + The Apache example configuration creates an updates + directory that, by default, points to the directory + /openils/var/updates/pub. This + directory contains one HTML file and several specially-named script files. + The updatedetails.html file is the fallback web + page for the update details. The check script is used for + XULrunner updates. The + update.rdf script is used for extension updates. + The manualupdate.html file checks for clients to provide + download links when automatic updates have failed and uses the download script + to force a download of the generic client XPI (compared to + Firefox trying to install it as an + extension). + To change the permissions for the scripts + check, download, + manualupdate.html, and + update.rdf, as the root user execute the following + commands: + + + # as the root user: + cd /openils/var/updates/pub + chmod +x check download manualupdate.html update.rdf + + +
+
+ Other tips + + Multiple workstations on one install + Multiple workstation registrations for the same server can be accomplished + with a single Staff Client install by using multiple profiles. When running + XULrunner you can specify the option + "-profilemanager" or "-P" (uppercase "P") + to force the Profile Manager to start. Unchecking the "Don't ask at startup" + option will make this the default. + Once you have opened the Profile Manager you can create additional + profiles, one for each workstation you wish to register. You may need to install + SSL exceptions for each profile. + When building any of the targets , + , or , you can + specify to add an option + "Evergreen Staff Client Profile Manager" to the + start menu. + As the opensrf user, + execute the following commands: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client + make NSIS_EXTRAOPTS=-DPROFILES win-client + + + + Multiple Staff Clients + It may be confusing if you are not careful, but you can log in to + multiple Evergreen servers at the same time, or a single Evergreen server + multiple times. In either case you will need to create an additional profile for + each additional server or workstation you want to log in as (see the previous + tip in ). + Once you have created the profiles, run + XULrunner with the option + (in addition to or if + needed). Instead of XULrunner opening a new login + window on your existing session it will start a new session instead, which can + then be logged in to a different server or workstation ID. + +
+
+
+ Running the Staff Client + + staff client + running + linux + + You can run the Staff Client on a Linux system by using the + XULrunner application (installed automatically and by default + with Firefox Version 3.0 and later on + Ubuntu and + Debian distributions). + For example, if the source files for the Evergreen installation are in the directory + /home/opensrf/Evergreen-ILS-1.6.1.6/ you can start the + Staff Client as shown in the following example: + + + # as the opensrf user: + cd /home/opensrf/Evergreen-ILS-1.6.1.6/Open-ILS/xul/staff_client/build + xulrunner application.ini + +
+ Assigning Workstation Names + + staff client + assigning workstation names + + The Staff Client must be assigned to a library and given a unique name before it + will connect fully to the Evergreen server. The only restriction is that the workstation's + name must be unique within the assigned library. Make sure to select a workstation name + that you will remember later, one that reflects the role, purpose, and/or location of a + particular computer. These names will come up later in statistical reporting, and can also + be handy when troubleshooting. + + + Example of unconfigured Staff Client + + + + + + In order to assign a workstation a name, a user with appropriate + permissions must login to the Staff Client. In PINES, the local system + administrator (OPSM) has the ability to assign workstation names in their + library system. Library managers (LIBM's) have the ability within their + branch. To assign a workstation a name, login to the system. You will be + prompted to assign the workstation a library and a name: + + + Example of configured Staff Client + + + + + + Select the library this workstation physically operates in from the drop + down menu. In this example, we have selected "MGRL-MA". Type in a friendly name + for the workstation. In this example, we are installing the Staff Client on the + director's personal system, and have named it as such. Then click + 'Register'. + Once you have registered your workstation + with the server, your screen will look like this: + + + Example of registered Staff Client + + + + + + You are now ready to log into the Staff Client for the first time. Type in + your password again, and click 'Login'. +
+
+ Running the Staff Client Over An <systemitem class="protocal">SSH</systemitem> Tunnel + + staff client + running through an SSH tunnel + + You can configure the Staff Client to communicate with the Evergreen server over + an SSH tunnel using a SOCKS 5 proxy + server. There are several reasons for sending network traffic for the Staff Client + through an SSH proxy: + + + Firewalls may prevent you from reaching the Evergreen + server. This may happen when you are connecting the Staff + Client to a test server that should not be available + generally, or it may be the result of network design + priorities other than ease of use. + + + You may wish to improve security in situations where + Staff Client traffic may be susceptible to network + eavesdropping. This is especially true when staff machines + connect via wireless links to the network. + + +
+ Setting Up an <systemitem class="protocal">SSH</systemitem> Tunnel + You will need a server that allows you to log in via + SSH and has network access to the + Evergreen server you want to reach. You will use your username and password + for that SSH server to set up a + tunnel. + For Windows users, one good + solution is the open-source utility + PuTTY, + a free telnet/SSH client. + Following are instructions for setting up an SSH + session using the PuTTY utility: + + + Setting up an SSH + tunnel in PuTTY + + + + + + + + Using the menu on the left, find the section: + + + Connection + SSH + Tunnels + + + + + In the section on the right labeled "Source + port", enter 9999. + + + Set the checkbox "Dynamic". Do not + enter anything in the "Destination" text + entry box. + + + Click 'Add' and notice that + "D9999" now appears in the section + labeled "Forwarded ports". + + + Use the menu on the left, find the + "Session" section, then enter the host name + of the SSH + server. + + + A pop-up window will open to allow you to enter your + username and password. Once you are logged in, the tunnel is + open. + + + See How to set up + SSH (for the beginner) for information on + setting up SSH for other client operating + systems. +
+
+ Configuring the Staff Client to Use the <systemitem class="protocal">SSH</systemitem> Tunnel + In order to tell the Staff Client that all traffic should be sent + through the SSH tunnel just configured, + you must find edit the file all.js, usually located at + C:\Program Files\Evergreen Staff Client\greprefs\all.js + on a Windows system. + Search this file for the word socks to find the appropriate + section for the following changes. + + + The SOCKS section of "all.js" before changes + + + + + + Make the following changes: + + + Change the value of network.proxy.socks + from "" to localhost. + + + Change the value of network.proxy.socks_port + from 0 to 9999. + + + + + The SOCKS section of "all.js" after changes + + + + + + If everything is working correctly, you should now be able to run + the Staff Client and all its data will be sent encrypted through the + SSH tunnel you have just configured. +
+
+
+ Navigating a Tabbed Interface + Like many popular current web browsers and other applications, the Staff Client + uses a "tabbed" interface. Tabs allow you to have several pages open at the same time + in a single window. This is easier to manage on your computer screen than multiple + windows, since you can easily switch between tabs in the same window. + + + Tabs in the Staff Client window + + + + + + The "tabs" appear below the menu bar in the Staff Client with a descriptive + title. Simply select a tab to bring it to the front and view the page displayed in the + tab. You can use tabs to have access to multiple things all at the same time: patron + records and searches, bibliographic records and searches, circulation or cataloging + interfaces - anything at all in the Staff Client. + + Create a new tab by pressing + + Ctrl + T + + on the keyboard or selecting: + + File + New Tab + + from the menu. + Close a tab by pressing + + Ctrl + W + on the keyboard or selecting + + File + Close Tab + + from the menu. + Switch tabs by pressing + + Ctrl + Tab + + on the keyboard or selecting the tab in the tab bar. + +
+
+
diff --git a/admin/troubleshooting.xml b/admin/troubleshooting.xml new file mode 100644 index 0000000000..8ab2fe1e67 --- /dev/null +++ b/admin/troubleshooting.xml @@ -0,0 +1,305 @@ + + + Troubleshooting System Errors + If you have Evergreen installed and are encountering systematic errors, here is the steps to find the + cause and solution to most problems. These instructions assume standard locations and file names for Evergreen + installations, and may also include commands for specific Linux distributions. + + Systematic Evergreen Restart to Isolate Errors + + Stop Apache:web serverApachestopping + /etc/init.d/apache2 stop + or + apache2ctl stop + + + Stop OpenSRF:OpenSRF + osrf_ctl.sh -l -a stop_all + You should get either output simlar to this: + +Stopping OpenSRF C process 12515... +Stopping OpenSRF C process 12520... +Stopping OpenSRF C process 12526... +Stopping OpenSRF Perl process 12471... +Stopping OpenSRF Router process 12466... + + Or, if services have already been stopped, output may look like this: + OpenSRF C not running + OpenSRF Perl not running + OpenSRF Router not running + Occasionally osrf_ctl.sh fails to kill OpenSRF processes, so we should check to make + sure that none are still running with the command: + ps -aef | grep OpenSRF + You should manually kill any OpenSRF processes. + If you were unable to stop OpenSRF with the above methods, you could also try this + command: + rm –R /openils/var/run/*.pid + This will remove the temporary OpenSRF process files from the run directory which may + have been left over from a previous system boot cycle. + + + Restart Ejabberd and + Memcached with the following commands:Ejabberd + sudo /etc/init.d/ejabberd restart + sudo /etc/init.d/memcached restartmemcached + + + Start the OpenSRF router and check for errors + OpenSRFservicesrouter + /openils/bin/osrf_ctl.sh -l -a start_router + If the router started correctly, output will be: + Starting OpenSRF Router + If router does not start correctly, you should check the router error log files + for error information. + Evergreen 1.6 uses two routers, a public one and a private one, with two different + logfiles: + /openils/var/log/private.router.loglogsrouter + /openils/var/log/public.router.log + A quick way to find error information in the logs is with the grep command. + grep ERR /openils/var/log/*router.log + As a final sanity check, look for router processes using the process status + command: + ps -aef | grep Router + + + Start the OpenSRF perl services and check for errors + OpenSRFservicesperl + /openils/bin/osrf_ctl.sh -l -a start_perl + You should see the output similar to the following: + +Starting OpenSRF Perl +* starting all services for ... +* starting service pid=7484 opensrf.settings +* starting service pid=7493 open-ils.cat +* starting service pid=7495 open-ils.supercat +* starting service pid=7497 open-ils.search +* starting service pid=7499 open-ils.circ +* starting service pid=7501 open-ils.actor +* starting service pid=7502 open-ils.storage +... + + If the perl services do not start correctly or you receive errors, search for errors + in the following log files: + + /openils/var/log/router.log + /openils/var/log/osrfsys.loglogsosrfsys.log + + At this point you can use the grep command to find errors in + any of the Evergreen log files: + grep ERR /openils/var/log/*.log + As a final sanity check, look for OpenSRF processes: + ps -aef | grep -i opensrf + + + Start the OpenSRF c services and check for errors:] + OpenSRFservicesC + /openils/bin/osrf_ctl.sh -l -a start_c + And output should be: + Starting OpenSRF C (host=localhost) + If the c service does not start, check for errors by grepping + the log files for errors: + grep ERR /openils/var/log/*.log + Check for OpenSRF processes: + ps -aef | grep -i opensrf + + + Smoke test with autogen.shautogen + The autogen tool will take some dynamic information from the database and generate + static JavaScript JavaScript files for use by the OPAC and staff client. It is also able to refresh + the proximity mapproximity map between libraries for the purpose of efficiently routing hold + requests. + As user opensrf, you invoke autogen with the command: + /openils/bin/autogen.sh -c /openils/conf/opensrf_core.xml -u + If Autogen completes successfully, the output will be: + +Updating fieldmapper +Updating web_fieldmapper +Updating OrgTree +removing OrgTree from the cache... +Updating OrgTree HTML +Updating locales selection HTML +Updating Search Groups +Refreshing proximity of org units +Successfully updated the organization proximity +Done + + If Autogen does not complete its task and you receive errors, use + grep to find errors in the log files: + grep ERR /openils/var/log/*.log + + + Connect to Evergreen using the srfsh command-line OpenSRF clientsrfsh (command-line OpenSRF client) + /openils/bin/srfsh + + In order for you to connect using srfsh, you will need to + have set up the .srfsh.xml configuration file in your home directory as as + described in the installation chapter. + + You will then see the srfsh prompt: + srfsh# + At the srfsh prompt, enter this command: + login admin open-ils + You should the request verification: + +Received Data: "6f63ff5542da1fead4431c6c280efc75" +------------------------------------ +Request Completed Successfully +Request Time in seconds: 0.018414 +------------------------------------ + +Received Data: { +"ilsevent":0, +"textcode":"SUCCESS", +"desc":" ", +"pid":7793, +"stacktrace":"oils_auth.c:312", +"payload":{ +"authtoken":"28804ebf99508496e2a4d2593aaa930e", + "authtime":420.000000 +} +} + +------------------------------------ +Request Completed Successfully +Request Time in seconds: 0.552430 +------------------------------------ +Login Session: 28804. Session timeout: 420.000 +srfsh# + If you encounter errors or if you are unable to connect, you should consult the + srfsh.log file. The location of this file is configured in your logssrfsh.log + .srfsh.xml configuration file and is + /openils/var/log/srfsh.log by default. + Pressing + + Ctrl + D + + or entering exit will terminate srfsh. + + + Start Apache and check for errors: + web serverApachestarting + /etc/init.d/apache2 start + or + apache2ctl start + You should see output: + +* Starting web server apache2 +...done. + + the Apache OpenSRF modules write to the + /openils/var/log/gateway.loglogsgateway.log + However, you should check all of the log files for errors: + grep ERR /openils/var/log/*.log + Another place to check for errors is the Apache error logs + generally located in in the /var/log/Apache2 logsApache + Apachelogs + directory + If you encounter errors with Apache, a common source of potential problems are the + Evergreen site configuration files /etc/apache2/eg_vhost.conf and + /etc/apache2/sites-available/eg.conf + configuration filesApacheeg.conf + configuration filesApacheeg_vhost.conf + + + + Testing with <command>settings-tester.pl</command> + As the opensrf user, run the script settings-tester.pl to see if it finds any + system configuration problems. + +cd /home/opensrf/Evergreen-ILS-1.6.0.0 +perl Open-ILS/src/support-scripts/settings-tester.pl + + Here is example output from running settings-tester.pl: + +LWP::UserAgent version 5.810 +XML::LibXML version 1.70 +XML::LibXML::XPathContext version 1.70 +XML::LibXSLT version 1.70 +Net::Server::PreFork version 0.97 +Cache::Memcached version 1.24 +Class::DBI version 0.96 +Class::DBI::AbstractSearch version 0.07 +Template version 2.19 +DBD::Pg version 2.8.2 +Net::Z3950::ZOOM version 1.24 +MARC::Record version 2.0.0 +MARC::Charset version 1.1 +MARC::File::XML version 0.92 +Text::Aspell version 0.04 +CGI version 3.29 +DateTime::TimeZone version 0.7701 +DateTime version 0.42 +DateTime::Format::ISO8601 version 0.06 +DateTime::Format::Mail version 0.3001 +Unix::Syslog version 1.1 +GD::Graph3d version 0.63 +JavaScript::SpiderMonkey version 0.19 +Log::Log4perl version 1.16 +Email::Send version 2.192 +Text::CSV version 1.06 +Text::CSV_XS version 0.52 +Spreadsheet::WriteExcel::Big version 2.20 +Tie::IxHash version 1.21 +Parse::RecDescent version 1.95.1 +SRU version 0.99 +JSON::XS version 2.27 + + +Checking Jabber connection for user opensrf, domain private.localhost +* Jabber successfully connected + +Checking Jabber connection for user opensrf, domain public.localhost +* Jabber successfully connected + +Checking Jabber connection for user router, domain public.localhost +* Jabber successfully connected + +Checking Jabber connection for user router, domain private.localhost +* Jabber successfully connected + +Checking database connections +* /opensrf/default/reporter/setup :: Successfully connected to database... + * Database has the expected server encoding UTF8. +* /opensrf/default/apps/open-ils.storage/app_settings/databases :: Successfully... +* /opensrf/default/apps/open-ils.cstore/app_settings :: Successfully... + * Database has the expected server encoding UTF8. +* /opensrf/default/apps/open-ils.pcrud/app_settings :: Successfully ... + * Database has the expected server encoding UTF8. +* /opensrf/default/apps/open-ils.reporter-store/app_settings :: Successfully... + * Database has the expected server encoding UTF8. + +Checking database drivers to ensure <driver> matches <language> +* OK: Pg language is undefined for reporter base configuration +* OK: Pg language is undefined for reporter base configuration +* OK: Pg language is perl in /opensrf/default/apps/open-ils.storage/language +* OK: pgsql language is C in /opensrf/default/apps/open-ils.cstore/language +* OK: pgsql language is C in /opensrf/default/apps/open-ils.pcrud/language +* OK: pgsql language is C in /opensrf/default/apps/open-ils.reporter-store/language + +Checking libdbi and libdbi-drivers + * OK - found locally installed libdbi.so and libdbdpgsql.so in shared library path + +Checking hostname + * OK: found hostname 'localhost' in <hosts> section of opensrf.xml +$ + + If the output from the script does not help you find the problem, please do not make any further significant changes to your configuration. + Follow the steps in the troubleshooting guide in . + + + Try to login from the staff clientstaff clienttesting + + + Testing the Catalog + OPACtesting + By default, the OPAC will live at the URL http://my.domain.com/opac/. + Navigate to this URL and the front page of the OPAC should load. There is a basic text entry field with some extra search options. If you have any + problems loading this page, check the Apache error logs. If the page loads but does not function correctly, then check for possible javascript errors. We + highly recommend testing with the Firefox browser because of the helpful javascript debugging tools. + Assuming that the OPAC is functioning and there is data in your database, you can now perform other simple functional tests + (e.g., searching the catalog). + + + diff --git a/admin/z3950.xml b/admin/z3950.xml new file mode 100644 index 0000000000..5bf2d4a182 --- /dev/null +++ b/admin/z3950.xml @@ -0,0 +1,205 @@ + + + + <systemitem class="protocol">SRU</systemitem> and <systemitem class="protocol">Z39.50</systemitem> Server + + Evergreen is extremely scalable and can serve the need of a large range of libraries. The specific requirements and configuration of your system should be determined based on your + specific needs of your organization or consortium. +
+ + Testing SRU with yaz-clientyaz + + yaz-client is installed as a part of Index Data's YAZ software. Recent versions include support for querying SRU servers. + Evergreen ships an SRU configuration SRU + that works out of the box. To search Evergreen with yaz-client, choose the GET query method and issue the find command. + In the following example, we connect to the Evergreen test server dev.gapines.org - substitute this hostname with your own + Evergreen server hostname: + Some older versions of yaz-client have known issues with SRU. Ensure that you are using the latest edition of yaz from + http://www.indexdata.com/yaz. + $ yaz-client http://dev.gapines.org/opac/extras/sru + Z> sru GET 1.1 + Z> find hemingway + + If your database has records that match that term, you will get the corresponding MARCXML records + in your response from yaz-client.MARCXML + Here's what the SRU request looks like as sent to the Evergreen web server: + GET /opac/extras/sru?version=1.1&operation=searchRetrieve&query=hemingway&maximumRecords=0 + You can see what the response looks like by hitting the same URL in your Web browser: + + http://dev.gapines.org/opac/extras/sru?version=1.1&operation=searchRetrieve&query=hemingway&maximumRecords=0 + CQL queries + Evergreen supports some CQL CQL index-sets for advanced queries such as a subset of + Dublin Core (DC) elements. Those DC elements that are + supported map to Evergreen default indexes as follows:Dublin Core + + + + + + + DC element + Evergreen index + + + + + title + title + + + creator + author + + + contributor + author + + + publisher + keyword + + + subject + subject + + + identifier + keyword + + + type + none + + + format + none + + + language + lang + + + + + Here are a few examples of SRU searches against some of these indexes: + + dc.title all complete dinosaur + dc.subject all britain france + dc.title exact The Empire Strikes Back + dc.author=king and dc.title=zone + +
+
+ + Setting up <systemitem class="protocol">Z39.50</systemitem> server supportZ39.50 + + + You must have Evergreen's SRU server running before you can enable Z39.50 server support. + + This support uses an Z39.50-to-SRU translator service supplied + by the Net::Z3950::Simple2ZOOMSimple2ZOOM Perl module to enable Evergreen to act as a Z39.50 server. + You could run the Z39.50 server on a different machine. It just needs to be able to connect to the + Evergreen SRU server. + + Setting up the <systemitem class="protocol">Z39.50</systemitem> server + + Install a recent version of yaz (the Makefile.install should have installed a suitable version). + + Install Net::Z3950::Simple2ZOOM (sudo cpan Net::Z3950::Simple2ZOOM) + + Create a Simple2ZOOM configuration file. Something like the following is a good start, and is + based on the Simple2ZOOM + documentation example. We'll name the file dgo.conf for our example: + +<client> + <database name="gapines"> + <zurl>http://dev.gapines.org/opac/extras/sru</zurl> + <option name="sru">get</option> + <charset>marc-8</charset> + <search> + <querytype>cql</querytype> + <map use="4"><index>eg.title</index></map> + <map use="7"><index>eg.keyword</index></map> + <map use="8"><index>eg.keyword</index></map> + <map use="21"><index>eg.subject</index></map> + <map use="1003"><index>eg.author</index></map> + <map use="1018"><index>eg.publisher</index></map> + <map use="1035"><index>eg.keyword</index></map> + <map use="1016"><index>eg.keyword</index></map> + </search> + </database> +</client> + + You can have multiple <database> sections in a single file, each pointing to a different scope of your consortium. The name attribute on + the <database> element is used in your Z39.50 connection string to name the database. The + <zurl> element must point to + http://hostname/opac/extras/sru. As of Evergreen 1.6, you can append an optional organization unit shortname for search + scoping purposes, and you can also append /holdings if you want to expose the holdings for any returned records. So your zurl + could be http://dev.gapines.org/opac/extras/sru/BR1/holdings to limit the search scope to BR1 and its children, and + to expose its holdings. + + + Run simple2ZOOM as a daemon, specifying the configuration files and one or more listener addresses that the + Z39.50 server will + be accessible on. If you do not specify a port, it will automatically run on port 9999. In the following example, + we tell it to listen both to localhost on port 2210, and on dev.gapines.org + n port 210: + + <yazgfs> + <server id="server1"> + <retrievalinfo> + <retrieval syntax="xml"/> + <retrieval syntax="marc21"> + <backend syntax="xml"> + <marc inputformat="xml" outputformat="marc" inputcharset="utf-8" outputcharset="marc-8"/> + </backend> + </retrieval> + </retrievalinfo> + </server> +</yazgfs> + + + + Run simple2ZOOM as a daemon, specifying the configuration files and one or more listener addresses that + the Z39.50 server will be accessible on. + If you do not specify a port, it will automatically run on port 9999. In the following example, we tell it to listen both to localhost on port 2210, and on dev.gapines.org on port 210: + simple2zoom -c dgo.conf -- -f xml2marc-yaz.cfg localhost:2210 dev.gapines.org:210 + + + To test the Z39.50 server, we can use yaz-client again: + +yaz-client +Z> open localhost:2210/gapines +Connecting...OK. +Sent initrequest. +Connection accepted by v3 target. +ID : 81/81 +Name : Simple2ZOOM Universal Gateway/GFS/YAZ +Version: 1.03/1.128/3.0.34 +Options: search present delSet triggerResourceCtrl scan sort namedResultSets +Elapsed: 0.010718 +Z> format marcxml +Z> find dc.title=zone and dc.author=king +Sent searchRequest. +Received SearchResponse. +Search was a success. +Number of hits: 0, setno 4 +records returned: 0 +Elapsed: 0.611432 +Z> find dead zone +Sent searchRequest. +Received SearchResponse. +Search was a success. +Number of hits: 4, setno 5 +records returned: 0 +Elapsed: 1.555461 +Z> show 1 +Sent presentRequest (1+1). +Records: 1 +[]Record type: XML +<record xmlns:... (rest of record deliberately truncated) + +
+
+ diff --git a/appendices/about_this_documentation.xml b/appendices/about_this_documentation.xml new file mode 100644 index 0000000000..090ac7b87a --- /dev/null +++ b/appendices/about_this_documentation.xml @@ -0,0 +1,213 @@ + + + + About this Documentation + +
+ About the Documentation Interest Group (DIG) + The Evergreen DIG was established in May 2009 at the first Evergreen International Conference, where members of the Evergreen community committed to developing single-source, + standards-based documentation for Evergreen. Since then, the DIG has been actively working toward that goal. + + Evergreen DIG Participants + + + + + + Name + Organization + + + + + Jeremy Buhler + SITKA + + + Paula Burton + King County Library System + + + Matt Carlson + King County Library System + + + Sarah Childs + Hussey-Mayfield Memorial Public Library + + + + Anton Chuppin + Nova Scotia Provincial Library + + + Marlene Coleman + Beaufort Country Library + + + Karen Collier + Kent County Public Library + + + Shannon Dineen + SITKA + + + George Duimovich + NRCan Library + + + Jennifer Durham + Statesboro Regional Library System + + + Jennifer Finney + Florence County Library + + + Lynn Floyd + Anderson County Library + + + Sally Fortin + Equinox Software + + + Tina Ji + SITKA + + + Catherine Lemmer + Indiana State Library + + + Roma Matott + Pioneer Library System + + + Andrea Neiman + Kent County Public Library + + + Kevin Pischke + William Jessup University + + + Tara Robertson + N/A + + + Rod Schiffman + Alpha-G Consulting + + + Steve Sheppard + Open + + + Ben Shum + Bibliomation + + + Robert Soulliere + Mohawk College + + + Lindsay Stratton + Pioneer Library System + + + Jenny Turner + PALS + + + Repke de Vries + International Institute for Social History + + + D. Ceabron Williams + Flint River Regional Library System + + + Tigran Zargaryan + Fundamental Scientific Library of the National Academy of Sciences + + + +
+ + Past DIG Participants + + + + + + Name + Organization + + + + + + Paul Weiss + Consultant/Sage Library System + + + Karen Schneider + Equinox Software + + + +
+
+
+ Attributions + Copyright © 2009-2011 Evergreen DIG + Copyright © 2007-2011 Equinox + Copyright © 2007-2011 Dan Scott + Copyright © 2009-2011 BC Libraries Cooperative (SITKA) + Copyright © 2008-2011 King County Library System + Copyright © 2009-2010 Pioneer Library System + Copyright © 2009-2010 PALS + Copyright © 2009-2010 Georgia Public Library Service + Copyright © 2008-2010 Project Conifer + Copyright © 2009-2010 Bibliomation + Copyright © 2008-2010 Evergreen Indiana +
+
+ How to ParticipateDocumentation Interest Group (DIG) + Contributing to documentation is an excellent way to support Evergreen, even if you are new to documentation. In fact, beginners often have a distinct advantage over the + experts, more easily spotting the places where documentation is lacking or where it is unclear. + We welcome your contribution with planning, writing, editing, testing, translating to DocBook, and other tasks. Whatever your background or experience we are keen to + have your help! + What you can do: + + Join the Evergreen documentation listserv: list.georgialibraries.org/mailman/listinfo/open-ils-documentation . This is the primary way we communicate with each other. + Please send an email introducing yourself to the list.mailing lists + Add yourself to the participant list + if you have an Evergreen DokuWiki account, or send a request to docs@evergreen-ils.org. + Check out the documentation outline to see which areas need work, + and let the DIG list know in which areas you would like to work. + Review the documentation and report any error or make suggestion using Launchpad. + + + Volunteer Roles + We are now looking for people to help produce the documentation. If you interested in participating, email the DIG facilitators at docs@evergreen-ils.org + or post on the documentation mailing list. We're looking for volunteers to work on the following: + + Writing – Produce the documentation (from scratch, and/or revised from existing materials). We're open to receiving content in any formats, such as + Word or Open Office, but of course, would be most delighted with DocBook xml format. + Testing – Compare the documents with the functions they describe and ensuring that the procedures accomplish the desired results. Even if you are not + officially in the DIG, we would appreciate any suggestions you may have for Evergreen documentation. + XML conversion – Convert existing documentation to DocBook format. + Editorial review – Ensuring the documentation is clear and follows Evergreen DIG style + guide conventions. + Style and Design – Edit the DocBook style sheets or post style tips and suggestions on the DIG list.DocBook + + +
+
+ + diff --git a/appendices/bookindex.xml b/appendices/bookindex.xml new file mode 100755 index 0000000000..82d9a74ada --- /dev/null +++ b/appendices/bookindex.xml @@ -0,0 +1,5 @@ + + +Index + + diff --git a/appendices/glossary.xml b/appendices/glossary.xml new file mode 100644 index 0000000000..661f12d0cd --- /dev/null +++ b/appendices/glossary.xml @@ -0,0 +1,796 @@ + + + Glossary + + In this section we expand acronyms, define terms, and generally try + to explain concepts used by Evergreen software. + + + A + + Apache + + Apache + + + Open-source web server software used to serve both static + content and dynamic web pages in a secure and reliable way. More + information is available at + http://apache.org. + + + + + B + + Bookbags + + bookbags + + + Bookbags are lists of items that can be used for any number of + purposes. For example, to keep track of what books you have read, + books you would like to read, to maintain a class reading list, to + maintain a reading list for a book club, to keep a list of books you + would like for your birthday. There are an unlimited number of + uses. + + + + + C + + CentOS + + Linux + CentOS + + + A popular open-source operating system based on Red Hat + Enterprises Linux + (also known as "RHEL") and often used for in web servers. More + information is available at + http://www.centos.org. + + + + Closure Compiler + + A suite of open-source tools used to build web applications with + Javascript; originally developed by Google. + It is used to create special builds of the Evergreen Staff Client. + More information is available at + + http://code.google.com/closure/compiler/. + + + + CPAN + + Perl + CPAN + + + An open-source archive of software modules written in + Perl. More information is available at + http://www.cpan.org. + + + + + + D + + Debian + + Linux + Debian + + + One of the most popular open-source operating system using the + Linux kernel that provides + over 25000 useful precompiled software packages. Also known as + Debian GNU/Linux. More + information is available at + http://www.debian.org. + + + + Domain name + + domain name + + + A unique set of case-insensitive, alphanumeric strings + separated by periods that are used to name organizations, web sites + and addresses on the Internet (e.g.: + www.esilibrary.com). Domain names can be reserved via + third-party registration services, and can be associated with a + unique IP address or suite of IP addresses. + + + + + + E + + ejabberd + + ejabberd + + + An open-source Jabber/XMPP instant messaging server that is + used for client-server message passing within Evergreen. It runs + under popular operating systems (e.g., + Mac OSX, + GNU/Linux, and + Microsoft Windows). One + popular use is to provide XMPP messaging + services for a Jabber domain across an + extendable cluster of cheap, easily-replaced machine nodes. More + information is available at + http://www.ejabberd.im. + + + + + + + F + + + + G + + Gentoo + + Linux + Gentoo + + + A popular open-source operating system built on the + Linux kernel. More + information is available at + http://www.gentoo.org. + + + + + H + + + + I + + IP Address + + IP Address + + + (Internet Protocol address) A numerical label consisting of + four numbers separated by periods (e.g., "192.168.1.15") assigned to + individual members of networked computing systems. It uniquely + identifies each system on the network and allows controlled + communication between such systems. The numerical label scheme must + adhere to a strictly defined naming convention that is currently + defined and overseen by the Internet Corporation for Assigned Names + and Numbers ("ICANN"). + + + + Item/copy Buckets + + copy buckets + item buckets + + + item buckets + copy buckets + + + Virtual containers to use in batch processing + of item or copy records. They can be used to perform various + cataloging/holdings maintenance tasks in batch. + + + + + J + + Jabber + + jabber + XMPP + + + The communications protocol used for client-server message + passing within Evergreen. Now known as XMPP (eXtensible Messaging and + Presence Protocol), it was originally named "Jabber". + + + + + + + K + + + + L + + + + M + + MARC + + MARC + + + The MARC formats are standards for the representation and + communication of bibliographic and related information in + machine-readable form. + + + + MARCXML + + MARCXML + + + Framework for working with MARC data in a XML environment. + + + + McCoy + + An open-source application that allows add-on authors to + provide secure updates to their users. It is used to create special + builds of the Evergreen Staff Client. More information is available + at + http://developer.mozilla.org/en/McCoy. + + + + memcached + + memcached + + + A general-purpose distributed memory caching system, usually + with a client-server architecture spread over multiple computing + systems. It reduces the number of times a data source (e.g., a + database) must be directly accessed by temporarily caching data in + memory, therefore dramatically speeding up database-driven web + applications. + + + + + N + + Network address + + network address + ip address + + + Also known as an IP address (Internet Protocol address). + + + + + nsis + + An open-source software tool used to create Windows + installers. It is used to create special builds of the Evergreen + Staff Client. More information is available at + + http://nsis.sourceforge.net. + + + + + O + + OPAC + + OPAC + + + The "Online Public Access Catalog"; an online database of a + library's holdings; used to find resources in their collections; + possibly searchable by keyword, title, author, subject or call + number. + + + + OpenSRF + + OpenSRF + + + The "Open Scalable Request Framework" (pronounced 'open surf') + is a stateful, decentralized service architecture that allows + developers to create applications for Evergreen with a minimum of + knowledge of its structure. + + + + + P + + Perl + + Perl + + + The high-level scripting language in which most of the business logic of Evergreen is written. + + + + + PKI + + PKI + + + Public Key Infrastructure (PKI) describes the schemes needed + to generate and maintain digital SSL Certificates. + + + + + PostgreSQL + + databases + PostgreSQL + + + A popular open-source object-relational database management + system that underpins Evergreen software. + + + + PuTTY + + SSH + Putty + + + A popular open-source telnet/ssh client for the Windows and + Unix platforms. As used in Evergreen, a handy utility used to create + an SSH Tunnel for connecting Staff Clients to Evergreen servers over + insecure networks. More information is available at + + http://www.chiark.greenend.org.uk/~sgtatham/putty/. + + + + + + Q + + + + R + + Resource Hacker + + An open-source utility used to view, modify, rename, add, + delete and extract resources in 32bit Windows executables. It is + used to create special builds of the Evergreen Staff Client. More + information is available at + + Resource Hacker + + + + RHEL + + Linux + RHEL + + + Also known as "Red Hat Enterprises + Linux". An official + Linux distribution that is + targeted at the commercial market. It is the basis of other popular + Linux distributions, e.g., + CentOS. More information is + available at + http://www.redhat.com. + + + + + S + + SIP + + SIP + + + SIP (Standard Interchange Protocol) is a communications + protocol used within Evergreen for transferring data to and from + other third party devices, such as RFID and barcode scanners that + handle patron and library material information. Version 2.0 (also + known as "SIP2") is the current standard. It was originally + developed by the 3M Corporation. + + + + + srfsh + + srfsh + + A command language interpreter (shell) that executes commands + read from the standard input. It is used to test the Open Service + Request Framework (OpenSRF). + + + + SRU + + SRU + + + SRU (Search & Retrieve URL Service) is a search protocol + used in web search and retrieval. It expresses queries in Contextual + Query Language (CQL) and transmits them as a URL, returning XML data + as if it were a web page. + + + + + SRW + + SRW + + + SRW (Search & Retrieve Web Service), also known as "SRU + via HTTP SOAP", is a search protocol used in web search and + retrieval. It uses a SOAP interface and expresses both the query and + result as XML data streams. + + + + + SSH + + SSH + + + An encrypted network protocol using public-key cryptography + that allows secure communications between systems on an insecure + network. Typically used to access shell accounts but also supports + tunneling, forwarding TCP ports and X11 connections, and + transferring files. + + + + SSH proxy + + SSH + proxy + + + As used in Evergreen, a method of allowing one or more Staff + Clients to communicate with one or more Evergreen servers over an + insecure network by sending data through a secure SSH tunnel. It + also buffers and caches all data travelling to and from Staff + Clients to speed up access to resources on Evergreen servers. + + + + + + + SSH tunnel + + SSH + tunneling + + + An encrypted data channel existing over an SSH network + connection. Used to securely transfer unencrypted data streams over + insecure networks. + + + + + + SSL Certificate + + SSL + + + As used in Evergreen, it is a method of ensuring that Staff + Clients are able to connect to legitimate Evergreen servers. + In general, it is a special electronic document used to + guarantee authenticity of a digital message. Also known as a "public + key", or "identity" or "digital" certificate. It combines an + identity (of a person or an organization) and a unique public key to + form a so-called digital signature, and is used to verify that the + public key does, in fact, belong with that particular + identity. + + + + + + T + + tunneling + + tunneling + SSH tunneling + + + As used in Evergreen, it is a method of allowing Staff Clients + to securely connect to legitimate Evergreen servers. + In general, it is a method of encapsulating data provided in + one network protocol (the "delivery"protocol), within data in a + different network protocol (the "tunneling" protocol). Used to + provide a secure path and secure communications through an insecure + or incompatible network. Can be used to bypass firewalls by + communicating via a protocol the firewall normally blocks, but + "wrapped" inside a protocol that the firewall does not block. + + + + + + U + + Ubuntu + + Linux + Ubuntu + + + A popular open-source operating system using the + Linux kernel that was + originally based on the + Debian GNU/Linux + operating system. More information is available at + http://www.ubuntu.com. + + + + + + V + + Virtualization + + virtualization + + + A method of executing software in a special environment that + is partitioned or separated from the real underlying hardware and + software resources. In typical usage, it allows a + host operating system to encapsulate or emulate + a guest operating system environment in such a + way that the emulated environment is completely unaware of the + hosting environment. As used in Evergreen, it enables a copy of the + Linux operating system + running Evergreen software to execute within a + Windows environment. + + + + + + + VirtualBox + + virtualization software + VirtualBox + + + A popular commercial package of virtualization software that + emulates the x86 microprocessor architecture. It can be installed on + Linux, + Mac OS X, + Windows or + Solaris "host" operating + systems and allows other "guest" (typically including + Linux and + Windows) operating systems + to be loaded and executed. + + + + + Virtual PC + + virtualization software + Virtual PC + + + A popular commercial package of virtualization software that + emulates the x86 microprocessor architecture. It is installed on a + Windows "host" operating system and allows other "guest" (typically + including Linux and + Windows) operating systems + to be loaded and executed. + + + + + VMware + + virtualization software + VMware + + + A popular commercial package of virtualization software that + emulates the x86 microprocessor architecture. It can be installed on + Linux, + Mac OS X, + Windows or + Solaris "host" operating systems + and allows other "guest" (typically including + Linux and + Windows) operating systems + to be loaded and executed. + + + + + Volume Buckets + + volume buckets + + + Virtual containers to use in batch processing + of multiple volumes. They can be used to perform various + cataloging/holdings maintenance tasks in batch. + + + + + W + + Wine + + Linux + Wine + + + A popular open-source application that allows + Linux and + Unix + systems to run Windows + executables. More information is available at + http://www.winehq.org/. + + + + + X + + XML + + XML + + + The eXtensible Markup Language, a subset of SGML; a set of + rules for encoding information in a way that is both human- and + machine-readable. It is primarily used to define documents but can + also be used to define arbitrary data structures. It was originally + defined by the World Wide Web Consortium (W3C). + + + + XMPP + + XMPP + jabber + + + The open-standard communications protocol (based on XML) used + for client-server message passing within Evergreen. It supports the + concept of a consistent domain of message types + that flow between software applications, possibly on different + operating systems and architectures. More information is available + at http://xmpp.org. + + + + + + xpath + + xpath + + + The XML Path Language, a query language based on a tree + representation of an XML document. It is used to programmatically + select nodes from an XML document and to do minor computation + involving strings, numbers and Boolean values. It allows you to + identify parts of the XML document tree, to navigate around the + tree, and to uniquely select nodes. The currently version is "XPath + 2.0". It was originally defined by the World Wide Web Consortium + (W3C). + + + + XUL + + xUL + + + The XML User Interface Language, a specialized interface + language that allows building cross-platform applications that drive + Mozilla-based browsers such as + Firefox. More information is available at + + https://developer.mozilla.org/en/XUL. + + + + xulrunner + + XULRunner + + + A specialized run-time application environment that provides + support for installing, upgrading and uninstalling + XUL applications. It operates with + Mozilla-based applications such as the + Firefox browser. More information is + available at + + https://developer.mozilla.org/en/XULRunner. + + + + + + Y + + YAZ + + yaz + + + A programmers’ toolkit supporting the development of + Z39.50 / SRW / SRU clients and servers. + + + + + + + + yaz + + yaz-client + + A Z39.50/SRU client for connecting to YAZ servers. + More information is available at + + http://www.indexdata.com/yaz/doc/yaz-client.html + + + + + + Z + + Z39.50 + + Z39.50 + + + An international standard client–server protocol for + communication between computer systems, primarily library and + information related systems. + + + + + diff --git a/appendices/installchecklist.xml b/appendices/installchecklist.xml new file mode 100644 index 0000000000..d9b1c63c13 --- /dev/null +++ b/appendices/installchecklist.xml @@ -0,0 +1,86 @@ + + + + Evergreen Installation Checklist + + This appendix is a checklist of things to do to istall and configure Evergreen. It will refer to the necessary chapter with the specific instructions for each item. + + + + + Install OpenSRFOpenSRF + + + Install Evergreen server software + + + Install Evergreen staff clientstaff client + + + Establish a back up strategy for Evergreen data and files + + + Configure PostgreSQL for better performancePostgreSQL + + + Configure Evergreen error logginglogs + + + Set up organizational unit typesorganizational unit types + + + Set up organizational unitsorganizational units + + + Customize localization and languages (optional)localization and languages + + + Add circ modifierscirculation modifiers + + + Configure copy statusescopy status + + + Add cataloguing templatescataloguing templates + + + Add user groups and assign permissionspermissions + + + Adjust various Local Administration Settings + + + Adjust circulation policies and penalty threshholds for groupspenalty threshholds + + + Add staff users + + + Customize OPAC as neededOPACcustomizing + + + Import datamigratingimporting data + + + Start the reporter service and set up reports + reportsstarting + + + + Set up email notifications for holds and overdue itemsnotifications + + + Set up action triggersaction triggers + + + Set up Z39.50 server (optional)Z39.50 + + + Adjust search relevancy settings if required (optional)search relevancy + + + Install SIP server (optional) - for communications with automated devices such as self check stations, autmated sorters and other devices using SIPSIP + + + diff --git a/appendices/more_info.xml b/appendices/more_info.xml new file mode 100644 index 0000000000..d8c36228bb --- /dev/null +++ b/appendices/more_info.xml @@ -0,0 +1,33 @@ + + + + Getting More Information + + This documentation is just one way to learn about Evergreen and find solutions to Evergreen challenges. Below is a list of many other resources to help you find answers to almost any question + you might have. + Evergreen Wiki - Loads of information and the main portal to the Evergreen community.wiki + Evergreen mailing lists - These are excellent for initiating questions. There are several lists including: + + General list - General inquiries regarding Evergreen. If unsure about + which list to use, this is a good stating point.mailing lists + Developer list - Technical questions should be asked here including + questions regarding installation. As well, patches can be submitted using this list and developer communication also takes place here. + DIG list - This list is used for questions and + feedback regarding this documentation, the Documentation Interest Group and other documentation related ideas and issues.Documentation Interest Group (DIG) + + + Evergreen Blog - Great for getting general news and updates about Evergreen. It is also an interesting historical read + with entries dating back to the early beginnings of Evergreen. + Evergreen IRC channel - Allows live chat. Many developers hang out here and will try to field technical questions. This + is often the quickest way to get a solution to a specific problem. Just remember that while the channel is open 24/7, there are times when no one is available in the channel. The most + active times for the IRC channel seem to be weekday afternoons (Eastern Standard Time). There is also an archive of logs from the chat sessions available on the + IRC page.IRC chat + Evergreen related community blogs - Evergreen related blog entries from the community. + Resource Sharing Cooperative of Evergreen Libraries (RSCEL) - Provides some technical documents and a means for the + Evergreen community to collaborate with other libraries.Resource Sharing Cooperative of Evergreen Libraries (RSCEL) + List of current Evergreen libraries - Locate other libraries who are + using Evergreen. + + + diff --git a/appendices/schema.xml b/appendices/schema.xml new file mode 100644 index 0000000000..7916c6621a --- /dev/null +++ b/appendices/schema.xml @@ -0,0 +1,41207 @@ + + + Database Schema + This is the schema for the Evergreen database. + +
+ Schema acq + + + currency_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + PRIMARY KEY + + + + label + text + + + + + + + + Tables referencing acq.exchange_rate via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + distribution_formula + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + owner + integer + UNIQUE#1; NOT NULL; + + + + name + text + UNIQUE#1; NOT NULL; + + + + skip_count + integer + NOT NULL; + + + + + + + + + + + + Tables referencing acq.distribution_formula_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + distribution_formula_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + formula + integer + UNIQUE#1; NOT NULL; + + + + position + integer + UNIQUE#1; NOT NULL; + + + + item_count + integer + NOT NULL; + + + + owning_lib + integer + + + + + location + integer + + + + + + + + + + + Constraints on distribution_formula_entry + + + acqdfe_must_ be_somewhere + CHECK (((owning_lib IS NOT NULL) OR (location IS NOT NULL))) + + + + + + + + + + + + + exchange_rate + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + from_currency + text + UNIQUE#1; NOT NULL; + + + + + + + + + to_currency + text + UNIQUE#1; NOT NULL; + + + + ratio + numeric + NOT NULL; + + + + + + + + + + + + + + + fiscal_calendar + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + name + text + NOT NULL; + + + + + + + + + + + + Tables referencing acq.fiscal_year via Foreign Key Constraints + + + + + + + + + + + + + + + + fiscal_year + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + calendar + integer + UNIQUE#1 ;UNIQUE#2; NOT NULL; + + + + + year + integer + UNIQUE#1; NOT NULL; + + + + year_begin + timestamp with time zone + UNIQUE#2; NOT NULL; + + + + year_end + timestamp with time zone + NOT NULL; + + + + + + + + + + + + + + + fund + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + org + integer + UNIQUE#2; UNIQUE#1; NOT NULL; + + + + name + text + UNIQUE#1; NOT NULL; + + + + year + integer + UNIQUE#2; UNIQUE#1; NOT NULL; DEFAULT date_part( 'year'::text, now() ); + + + + currency_type + text + NOT NULL; + + + + code + text + UNIQUE#2; + + + + + + + + + + + + Tables referencing acq.fund_allocation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fund_allocation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + funding_source + integer + NOT NULL; + + + + fund + integer + NOT NULL; + + + + amount + numeric + + + + + percent + numeric + + + + + allocator + integer + NOT NULL; + + + + note + text + + + + + create_time + timestamp with time zone + NOT NULL; DEFAULT now(); + + + + + + + + + + Constraints on fund_allocation + + + allocation_amount _or_percent + CHECK ((((percent IS NULL) AND (amount IS NOT NULL)) OR ((percent IS NOT NULL) AND (amount IS NULL)))) + + + + + + fund_allocation_ percent_check + CHECK (((percent IS NULL) OR ((percent >= 0.0) AND (percent <= 100.0)))) + + + + + + + + + + + + + fund_allocation_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + amount + numeric(100,2) + + + + + + + + + + + + + + + + fund_combined_balance + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + amount + numeric + + + + + + + + + + + + + + + + fund_debit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + fund + integer + NOT NULL; + + + + origin_amount + numeric + NOT NULL; + + + + origin_currency_type + text + NOT NULL; + + + + amount + numeric + NOT NULL; + + + + encumbrance + boolean + NOT NULL; DEFAULT true; + + + + debit_type + text + NOT NULL; + + + + xfer_destination + integer + + + + + create_time + timestamp with time zone + NOT NULL; DEFAULT now(); + + + + + + + + + + + + Tables referencing acq.lineitem_detail via Foreign Key Constraints + + + + + + + + + + + + + + + + fund_debit_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + encumbrance + boolean + + + + + amount + numeric + + + + + + + + + + + + + + + + fund_encumbrance_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + amount + numeric + + + + + + + + + + + + + + + + fund_spent_balance + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + amount + numeric + + + + + + + + + + + + + + + + fund_spent_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + amount + numeric + + + + + + + + + + + + + + + + fund_tag + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + owner + integer + UNIQUE#1; NOT NULL; + + + + name + text + UNIQUE#1; NOT NULL; + + + + + + + + + + + + Tables referencing acq.fund_tag_map via Foreign Key Constraints + + + + + + + + + + + + + + + + fund_tag_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + fund + integer + UNIQUE#1; NOT NULL; + + + + tag + integer + UNIQUE#1; + + + + + + + + + + + + + + + funding_source + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + name + text + UNIQUE#1; NOT NULL; + + + + owner + integer + UNIQUE#1; NOT NULL; + + + + currency_type + text + NOT NULL; + + + + code + text + UNIQUE; + + + + + + + + + + + + Tables referencing acq.fund_allocation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + funding_source_allocation_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + funding_source + integer + + + + + amount + numeric(100,2) + + + + + + + + + + + + + + + + funding_source_balance + + + + + + + + Field + Data Type + Constraints and References + + + + + + funding_source + integer + + + + + + + + + + amount + numeric(100,2) + + + + + + + + + + + + + + + + + + + + + funding_source_credit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + funding_source + integer + NOT NULL; + + + + amount + numeric + NOT NULL; + + + + note + text + + + + + + + + + + + + + + + + funding_source_credit_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + funding_source + integer + + + + + amount + numeric + + + + + + + + + + + + + + + + lineitem + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + PRIMARY KEY + + + + creator + integer + NOT NULL; + + + + editor + integer + NOT NULL; + + + + selector + integer + NOT NULL; + + + + provider + integer + + + + + purchase_order + integer + + + + + picklist + integer + + + + + expected_recv_time + timestamp with time zone + + + + + create_time + timestamp with time zone + NOT NULL; DEFAULT now(); + + + + edit_time + timestamp with time zone + NOT NULL; DEFAULT now(); + + + + marc + text + NOT NULL; + + + + eg_bib_id + integer + + + + + source_label + text + + + + + item_count + integer + NOT NULL; + + + + state + text + NOT NULL;DEFAULT 'new'::text; + + + + + + + + + + Constraints on lineitem + + + picklist_or_po + CHECK (((picklist IS NOT NULL) OR (purchase_order IS NOT NULL))) + + + + + + + + + + Tables referencing acq.lineitem_attr via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + lineitem_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + PRIMARY KEY + + + + definition + bigint + NOT NULL; + + + + lineitem + bigint + NOT NULL; + + + + attr_type + text + NOT NULL; + + + + attr_name + text + NOT NULL; + + + + attr_value + text + NOT NULL; + + + + + + + + + + + + + + + lineitem_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + PRIMARY KEY + + + + code + text + NOT NULL; + + + + description + text + NOT NULL; + + + + remove + text + NOT NULL; DEFAULT ''::text; + + + + ident + boolean + NOT NULL; DEFAULT false; + + + + + + + + + + + + + + + lineitem_detail + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + PRIMARY KEY + + + + lineitem + integer + NOT NULL; + + + + fund + integer + + + + + fund_debit + integer + + + + + eg_copy_id + bigint + + + + + barcode + text + + + + + cn_label + text + + + + + note + text + + + + + collection_code + text + + + + + circ_modifier + text + + + + + owning_lib + integer + + + + + location + integer + + + + + recv_time + timestamp with time zone + + + + + + + + + + + + + + + + lineitem_generated_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + PRIMARY KEY DEFAULT nextval( 'lineitem_attr_definition_id_seq'::regclass ); + + + + code + text + NOT NULL; + + + + description + text + NOT NULL; + + + + remove + text + NOT NULL; DEFAULT ''::text; + + + + ident + boolean + NOT NULL; DEFAULT false; + + + + xpath + text + NOT NULL; + + + + + + + + + + + lineitem_local_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + PRIMARY KEY DEFAULT nextval( 'lineitem_attr_definition_id_seq'::regclass ); + + + + code + text + NOT NULL; + + + + description + text + NOT NULL; + + + + remove + text + NOT NULL; DEFAULT ''::text; + + + + ident + boolean + NOT NULL;DEFAULT false; + + + + + + + + + + + + + + + lineitem_marc_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + PRIMARY KEY DEFAULT nextval( 'lineitem_attr_definition_id_seq'::regclass ); + + + + code + text + NOT NULL; + + + + description + text + NOT NULL; + + + + remove + text + NOT NULL; DEFAULT ''::text; + + + + ident + boolean + NOT NULL; DEFAULT false; + + + + xpath + text + NOT NULL; + + + + + + + + + + + + lineitem_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + lineitem + integer + NOT NULL; + + + + creator + integer + NOT NULL; + + + + editor + integer + NOT NULL; + + + + create_time + timestamp with time zone + NOT NULL; DEFAULT now(); + + + + edit_time + timestamp with time zone + NOT NULL; DEFAULT now(); + + + + value + text + NOT NULL; + + + + + + + + + + + + + + + lineitem_provider_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + PRIMARY KEY DEFAULT nextval( 'lineitem_attr_definition_id_seq'::regclass ); + + + + code + text + NOT NULL; + + + + description + text + NOT NULL; + + + + remove + text + NOT NULL; DEFAULT ''::text; + + + + ident + boolean + NOT NULL; DEFAULT false; + + + + xpath + text + NOT NULL; + + + + provider + integer + NOT NULL; + + + + + + + + + + + + + + + lineitem_usr_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + PRIMARY KEY DEFAULT nextval( 'lineitem_attr_definition_id_seq'::regclass ); + + + + + + + + + code + text + NOT NULL; + + + + description + text + NOT NULL; + + + + remove + text + NOT NULL; DEFAULT ''::text; + + + + ident + boolean + NOT NULL; DEFAULT false; + + + + usr + integer + NOT NULL; + + + + + + + + + + + + + + + picklist + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + owner + integer + UNIQUE#1; NOT NULL; + + + + creator + integer + NOT NULL; + + + + editor + integer + NOT NULL; + + + + org_unit + integer + NOT NULL; + + + + name + text + UNIQUE#1; NOT NULL; + + + + create_time + timestamp with time zone + NOT NULL;DEFAULT now(); + + + + edit_time + timestamp with time zone + NOT NULL;DEFAULT now(); + + + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + po_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + purchase_order + integer + NOT NULL; + + + + creator + integer + NOT NULL; + + + + editor + integer + NOT NULL; + + + + create_time + timestamp with time zone + NOT NULL; DEFAULT now(); + + + + edit_time + timestamp with time zone + NOT NULL; DEFAULT now(); + + + + value + text + NOT NULL; + + + + + + + + + + + provider + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + name + text + UNIQUE#1;NOT NULL; + + + + owner + integer + UNIQUE#2;UNIQUE#1;NOT NULL; + + + + currency_type + text + NOT NULL; + + + + code + text + UNIQUE#2;NOT NULL; + + + + holding_tag + text + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + provider_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + valid + boolean + NOT NULL; DEFAULT true; + + + + address_type + text + + + + + provider + integer + NOT NULL; + + + + street1 + text + NOT NULL; + + + + street2 + text + + + + + city + text + NOT NULL; + + + + county + text + + + + + state + text + NOT NULL; + + + + country + text + NOT NULL; + + + + post_code + text + NOT NULL; + + + + + + + + + + + + + + + provider_contact + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + provider + integer + NOT NULL; + + + + name + text + + + + + role + text + + + + + email + text + + + + + phone + text + + + + + + + + + + + + + Tables referencing acq.provider_contact_address via Foreign Key Constraints + + + + + + + + + + + + + + + + provider_contact_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + valid + boolean + NOT NULL; DEFAULT true; + + + + address_type + text + + + + + contact + integer + NOT NULL; + + + + street1 + text + NOT NULL; + + + + street2 + text + + + + + city + text + NOT NULL; + + + + county + text + + + + + state + text + NOT NULL; + + + + country + text + NOT NULL; + + + + post_code + text + NOT NULL; + + + + + + + + + + provider_holding_subfield_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + provider + integer + UNIQUE#1; NOT NULL; + + + + name + text + UNIQUE#1;NOT NULL; + + + + subfield + text + NOT NULL; + + + + + + + + + + + + + + + purchase_order + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + PRIMARY KEY + + + + owner + integer + NOT NULL; + + + + creator + integer + NOT NULL; + + + + editor + integer + NOT NULL; + + + + ordering_agency + integer + NOT NULL; + + + + create_time + timestamp with time zone + NOT NULL; DEFAULT now(); + + + + edit_time + timestamp with time zone + NOT NULL; DEFAULT now(); + + + + provider + integer + NOT NULL; + + + + state + text + NOT NULL; DEFAULT 'new'::text; + + + + order_date + timestamp with time zone + + + + + name + text + NOT NULL; + + + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + + +
+ +
+ Schema action + + + aged_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr_post_code + text + + + + + + + + + + usr_home_ou + integer + + + + NOT NULL; + + + + + + + + usr_profile + integer + + + + NOT NULL; + + + + + + + + usr_birth_year + integer + + + + + + + + + + copy_call_number + integer + + + + NOT NULL; + + + + + + + + copy_location + integer + + + + NOT NULL; + + + + + + + + copy_owning_lib + integer + + + + NOT NULL; + + + + + + + + copy_circ_lib + integer + + + + NOT NULL; + + + + + + + + copy_bib_record + bigint + + + + NOT NULL; + + + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + NOT NULL; + + + + + + + + circ_lib + integer + + + + NOT NULL; + + + + + + + + circ_staff + integer + + + + NOT NULL; + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + NOT NULL; + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + NOT NULL; + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + NOT NULL; + + + + + + + + desk_renewal + boolean + + + + NOT NULL; + + + + + + + + opac_renewal + boolean + + + + NOT NULL; + + + + + + + + duration_rule + text + + + + NOT NULL; + + + + + + + + recuring_fine_rule + text + + + + NOT NULL; + + + + + + + + max_fine_rule + text + + + + NOT NULL; + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + all_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr_post_code + text + + + + + + + + + + usr_home_ou + integer + + + + + + + + + + usr_profile + integer + + + + + + + + + + usr_birth_year + integer + + + + + + + + + + copy_call_number + bigint + + + + + + + + + + copy_location + integer + + + + + + + + + + copy_owning_lib + integer + + + + + + + + + + copy_circ_lib + integer + + + + + + + + + + copy_bib_record + bigint + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + billable_circulations + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + billable_cirulations + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.billable_xact_id_seq'::regclass); + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + circ_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + circ_staff + integer + + + + NOT NULL; + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + NOT NULL; + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + NOT NULL; + + + DEFAULT '1 day'::interval; + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + desk_renewal + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac_renewal + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + duration_rule + text + + + + NOT NULL; + + + + + + + + recuring_fine_rule + text + + + + NOT NULL; + + + + + + + + max_fine_rule + text + + + + NOT NULL; + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + Constraints on circulation + + + circulation_stop_ fines_check + CHECK ((stop_fines = ANY (ARRAY['CHECKIN'::text, 'CLAIMSRETURNED'::text, 'LOST'::text, 'MAXFINES'::text, 'RENEW'::text, 'LONGOVERDUE'::text]))) + + + + + + + + + + + + + hold_copy_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + hold + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + target_copy + bigint + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + hold_notification + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + hold + integer + + + + + + + NOT NULL; + + + + + + + + + + + + notify_staff + integer + + + + + + + + + + + + + + + + + notify_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + method + text + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + hold_request + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + request_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + capture_time + timestamp with time zone + + + + + + + + + + fulfillment_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + return_time + timestamp with time zone + + + + + + + + + + prev_check_time + timestamp with time zone + + + + + + + + + + expire_time + timestamp with time zone + + + + + + + + + + cancel_time + timestamp with time zone + + + + + + + + + + target + bigint + + + + NOT NULL; + + + + + + + + current_copy + bigint + + + + + + + + + + + + + + + + + fulfillment_staff + integer + + + + + + + + + + + + + + + + + fulfillment_lib + integer + + + + + + + + + + + + + + + + + request_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + requestor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + selection_ou + integer + + + + NOT NULL; + + + + + + + + selection_depth + integer + + + + NOT NULL; + + + + + + + + pickup_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + hold_type + text + + + + NOT NULL; + + + + + + + + holdable_formats + text + + + + + + + + + + phone_notify + text + + + + + + + + + + email_notify + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + frozen + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + thaw_date + timestamp with time zone + + + + + + + + + + cancel_cause + integer + + + + + + + + + + cancel_note + text + + + + + + + + + + shelf_time + timestamp with time zone + + + + + + + + + + + + + + + + Constraints on hold_request + + + hold_request_ hold_type_check + CHECK ((hold_type = ANY (ARRAY['M'::text, 'T'::text, 'V'::text, 'C'::text]))) + + + + + + + + + + Tables referencing action.hold_copy_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + hold_request_cancel_cause + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + + + + + + + + + + + + + + + + + + + + hold_transit_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + PRIMARY KEY + + + + + + DEFAULT nextval('transit_copy_id_seq'::regclass); + + + + + + + + + source_send_time + timestamp with time zone + + + + + + + + + + dest_recv_time + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + integer + + + + NOT NULL; + + + + + + + + dest + integer + + + + NOT NULL; + + + + + + + + prev_hop + integer + + + + + + + + + + copy_status + integer + + + + NOT NULL; + + + + + + + + persistant_transfer + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + hold + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + in_house_use + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + use_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + non_cat_in_house_use + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item_type + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + use_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + non_cataloged_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + patron + integer + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + circ_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + item_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + circ_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + open_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + reservation_transit_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + PRIMARY KEY + + + + + + DEFAULT nextval('transit_copy_id_seq'::regclass); + + + + + + + + + source_send_time + timestamp with time zone + + + + + + + + + + dest_recv_time + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + integer + + + + NOT NULL; + + + + + + + + dest + integer + + + + NOT NULL; + + + + + + + + prev_hop + integer + + + + + + + + + + copy_status + integer + + + + NOT NULL; + + + + + + + + persistant_transfer + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + reservation + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + survey + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + start_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + end_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT (now() + '10 years'::interval); + + + + + + + usr_summary + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + poll + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + required + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + name + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action.survey_question via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + survey_answer + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + question + integer + + + + + + + NOT NULL; + + + + + + + + + + + + answer + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action.survey_response via Foreign Key Constraints + + + + + + + + + + + + + + + + survey_question + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + survey + integer + + + + + + + NOT NULL; + + + + + + + + + + + + question + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action.survey_answer via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + survey_response + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + response_group_id + integer + + + + + + + + + + usr + integer + + + + + + + + + + survey + integer + + + + + + + NOT NULL; + + + + + + + + + + + + question + integer + + + + + + + NOT NULL; + + + + + + + + + + + + answer + integer + + + + + + + NOT NULL; + + + + + + + + + + + + answer_date + timestamp with time zone + + + + + + + + + + effective_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + transit_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + source_send_time + timestamp with time zone + + + + + + + + + + dest_recv_time + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + integer + + + + + + + NOT NULL; + + + + + + + + + + + + dest + integer + + + + + + + NOT NULL; + + + + + + + + + + + + prev_hop + integer + + + + + + + + + + + + + + + + + copy_status + integer + + + + + + + NOT NULL; + + + + + + + + + + + + persistant_transfer + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action.transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + unfulfilled_hold_list + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + current_copy + bigint + + + + NOT NULL; + + + + + + + + hold + integer + + + + NOT NULL; + + + + + + + + circ_lib + integer + + + + NOT NULL; + + + + + + + + fail_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + +
+ +
+ Schema action_trigger + + + cleanup + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + + + collector + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.environment via Foreign Key Constraints + + + + + + + + + + + + + + + + environment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + event_def + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + path + text + + + + + + + + + + collector + text + + + + + + + + + + + + + + + + + label + text + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + + + Constraints on environment + + + environment_ label_check + CHECK ((label <> ALL (ARRAY['result'::text, 'target'::text, 'event'::text]))) + + + + + + + + + + + + + event + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + target + bigint + + + + NOT NULL; + + + + + + + + event_def + integer + + + + + + + + + + + + + + + + + add_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + run_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + start_time + timestamp with time zone + + + + + + + + + + update_time + timestamp with time zone + + + + + + + + + + complete_time + timestamp with time zone + + + + + + + + + + update_process + integer + + + + + + + + + + state + text + + + + NOT NULL; + + + DEFAULT 'pending'::text; + + + + + + + template_output + bigint + + + + + + + + + + + + + + + + + error_output + bigint + + + + + + + + + + + + + + + + + + + + + + + Constraints on event + + + event_state_ check + CHECK ((state = ANY (ARRAY['pending'::text, 'invalid'::text, 'found'::text, 'collecting'::text, 'collected'::text, 'validating'::text, 'valid'::text, 'reacting'::text, 'reacted'::text, 'cleaning'::text, 'complete'::text, 'error'::text]))) + + + + + + + + + + + + + event_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + UNIQUE#2 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + hook + text + + + + + UNIQUE#2 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + validator + text + + + + + UNIQUE#2 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + reactor + text + + + + + UNIQUE#2 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + cleanup_success + text + + + + + + + + + + + + + + + + + cleanup_failure + text + + + + + + + + + + + + + + + + + delay + interval + + + + + UNIQUE#2 + ; + + + + NOT NULL; + + + DEFAULT '00:05:00'::interval; + + + + + + + + + max_delay + interval + + + + + + + + + + delay_field + text + + + + + UNIQUE#2 + ; + + + + + + + + + + + + group_field + text + + + + + + + + + + template + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.environment via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + event_output + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + is_error + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + data + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action_trigger.event via Foreign Key Constraints + + + + + + + + + + + + + + + + event_params + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + event_def + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + param + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + hook + + + + + + + + Field + Data Type + Constraints and References + + + + + + key + text + + + + PRIMARY KEY + + + + + + + + + + + + + core_type + text + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + passive + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + + + reactor + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + + + validator + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + +
+ +
+ Schema actor + + + card + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + barcode + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + + + + hours_of_operation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + PRIMARY KEY + + + + + + + + + + + + + + + + + dow_0_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_0_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_1_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_1_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_2_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_2_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_3_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_3_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_4_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_4_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_5_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_5_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_6_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_6_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + + + + + + + + + + + + org_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + valid + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + address_type + text + + + + NOT NULL; + + + DEFAULT 'MAILING'::text; + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing actor.org_unit via Foreign Key Constraints + + + + + + + + + + + + + + + + org_lasso + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + + + + + + + + + + + + + + + + + Tables referencing actor.org_lasso_map via Foreign Key Constraints + + + + + + + + + + + + + + + + org_lasso_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + lasso + integer + + + + + + + NOT NULL; + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + org_unit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent_ou + integer + + + + + + + + + + + + + + + + + ou_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + ill_address + integer + + + + + + + + + + + + + + + + + holds_address + integer + + + + + + + + + + + + + + + + + mailing_address + integer + + + + + + + + + + + + + + + + + billing_address + integer + + + + + + + + + + + + + + + + + shortname + text + + + + NOT NULL; + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + email + text + + + + + + + + + + phone + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing acq.distribution_formula via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org_unit_closed + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + close_start + timestamp with time zone + + + + NOT NULL; + + + + + + + + close_end + timestamp with time zone + + + + NOT NULL; + + + + + + + + reason + text + + + + + + + + + + + + + + + + + + + + + org_unit_proximity + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + from_org + integer + + + + + + + + + + to_org + integer + + + + + + + + + + prox + integer + + + + + + + + + + + + + + + + + + + + + org_unit_setting + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + org_unit_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + opac_label + text + + + + NOT NULL; + + + + + + + + depth + integer + + + + NOT NULL; + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + can_have_vols + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + can_have_users + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing actor.org_unit via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + stat_cat + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing actor.stat_cat_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + stat_cat_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + value + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + stat_cat_entry_usr_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat_entry + text + + + + NOT NULL; + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + target_usr + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + usr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + card + integer + + + + + UNIQUE; + + + + + + + + + + + + profile + integer + + + + + + + NOT NULL; + + + + + + + + + + + + usrname + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + email + text + + + + + + + + + + passwd + text + + + + NOT NULL; + + + + + + + + standing + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + ident_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + ident_value + text + + + + + + + + + + ident_type2 + integer + + + + + + + + + + + + + + + + + ident_value2 + text + + + + + + + + + + net_access_level + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + photo_url + text + + + + + + + + + + prefix + text + + + + + + + + + + first_given_name + text + + + + NOT NULL; + + + + + + + + second_given_name + text + + + + + + + + + + family_name + text + + + + NOT NULL; + + + + + + + + suffix + text + + + + + + + + + + day_phone + text + + + + + + + + + + evening_phone + text + + + + + + + + + + other_phone + text + + + + + + + + + + mailing_address + integer + + + + + + + + + + + + + + + + + billing_address + integer + + + + + + + + + + + + + + + + + home_ou + integer + + + + + + + NOT NULL; + + + + + + + + + + + + dob + timestamp with time zone + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + master_account + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + super_user + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + barred + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + usrgroup + serial + + + + NOT NULL; + + + + + + + + claims_returned_count + integer + + + + NOT NULL; + + + + + + + + credit_forward_balance + numeric(6,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + last_xact_id + text + + + + NOT NULL; + + + DEFAULT 'none'::text; + + + + + + + alert_message + text + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + expire_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT (now() + '3 years'::interval); + + + + + + + alias + text + + + + + + + + + + juvenile + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing acq.fund_allocation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + usr_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + valid + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + within_city_limits + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + address_type + text + + + + NOT NULL; + + + DEFAULT 'MAILING'::text; + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + pending + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + replaces + integer + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + usr_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + title + text + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + usr_org_unit_opt_in + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + opt_in_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + opt_in_ws + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + usr_password_reset + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + uuid + text + + + + NOT NULL; + + + + + + + + usr + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + request_time + timestamp without time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + has_been_reset + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + usr_setting + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + usr_standing_penalty + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + standing_penalty + integer + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + + + + + + + + + + + set_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + stop_date + timestamp with time zone + + + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + workstation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + owning_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + Tables referencing actor.usr_org_unit_opt_in via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema asset + + + call_number + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + editor + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + edit_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + owning_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing asset.call_number_note via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + call_number_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + call_number + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + title + text + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + circ_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + call_number + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + editor + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + NOT NULL; + + + + + + + + + + + + location + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + loan_duration + integer + + + + NOT NULL; + + + + + + + + fine_level + integer + + + + NOT NULL; + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deposit + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + ref + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deposit_amount + numeric(6,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + NOT NULL; + + + + + + + + circ_modifier + text + + + + + + + + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on copy + + + copy_fine_ level_check + CHECK ((fine_level = ANY (ARRAY[1, 2, 3]))) + + + + + + copy_loan_ duration_check + CHECK ((loan_duration = ANY (ARRAY[1, 2, 3]))) + + + + + + + + + + Tables referencing acq.lineitem_detail via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + copy_location + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + owning_lib + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + hold_verify + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + circulate + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing acq.distribution_formula_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + copy_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owning_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + title + text + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy_transparency + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + deposit_amount + numeric(6,2) + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_lib + integer + + + + + + + + + + + + + + + + + loan_duration + integer + + + + + + + + + + fine_level + integer + + + + + + + + + + holdable + boolean + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + ref + boolean + + + + + + + + + + opac_visible + boolean + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + Constraints on copy_transparency + + + copy_transparency_ fine _level_check + CHECK ((fine_level = ANY (ARRAY[1, 2, 3]))) + + + + + + copy_transparency_ loan _duration_check + CHECK ((loan_duration = ANY (ARRAY[1, 2, 3]))) + + + + + + + + + + Tables referencing asset.copy_transparency_map via Foreign Key Constraints + + + + + + + + + + + + + + + + copy_transparency_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + transparency + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_copy + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + stat_cat + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing asset.stat_cat_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + stat_cat_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + value + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing asset.stat_cat_entry_copy_map via Foreign Key Constraints + + + + + + + + + + + + + + + + stat_cat_entry_copy_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + stat_cat_entry + integer + + + + + + + NOT NULL; + + + + + + + + + + + + owning_copy + bigint + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + stat_cat_entry_transparency_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + stat_cat_entry + integer + + + + NOT NULL; + + + + + + + + owning_transparency + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + uri + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + href + text + + + + NOT NULL; + + + + + + + + label + text + + + + + + + + + + use_restriction + text + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing asset.uri_call_number_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + uri_call_number_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + uri + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + call_number + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema auditor + + + actor_org_unit_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + integer + + + + NOT NULL; + + + + + + + + parent_ou + integer + + + + + + + + + + ou_type + integer + + + + NOT NULL; + + + + + + + + ill_address + integer + + + + + + + + + + holds_address + integer + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + shortname + text + + + + NOT NULL; + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + email + text + + + + + + + + + + phone + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + actor_org_unit_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + integer + + + + + + + + + + parent_ou + integer + + + + + + + + + + ou_type + integer + + + + + + + + + + ill_address + integer + + + + + + + + + + holds_address + integer + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + shortname + text + + + + + + + + + + name + text + + + + + + + + + + email + text + + + + + + + + + + phone + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + + + + + + + + + + + + actor_usr_address_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + integer + + + + NOT NULL; + + + + + + + + valid + boolean + + + + NOT NULL; + + + + + + + + within_city_limits + boolean + + + + NOT NULL; + + + + + + + + address_type + text + + + + NOT NULL; + + + + + + + + usr + integer + + + + NOT NULL; + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + pending + boolean + + + + + + + + + + replaces + integer + + + + + + + + + + + + + + + + + + + + + actor_usr_address_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + integer + + + + + + + + + + valid + boolean + + + + + + + + + + within_city_limits + boolean + + + + + + + + + + address_type + text + + + + + + + + + + usr + integer + + + + + + + + + + street1 + text + + + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + + + + + + + county + text + + + + + + + + + + state + text + + + + + + + + + + country + text + + + + + + + + + + post_code + text + + + + + + + + + + + + + + + + + + + + + actor_usr_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + integer + + + + NOT NULL; + + + + + + + + card + integer + + + + + + + + + + profile + integer + + + + NOT NULL; + + + + + + + + usrname + text + + + + NOT NULL; + + + + + + + + email + text + + + + + + + + + + passwd + text + + + + NOT NULL; + + + + + + + + standing + integer + + + + NOT NULL; + + + + + + + + ident_type + integer + + + + NOT NULL; + + + + + + + + ident_value + text + + + + + + + + + + ident_type2 + integer + + + + + + + + + + ident_value2 + text + + + + + + + + + + net_access_level + integer + + + + NOT NULL; + + + + + + + + photo_url + text + + + + + + + + + + prefix + text + + + + + + + + + + first_given_name + text + + + + NOT NULL; + + + + + + + + second_given_name + text + + + + + + + + + + family_name + text + + + + NOT NULL; + + + + + + + + suffix + text + + + + + + + + + + day_phone + text + + + + + + + + + + evening_phone + text + + + + + + + + + + other_phone + text + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + home_ou + integer + + + + NOT NULL; + + + + + + + + dob + timestamp with time zone + + + + + + + + + + active + boolean + + + + NOT NULL; + + + + + + + + master_account + boolean + + + + NOT NULL; + + + + + + + + super_user + boolean + + + + NOT NULL; + + + + + + + + barred + boolean + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + usrgroup + integer + + + + NOT NULL; + + + + + + + + claims_returned_count + integer + + + + NOT NULL; + + + + + + + + credit_forward_balance + numeric(6,2) + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + alert_message + text + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + expire_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + alias + text + + + + + + + + + + juvenile + boolean + + + + + + + + + + + + + + + + + + + + + actor_usr_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + integer + + + + + + + + + + card + integer + + + + + + + + + + profile + integer + + + + + + + + + + usrname + text + + + + + + + + + + email + text + + + + + + + + + + passwd + text + + + + + + + + + + standing + integer + + + + + + + + + + ident_type + integer + + + + + + + + + + ident_value + text + + + + + + + + + + ident_type2 + integer + + + + + + + + + + ident_value2 + text + + + + + + + + + + net_access_level + integer + + + + + + + + + + photo_url + text + + + + + + + + + + prefix + text + + + + + + + + + + first_given_name + text + + + + + + + + + + second_given_name + text + + + + + + + + + + family_name + text + + + + + + + + + + suffix + text + + + + + + + + + + day_phone + text + + + + + + + + + + evening_phone + text + + + + + + + + + + other_phone + text + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + home_ou + integer + + + + + + + + + + dob + timestamp with time zone + + + + + + + + + + active + boolean + + + + + + + + + + master_account + boolean + + + + + + + + + + super_user + boolean + + + + + + + + + + barred + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + usrgroup + integer + + + + + + + + + + claims_returned_count + integer + + + + + + + + + + credit_forward_balance + numeric(6,2) + + + + + + + + + + last_xact_id + text + + + + + + + + + + alert_message + text + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + expire_date + timestamp with time zone + + + + + + + + + + + + + + + + + + + + + asset_call_number_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + bigint + + + + NOT NULL; + + + + + + + + creator + bigint + + + + NOT NULL; + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + editor + bigint + + + + NOT NULL; + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + record + bigint + + + + NOT NULL; + + + + + + + + owning_lib + integer + + + + NOT NULL; + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + asset_call_number_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + bigint + + + + + + + + + + creator + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + editor + bigint + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + record + bigint + + + + + + + + + + owning_lib + integer + + + + + + + + + + label + text + + + + + + + + + + deleted + boolean + + + + + + + + + + + + + + + + + + + + + asset_copy_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + bigint + + + + NOT NULL; + + + + + + + + circ_lib + integer + + + + NOT NULL; + + + + + + + + creator + bigint + + + + NOT NULL; + + + + + + + + call_number + bigint + + + + NOT NULL; + + + + + + + + editor + bigint + + + + NOT NULL; + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + NOT NULL; + + + + + + + + location + integer + + + + NOT NULL; + + + + + + + + loan_duration + integer + + + + NOT NULL; + + + + + + + + fine_level + integer + + + + NOT NULL; + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + NOT NULL; + + + + + + + + deposit + boolean + + + + NOT NULL; + + + + + + + + ref + boolean + + + + NOT NULL; + + + + + + + + holdable + boolean + + + + NOT NULL; + + + + + + + + deposit_amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + NOT NULL; + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + asset_copy_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + creator + bigint + + + + + + + + + + call_number + bigint + + + + + + + + + + editor + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + + + + location + integer + + + + + + + + + + loan_duration + integer + + + + + + + + + + fine_level + integer + + + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + ref + boolean + + + + + + + + + + holdable + boolean + + + + + + + + + + deposit_amount + numeric(6,2) + + + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + + + + + + + + + + + + biblio_record_entry_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + bigint + + + + NOT NULL; + + + + + + + + creator + integer + + + + NOT NULL; + + + + + + + + editor + integer + + + + NOT NULL; + + + + + + + + source + integer + + + + + + + + + + quality + integer + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + active + boolean + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + fingerprint + text + + + + + + + + + + tcn_source + text + + + + NOT NULL; + + + + + + + + tcn_value + text + + + + NOT NULL; + + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + biblio_record_entry_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + bigint + + + + + + + + + + creator + integer + + + + + + + + + + editor + integer + + + + + + + + + + source + integer + + + + + + + + + + quality + integer + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + active + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + fingerprint + text + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + marc + text + + + + + + + + + + last_xact_id + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema authority + + + full_rec + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + NOT NULL; + + + + + + + + tag + character(3) + + + + NOT NULL; + + + + + + + + ind1 + text + + + + + + + + + + ind2 + text + + + + + + + + + + subfield + text + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + rec_descriptor + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + + + + record_status + text + + + + + + + + + + char_encoding + text + + + + + + + + + + + + + + + + + + + + + record_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + arn_source + text + + + + NOT NULL; + + + DEFAULT 'AUTOGEN'::text; + + + + + + + arn_value + text + + + + NOT NULL; + + + + + + + + creator + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + editor + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + source + integer + + + + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing authority.record_note via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + record_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + creator + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + editor + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + tracing_links + + + + + + + + Field + Data Type + Constraints and References + + + + + + record + bigint + + + + + + + + + + main_id + bigint + + + + + + + + + + main_tag + character(3) + + + + + + + + + + main_value + text + + + + + + + + + + relationship + text + + + + + + + + + + use_restriction + text + + + + + + + + + + deprecation + text + + + + + + + + + + display_restriction + text + + + + + + + + + + link_id + bigint + + + + + + + + + + link_tag + character(3) + + + + + + + + + + link_value + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema biblio + + + record_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + source + integer + + + + + + + + + + quality + integer + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + fingerprint + text + + + + + + + + + + tcn_source + text + + + + NOT NULL; + + + DEFAULT 'AUTOGEN'::text; + + + + + + + tcn_value + text + + + + NOT NULL; + + + DEFAULT next_autogen_tcn_value(); + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + record_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + +
+ +
+ Schema booking + + + reservation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.billable_xact_id_seq'::regclass); + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + request_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + start_time + timestamp with time zone + + + + + + + + + + end_time + timestamp with time zone + + + + + + + + + + capture_time + timestamp with time zone + + + + + + + + + + cancel_time + timestamp with time zone + + + + + + + + + + pickup_time + timestamp with time zone + + + + + + + + + + return_time + timestamp with time zone + + + + + + + + + + booking_interval + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + fine_amount + numeric(8,2) + + + + + + + + + + target_resource_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_resource + integer + + + + + + + + + + + + + + + + + current_resource + integer + + + + + + + + + + + + + + + + + request_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + pickup_lib + integer + + + + + + + + + + + + + + + + + capture_staff + integer + + + + + + + + + + + + + + + + + max_fine + numeric(8,2) + + + + + + + + + + + + + + + + + + Tables referencing action.reservation_transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + reservation_attr_value_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + reservation + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + attr_value + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + resource + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + overbook + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + barcode + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + deposit + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + deposit_amount + numeric(8,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + user_fee + numeric(8,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + + + + + + + + + Tables referencing action.reservation_transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + resource_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + resource_type + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + required + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing booking.resource_attr_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + resource_attr_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + resource + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + resource_attr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + value + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + resource_attr_value + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + attr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + valid_value + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing booking.reservation_attr_value_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + resource_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + fine_interval + interval + + + + + + + + + + fine_amount + numeric(8,2) + + + + NOT NULL; + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + catalog_item + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + transferable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + record + bigint + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + + + + max_fine + numeric(8,2) + + + + + + + + + + elbow_room + interval + + + + + + + + + + + + + + + + + + Tables referencing booking.reservation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema config + + + audience_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + + + + + + + + + + + + bib_level_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + bib_source + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + quality + integer + + + + + + + + + + source + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + transcendant + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on bib_source + + + bib_source_ quality_check + CHECK (((quality >= 0) AND (quality <= 100))) + + + + + + + + + + Tables referencing vandelay.queued_bib_record via Foreign Key Constraints + + + + + + + + + + + + + + + + billing_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + default_price + numeric(6,2) + + + + + + + + + + + + + + + + + + Tables referencing money.billing via Foreign Key Constraints + + + + + + + + + + + + + + + + circ_matrix_circ_mod_test + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + matchpoint + integer + + + + + + + NOT NULL; + + + + + + + + + + + + items_out + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_circ_mod_test_map via Foreign Key Constraints + + + + + + + + + + + + + + + + circ_matrix_circ_mod_test_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + circ_mod_test + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_mod + text + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + circ_matrix_matchpoint + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + org_unit + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_modifier + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_type + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_form + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_vr_format + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + ref_flag + boolean + + + + + UNIQUE#1 + ; + + + + + + + + + + + + is_renewal + boolean + + + + + UNIQUE#1 + ; + + + + + + + + + + + + usr_age_lower_bound + interval + + + + + UNIQUE#1 + ; + + + + + + + + + + + + usr_age_upper_bound + interval + + + + + UNIQUE#1 + ; + + + + + + + + + + + + juvenile_flag + boolean + + + + + UNIQUE#1 + ; + + + + + + + + + + + + circulate + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + duration_rule + integer + + + + + + + NOT NULL; + + + + + + + + + + + + recurring_fine_rule + integer + + + + + + + NOT NULL; + + + + + + + + + + + + max_fine_rule + integer + + + + + + + NOT NULL; + + + + + + + + + + + + script_test + text + + + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_circ_mod_test via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + circ_matrix_test + + + + + + + + Field + Data Type + Constraints and References + + + + + + matchpoint + integer + + + + + + + PRIMARY KEY + + + + + + + + + + + + + + + + + circulate + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + max_items_out + integer + + + + + + + + + + max_overdue + integer + + + + + + + + + + max_fines + numeric(8,2) + + + + + + + + + + org_depth + integer + + + + + + + + + + script_test + text + + + + + + + + + + + + + + + + + + + + + circ_modifier + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + sip2_media_type + text + + + + NOT NULL; + + + + + + + + magnetic_media + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing acq.lineitem_detail via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + copy_status + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action.transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + hold_matrix_matchpoint + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + user_home_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + request_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + pickup_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + item_owning_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + item_circ_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + usr_grp + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + requestor_grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_modifier + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_type + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_form + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_vr_format + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + ref_flag + boolean + + + + + + + + + + juvenile_flag + boolean + + + + + + + + + + age_hold_protect_rule + integer + + + + + + + + + + + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + distance_is_from_owner + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + transit_range + integer + + + + + + + + + + + + + + + + + max_holds + integer + + + + + + + + + + include_frozen_holds + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + stop_blocked_user + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing config.hold_matrix_test via Foreign Key Constraints + + + + + + + + + + + + + + + + hold_matrix_test + + + + + + + + Field + Data Type + Constraints and References + + + + + + matchpoint + integer + + + + + + + PRIMARY KEY + + + + + + + + + + + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + distance_is_from_owner + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + transit_range + integer + + + + + + + + + + + + + + + + + max_holds + integer + + + + + + + + + + include_frozen_holds + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + stop_blocked_user + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + age_hold_protect_rule + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + i18n_core + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + fq_field + text + + + + NOT NULL; + + + + + + + + identity_value + text + + + + NOT NULL; + + + + + + + + translation + text + + + + + + + NOT NULL; + + + + + + + + + + + + string + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + i18n_locale + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + marc_code + text + + + + + + + NOT NULL; + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing config.i18n_core via Foreign Key Constraints + + + + + + + + + + + + + + + + identification_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + idl_field_doc + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + fm_class + text + + + + NOT NULL; + + + + + + + + field + text + + + + NOT NULL; + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + string + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + item_form_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + item_type_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + language_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.i18n_locale via Foreign Key Constraints + + + + + + + + + + + + + + + + lit_form_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + + + + + + + + + + + + metabib_field + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + field_class + text + + + + NOT NULL; + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + weight + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + format + text + + + + NOT NULL; + + + DEFAULT 'mods32'::text; + + + + + + + search_field + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + facet_field + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on metabib_field + + + metabib_field_ field_class_check + CHECK ((lower(field_class) = ANY (ARRAY['title'::text, 'author'::text, 'subject'::text, 'keyword'::text, 'series'::text]))) + + + + + + + + + + Tables referencing metabib.author_field_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + net_access_level + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + non_cataloged_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owning_lib + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + circ_duration + interval + + + + NOT NULL; + + + DEFAULT '14 days'::interval; + + + + + + + in_house + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action.non_cat_in_house_use via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + rule_age_hold_protect + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + age + interval + + + + NOT NULL; + + + + + + + + prox + integer + + + + NOT NULL; + + + + + + + + + + + + + + Constraints on rule_age_hold_protect + + + rule_age_hold_ protect_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.hold_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + rule_circ_duration + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + extended + interval + + + + NOT NULL; + + + + + + + + normal + interval + + + + NOT NULL; + + + + + + + + shrt + interval + + + + NOT NULL; + + + + + + + + max_renewals + integer + + + + NOT NULL; + + + + + + + + + + + + + + Constraints on rule_circ_duration + + + rule_circ_ duration_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + rule_max_fine + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + is_percent + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on rule_max_fine + + + rule_max_ fine_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + rule_recuring_fine + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + high + numeric(6,2) + + + + NOT NULL; + + + + + + + + normal + numeric(6,2) + + + + NOT NULL; + + + + + + + + low + numeric(6,2) + + + + NOT NULL; + + + + + + + + recurance_interval + interval + + + + NOT NULL; + + + DEFAULT '1 day'::interval; + + + + + + + + + + + + + Constraints on rule_recuring_fine + + + rule_recuring_ fine_ name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + standing + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + standing_penalty + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + block_list + text + + + + + + + + + + + + + + + + + + Tables referencing actor.usr_standing_penalty via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + upgrade_log + + + + + + + + Field + Data Type + Constraints and References + + + + + + version + text + + + + PRIMARY KEY + + + + + + + + + + + + + install_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + videorecording_format_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + xml_transform + + + + + + + + Field + Data Type + Constraints and References + + + + + + name + text + + + + PRIMARY KEY + + + + + + + + + + + + + namespace_uri + text + + + + NOT NULL; + + + + + + + + prefix + text + + + + NOT NULL; + + + + + + + + xslt + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + z3950_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + source + text + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + code + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + format + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + truncation + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + z3950_source + + + + + + + + Field + Data Type + Constraints and References + + + + + + name + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + host + text + + + + NOT NULL; + + + + + + + + port + integer + + + + NOT NULL; + + + + + + + + db + text + + + + NOT NULL; + + + + + + + + record_format + text + + + + NOT NULL; + + + DEFAULT 'FI'::text; + + + + + + + transmission_format + text + + + + NOT NULL; + + + DEFAULT 'usmarc'::text; + + + + + + + auth + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing config.z3950_attr via Foreign Key Constraints + + + + + + + + + + + + + + +
+ +
+ Schema container + + + biblio_record_entry_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.biblio_record_entry_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + biblio_record_entry_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_biblio_record_entry + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + pos + integer + + + + + + + + + + + + + + + + + + Tables referencing container.biblio_record_entry_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + biblio_record_entry_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + biblio_record_entry_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + biblio_record_entry_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + call_number_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.call_number_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + call_number_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_call_number + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + pos + integer + + + + + + + + + + + + + + + + + + Tables referencing container.call_number_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + call_number_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + call_number_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + call_number_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + copy_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.copy_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + copy_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_copy + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + pos + integer + + + + + + + + + + + + + + + + + + Tables referencing container.copy_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + copy_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + user_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.user_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + user_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_user + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + pos + integer + + + + + + + + + + + + + + + + + + Tables referencing container.user_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + user_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + user_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + user_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema extend_reporter + + + full_circ_count + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + circ_count + bigint + + + + + + + + + + + + + + + + + + + + + global_bibs_by_holding_update + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + holding_update + timestamp with time zone + + + + + + + + + + update_type + text + + + + + + + + + + + + + + + + + + + + + legacy_circ_count + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + PRIMARY KEY + + + + + + + + + + + + + + + + + circ_count + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema metabib + + + author_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + full_rec + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + record + bigint + + + + + + + + + + tag + character(3) + + + + + + + + + + ind1 + text + + + + + + + + + + ind2 + text + + + + + + + + + + subfield + text + + + + + + + + + + value + text + + + + + + + + + + index_vector + public.tsvector + + + + + + + + + + + + + + + + + + + + + keyword_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + metarecord + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + fingerprint + text + + + + NOT NULL; + + + + + + + + master_record + bigint + + + + + + + + + + + + + + + + + mods + text + + + + + + + + + + + + + + + + + + Tables referencing metabib.metarecord_source_map via Foreign Key Constraints + + + + + + + + + + + + + + + + metarecord_source_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + metarecord + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + real_full_rec + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('full_rec_id_seq'::regclass); + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + tag + character(3) + + + + NOT NULL; + + + + + + + + ind1 + text + + + + + + + + + + ind2 + text + + + + + + + + + + subfield + text + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + rec_descriptor + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + bib_level + text + + + + + + + + + + control_type + text + + + + + + + + + + char_encoding + text + + + + + + + + + + enc_level + text + + + + + + + + + + audience + text + + + + + + + + + + lit_form + text + + + + + + + + + + type_mat + text + + + + + + + + + + cat_form + text + + + + + + + + + + pub_status + text + + + + + + + + + + item_lang + text + + + + + + + + + + vr_format + text + + + + + + + + + + date1 + text + + + + + + + + + + date2 + text + + + + + + + + + + + + + + + + + + + + + series_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + NOT NULL; + + + + + + + + field + integer + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + subject_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + title_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema money + + + billable_xact + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + + + + + + + + + + + + billable_xact_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + billable_xact_with_void_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + billing + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + billing_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + voider + integer + + + + + + + + + + void_time + timestamp with time zone + + + + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + billing_type + text + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + btype + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + bnm_desk_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + bnm_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + bnm_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + + + + + + + accepting_usr + integer + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + cash_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + + + + + + + + + + + + cashdrawer_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + org_unit + integer + + + + + + + + + + cashdrawer + integer + + + + + + + + + + payment_type + name + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + voided + boolean + + + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + check_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + check_number + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + collections_tracker + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + collector + integer + + + + + + + NOT NULL; + + + + + + + + + + + + location + integer + + + + + + + NOT NULL; + + + + + + + + + + + + enter_time + timestamp with time zone + + + + + + + + + + + + + + + + + + + + + credit_card_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + cc_type + text + + + + + + + + + + cc_number + text + + + + + + + + + + expire_month + integer + + + + + + + + + + expire_year + integer + + + + + + + + + + approval_code + text + + + + + + + + + + + + + + + + + + + + + credit_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + desk_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + + + + + + + accepting_usr + integer + + + + + + + + + + cash_drawer + integer + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + forgive_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + goods_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + grocery + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('billable_xact_id_seq'::regclass); + + + + + + + + + usr + integer + + + + NOT NULL; + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + billing_location + integer + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + materialized_billable_xact_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + non_drawer_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + + + + + + + accepting_usr + integer + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + open_billable_xact_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + billing_location + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + open_transaction_billing_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + open_transaction_billing_type_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + open_transaction_payment_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_payment_type + name + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + + + + + + + + + + + + open_usr_circulation_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + open_usr_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + transaction_billing_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + transaction_billing_type_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + transaction_billing_with_void_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + transaction_payment_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_payment_type + name + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + + + + + + + + + + + + transaction_payment_with_void_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_payment_type + name + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + + + + + + + + + + + + usr_circulation_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + usr_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + work_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema offline + + + script + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + session + text + + + + NOT NULL; + + + + + + + + requestor + integer + + + + NOT NULL; + + + + + + + + create_time + integer + + + + NOT NULL; + + + + + + + + workstation + text + + + + NOT NULL; + + + + + + + + logfile + text + + + + NOT NULL; + + + + + + + + time_delta + integer + + + + NOT NULL; + + + + + + + + count + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + session + + + + + + + + Field + Data Type + Constraints and References + + + + + + key + text + + + + PRIMARY KEY + + + + + + + + + + + + + org + integer + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + creator + integer + + + + NOT NULL; + + + + + + + + create_time + integer + + + + NOT NULL; + + + + + + + + in_process + integer + + + + NOT NULL; + + + + + + + + start_time + integer + + + + + + + + + + end_time + integer + + + + + + + + + + num_complete + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema permission + + + grp_penalty_threshold + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + org_unit + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + penalty + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + threshold + numeric(8,2) + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + grp_perm_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + perm + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + depth + integer + + + + NOT NULL; + + + + + + + + grantable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + grp_tree + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + usergroup + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + perm_interval + interval + + + + NOT NULL; + + + DEFAULT '3 years'::interval; + + + + + + + description + text + + + + + + + + + + application_perm + text + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + perm_list + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + code + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing permission.grp_perm_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + usr_grp_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + usr_object_perm_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + perm + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + object_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + object_id + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + grantable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + usr_perm_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + perm + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + depth + integer + + + + NOT NULL; + + + + + + + + grantable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + usr_work_ou_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + work_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + +
+
+ Schema reporter + + + circ_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + type + text + + + + + + + + + + + + + + + + + + + + + currently_running + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + runner_barcode + text + + + + + + + + + + name + text + + + + + + + + + + run_time + timestamp with time zone + + + + + + + + + + scheduled_wait_time + interval + + + + + + + + + + + + + + + + + + + + + demographic + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + dob + timestamp with time zone + + + + + + + + + + general_division + text + + + + + + + + + + + + + + + + + + + + + hold_request_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + target + bigint + + + + + + + + + + hold_type + text + + + + + + + + + + bib_record + bigint + + + + + + + + + + + + + + + + + + + + + materialized_simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + + + + + + + + + + + + old_super_simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + + + + + + + + + + + + output_folder + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + shared + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + share_with + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.output_folder via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + overdue_circs + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + overdue_reports + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + runner_barcode + text + + + + + + + + + + name + text + + + + + + + + + + run_time + timestamp with time zone + + + + + + + + + + scheduled_wait_time + interval + + + + + + + + + + + + + + + + + + + + + pending_reports + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + runner_barcode + text + + + + + + + + + + name + text + + + + + + + + + + run_time + timestamp with time zone + + + + + + + + + + scheduled_wait_time + interval + + + + + + + + + + + + + + + + + + + + + report + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + description + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + template + integer + + + + + + + NOT NULL; + + + + + + + + + + + + data + text + + + + NOT NULL; + + + + + + + + folder + integer + + + + + + + NOT NULL; + + + + + + + + + + + + recur + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + recurance + interval + + + + + + + + + + + + + + + + + + Tables referencing reporter.schedule via Foreign Key Constraints + + + + + + + + + + + + + + + + report_folder + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + shared + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + share_with + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.report via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + schedule + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + report + integer + + + + + + + NOT NULL; + + + + + + + + + + + + folder + integer + + + + + + + NOT NULL; + + + + + + + + + + + + runner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + run_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + start_time + timestamp with time zone + + + + + + + + + + complete_time + timestamp with time zone + + + + + + + + + + email + text + + + + + + + + + + excel_format + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + html_format + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + csv_format + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + chart_pie + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + chart_bar + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + chart_line + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + error_code + integer + + + + + + + + + + error_text + text + + + + + + + + + + + + + + + + + + + + + simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + metarecord + bigint + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + uniform_title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + series_title + text + + + + + + + + + + series_statement + text + + + + + + + + + + summary + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + topic_subject + text[] + + + + + + + + + + geographic_subject + text[] + + + + + + + + + + genre + text[] + + + + + + + + + + name_subject + text[] + + + + + + + + + + corporate_subject + text[] + + + + + + + + + + external_uri + text[] + + + + + + + + + + + + + + + + + + + + + super_simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + + + + + + + + + + + + template + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + data + text + + + + NOT NULL; + + + + + + + + folder + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.report via Foreign Key Constraints + + + + + + + + + + + + + + + + template_folder + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + shared + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + share_with + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.template via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + xact_billing_totals + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + unvoided + numeric + + + + + + + + + + voided + numeric + + + + + + + + + + total + numeric + + + + + + + + + + + + + + + + + + + + + xact_paid_totals + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + unvoided + numeric + + + + + + + + + + voided + numeric + + + + + + + + + + total + numeric + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema search + + + relevance_adjustment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + bump_type + text + + + + NOT NULL; + + + + + + + + multiplier + numeric + + + + NOT NULL; + + + DEFAULT 1.0; + + + + + + + + + + + + + Constraints on relevance_adjustment + + + relevance_adjustment_ bump _type_check + CHECK ((bump_type = ANY (ARRAY['word_order'::text, 'first_word'::text, 'full_match'::text]))) + + + + + + + + + + + +
+ +
+ Schema serial + + + bib_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + generated_coverage + text + + + + NOT NULL; + + + + + + + + textual_holdings + text + + + + + + + + + + + + + + + + + + + + + binding_unit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + label + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing serial.issuance via Foreign Key Constraints + + + + + + + + + + + + + + + + index_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + generated_coverage + text + + + + NOT NULL; + + + + + + + + textual_holdings + text + + + + + + + + + + + + + + + + + + + + + issuance + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_copy + bigint + + + + + + + + + + + + + + + + + location + bigint + + + + + + + + + + + + + + + + + binding_unit + integer + + + + + + + + + + + + + + + + + label + text + + + + + + + + + + + + + + + + + + + + + record_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + + + + + + + + + + + owning_lib + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + creator + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + editor + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + source + integer + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + subscription + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + callnumber + bigint + + + + + + + + + + + + + + + + + uri + integer + + + + + + + + + + + + + + + + + start_date + date + + + + NOT NULL; + + + + + + + + end_date + date + + + + + + + + + + + + + + + + + + Tables referencing serial.bib_summary via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sup_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + generated_coverage + text + + + + NOT NULL; + + + + + + + + textual_holdings + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema stats + + + fleshed_call_number + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + creator + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + editor + bigint + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + record + bigint + + + + + + + + + + owning_lib + integer + + + + + + + + + + label + text + + + + + + + + + + deleted + boolean + + + + + + + + + + create_date_day + date + + + + + + + + + + edit_date_day + date + + + + + + + + + + create_date_hour + timestamp with time zone + + + + + + + + + + edit_date_hour + timestamp with time zone + + + + + + + + + + item_lang + text + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + + + + + + + + + + + + fleshed_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + start_date_day + date + + + + + + + + + + finish_date_day + date + + + + + + + + + + start_date_hour + timestamp with time zone + + + + + + + + + + finish_date_hour + timestamp with time zone + + + + + + + + + + call_number_label + text + + + + + + + + + + owning_lib + integer + + + + + + + + + + item_lang + text + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + + + + + + + + + + + + fleshed_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + creator + bigint + + + + + + + + + + call_number + bigint + + + + + + + + + + editor + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + + + + location + integer + + + + + + + + + + loan_duration + integer + + + + + + + + + + fine_level + integer + + + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + ref + boolean + + + + + + + + + + holdable + boolean + + + + + + + + + + deposit_amount + numeric(6,2) + + + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + create_date_day + date + + + + + + + + + + edit_date_day + date + + + + + + + + + + create_date_hour + timestamp with time zone + + + + + + + + + + edit_date_hour + timestamp with time zone + + + + + + + + + + call_number_label + text + + + + + + + + + + owning_lib + integer + + + + + + + + + + item_lang + text + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema vandelay + + + authority_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + code + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing vandelay.queued_authority_record_attr via Foreign Key Constraints + + + + + + + + + + + + + + + + authority_match + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + matched_attr + integer + + + + + + + + + + + + + + + + + queued_record + bigint + + + + + + + + + + + + + + + + + eg_record + bigint + + + + + + + + + + + + + + + + + + + + + + + + + + + + authority_queue + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('queue_id_seq'::regclass); + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + complete + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + queue_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'authority'::text; + + + + + + + + + + + + + + + Constraints on authority_queue + + + authority_queue_queue _type_check + CHECK ((queue_type = 'authority'::text)) + + + + + + queue_queue_ type_check + CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text]))) + + + + + + + + + + Tables referencing vandelay.queued_authority_record via Foreign Key Constraints + + + + + + + + + + + + + + + + bib_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + code + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing vandelay.queued_bib_record_attr via Foreign Key Constraints + + + + + + + + + + + + + + + + bib_match + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + field_type + text + + + + NOT NULL; + + + + + + + + matched_attr + integer + + + + + + + + + + + + + + + + + queued_record + bigint + + + + + + + + + + + + + + + + + eg_record + bigint + + + + + + + + + + + + + + + + + + + + + + + Constraints on bib_match + + + bib_match_field _type_check + CHECK ((field_type = ANY (ARRAY['isbn'::text, 'tcn_value'::text, 'id'::text]))) + + + + + + + + + + + + + bib_queue + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('queue_id_seq'::regclass); + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + complete + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + queue_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'bib'::text; + + + + + + + + + item_attr_def + bigint + + + + + + + + + + + + + + + + + + + + + + + Constraints on bib_queue + + + bib_queue_queue _type_check + CHECK ((queue_type = 'bib'::text)) + + + + + + queue_queue_ type_check + CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text]))) + + + + + + + + + + Tables referencing vandelay.queued_bib_record via Foreign Key Constraints + + + + + + + + + + + + + + + + import_bib_trash_fields + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + field + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + import_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + definition + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + owning_lib + integer + + + + + + + + + + circ_lib + integer + + + + + + + + + + call_number + text + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + + + + location + integer + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + deposit_amount + numeric(8,2) + + + + + + + + + + ref + boolean + + + + + + + + + + holdable + boolean + + + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + alert_message + text + + + + + + + + + + pub_note + text + + + + + + + + + + priv_note + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + + + + + + + + + + + + import_item_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + tag + text + + + + NOT NULL; + + + + + + + + keep + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + owning_lib + text + + + + + + + + + + circ_lib + text + + + + + + + + + + call_number + text + + + + + + + + + + copy_number + text + + + + + + + + + + status + text + + + + + + + + + + location + text + + + + + + + + + + circulate + text + + + + + + + + + + deposit + text + + + + + + + + + + deposit_amount + text + + + + + + + + + + ref + text + + + + + + + + + + holdable + text + + + + + + + + + + price + text + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + text + + + + + + + + + + pub_note_title + text + + + + + + + + + + pub_note + text + + + + + + + + + + priv_note_title + text + + + + + + + + + + priv_note + text + + + + + + + + + + + + + + + + + + Tables referencing vandelay.bib_queue via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + queue + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + complete + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + queue_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'bib'::text; + + + + + + + + + + + + + + + Constraints on queue + + + queue_queue _type_check + CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text]))) + + + + + + + + + + + + + queued_authority_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('queued_record_id_seq'::regclass); + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + import_time + timestamp with time zone + + + + + + + + + + purpose + text + + + + NOT NULL; + + + DEFAULT 'import'::text; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + queue + integer + + + + + + + NOT NULL; + + + + + + + + + + + + imported_as + integer + + + + + + + + + + + + + + + + + + + + + + + Constraints on queued_authority_record + + + queued_record _purpose_check + CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text]))) + + + + + + + + + + Tables referencing vandelay.authority_match via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + queued_authority_record_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + attr_value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing vandelay.authority_match via Foreign Key Constraints + + + + + + + + + + + + + + + + queued_bib_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('queued_record_id_seq'::regclass); + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + import_time + timestamp with time zone + + + + + + + + + + purpose + text + + + + NOT NULL; + + + DEFAULT 'import'::text; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + queue + integer + + + + + + + NOT NULL; + + + + + + + + + + + + bib_source + integer + + + + + + + + + + + + + + + + + imported_as + integer + + + + + + + + + + + + + + + + + + + + + + + Constraints on queued_bib_record + + + queued_record_ purpose_check + CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text]))) + + + + + + + + + + Tables referencing vandelay.bib_match via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + queued_bib_record_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + attr_value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing vandelay.bib_match via Foreign Key Constraints + + + + + + + + + + + + + + + + queued_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + import_time + timestamp with time zone + + + + + + + + + + purpose + text + + + + NOT NULL; + + + DEFAULT 'import'::text; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + + + + + + + Constraints on queued_record + + + queued_record_ purpose_check + CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text]))) + + + + + + + + + + + +
+ +
+ diff --git a/appendices/schema1.6.1.2.xml b/appendices/schema1.6.1.2.xml new file mode 100644 index 0000000000..7256c916c0 --- /dev/null +++ b/appendices/schema1.6.1.2.xml @@ -0,0 +1,47701 @@ + + + Database Schema + This is the schema for the Evergreen database. + +
+ Schema acq + + + currency_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + + + + + + + + + + + + + + Tables referencing acq.exchange_rate via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + distribution_formula + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + skip_count + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing acq.distribution_formula_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + distribution_formula_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + formula + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + position + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + item_count + integer + + + + NOT NULL; + + + + + + + + owning_lib + integer + + + + + + + + + + + + + + + + + location + integer + + + + + + + + + + + + + + + + + + + + + + + Constraints on distribution_formula_entry + + + acqdfe_must_be_somewhere + CHECK (((owning_lib IS NOT NULL) OR (location IS NOT NULL))) + + + + + + + + + + + + + exchange_rate + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + from_currency + text + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + to_currency + text + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + ratio + numeric + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + fiscal_calendar + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing acq.fiscal_year via Foreign Key Constraints + + + + + + + + + + + + + + + + fiscal_year + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + calendar + integer + + + + + UNIQUE#1 + ; + + + + + UNIQUE#2 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + year + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + year_begin + timestamp with time zone + + + + + UNIQUE#2 + ; + + + + NOT NULL; + + + + + + + + + + year_end + timestamp with time zone + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + fund + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + org + integer + + + + + UNIQUE#1 + ; + + + + + + + + UNIQUE#2 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + name + text + + + + + UNIQUE#2 + ; + + + + NOT NULL; + + + + + + + + + + year + integer + + + + + UNIQUE#1 + ; + + + + + UNIQUE#2 + ; + + + + NOT NULL; + + + DEFAULT date_part('year'::text, now()); + + + + + + + + + + + currency_type + text + + + + + + + NOT NULL; + + + + + + + + + + + + code + text + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + + + + + Tables referencing acq.fund_allocation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fund_allocation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + funding_source + integer + + + + + + + NOT NULL; + + + + + + + + + + + + fund + integer + + + + + + + NOT NULL; + + + + + + + + + + + + amount + numeric + + + + + + + + + + percent + numeric + + + + + + + + + + allocator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + Constraints on fund_allocation + + + allocation_amount_or_percent + CHECK ((((percent IS NULL) AND (amount IS NOT NULL)) OR ((percent IS NOT NULL) AND (amount IS NULL)))) + + + + + + fund_allocation_percent_check + CHECK (((percent IS NULL) OR ((percent >= 0.0) AND (percent <= 100.0)))) + + + + + + + + + + + + + fund_allocation_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + amount + numeric(100,2) + + + + + + + + + + + + + + + + + + + + + fund_combined_balance + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + fund_debit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + fund + integer + + + + + + + NOT NULL; + + + + + + + + + + + + origin_amount + numeric + + + + NOT NULL; + + + + + + + + origin_currency_type + text + + + + + + + NOT NULL; + + + + + + + + + + + + amount + numeric + + + + NOT NULL; + + + + + + + + encumbrance + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + debit_type + text + + + + NOT NULL; + + + + + + + + xfer_destination + integer + + + + + + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing acq.lineitem_detail via Foreign Key Constraints + + + + + + + + + + + + + + + + fund_debit_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + encumbrance + boolean + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + fund_encumbrance_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + fund_spent_balance + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + fund_spent_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + fund_tag + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing acq.fund_tag_map via Foreign Key Constraints + + + + + + + + + + + + + + + + fund_tag_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + fund + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + tag + integer + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + funding_source + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + currency_type + text + + + + + + + NOT NULL; + + + + + + + + + + + + code + text + + + + + UNIQUE; + + + + + + + + + + + + + + + + + + + + Tables referencing acq.fund_allocation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + funding_source_allocation_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + funding_source + integer + + + + + + + + + + amount + numeric(100,2) + + + + + + + + + + + + + + + + + + + + + funding_source_balance + + + + + + + + Field + Data Type + Constraints and References + + + + + + funding_source + integer + + + + + + + + + + amount + numeric(100,2) + + + + + + + + + + + + + + + + + + + + + funding_source_credit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + funding_source + integer + + + + + + + NOT NULL; + + + + + + + + + + + + amount + numeric + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + funding_source_credit_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + funding_source + integer + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + lineitem + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + selector + integer + + + + + + + NOT NULL; + + + + + + + + + + + + provider + integer + + + + + + + + + + + + + + + + + purchase_order + integer + + + + + + + + + + + + + + + + + picklist + integer + + + + + + + + + + + + + + + + + expected_recv_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + eg_bib_id + integer + + + + + + + + + + + + + + + + + source_label + text + + + + + + + + + + item_count + integer + + + + NOT NULL; + + + + + + + + state + text + + + + NOT NULL; + + + DEFAULT 'new'::text; + + + + + + + + + + + + + Constraints on lineitem + + + picklist_or_po + CHECK (((picklist IS NOT NULL) OR (purchase_order IS NOT NULL))) + + + + + + + + + + Tables referencing acq.lineitem_attr via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + lineitem_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + definition + bigint + + + + NOT NULL; + + + + + + + + lineitem + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + attr_type + text + + + + NOT NULL; + + + + + + + + attr_name + text + + + + NOT NULL; + + + + + + + + attr_value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + lineitem_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + lineitem_detail + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + lineitem + integer + + + + + + + NOT NULL; + + + + + + + + + + + + fund + integer + + + + + + + + + + + + + + + + + fund_debit + integer + + + + + + + + + + + + + + + + + eg_copy_id + bigint + + + + + + + + + + + + + + + + + barcode + text + + + + + + + + + + cn_label + text + + + + + + + + + + note + text + + + + + + + + + + collection_code + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + + + + + + + + owning_lib + integer + + + + + + + + + + + + + + + + + location + integer + + + + + + + + + + + + + + + + + recv_time + timestamp with time zone + + + + + + + + + + + + + + + + + + + + + lineitem_generated_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('lineitem_attr_definition_id_seq'::regclass); + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + lineitem_local_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('lineitem_attr_definition_id_seq'::regclass); + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + lineitem_marc_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('lineitem_attr_definition_id_seq'::regclass); + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + lineitem_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + lineitem + integer + + + + + + + NOT NULL; + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + lineitem_provider_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('lineitem_attr_definition_id_seq'::regclass); + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + provider + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + lineitem_usr_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('lineitem_attr_definition_id_seq'::regclass); + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + picklist + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + po_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + purchase_order + integer + + + + + + + NOT NULL; + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + provider + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#2 + ; + + + + NOT NULL; + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + UNIQUE#2 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + currency_type + text + + + + + + + NOT NULL; + + + + + + + + + + + + code + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + holding_tag + text + + + + + + + + + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + provider_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + valid + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + address_type + text + + + + + + + + + + provider + integer + + + + + + + NOT NULL; + + + + + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + provider_contact + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + provider + integer + + + + + + + NOT NULL; + + + + + + + + + + + + name + text + + + + + + + + + + role + text + + + + + + + + + + email + text + + + + + + + + + + phone + text + + + + + + + + + + + + + + + + + + Tables referencing acq.provider_contact_address via Foreign Key Constraints + + + + + + + + + + + + + + + + provider_contact_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + valid + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + address_type + text + + + + + + + + + + contact + integer + + + + + + + NOT NULL; + + + + + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + provider_holding_subfield_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + provider + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + subfield + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + purchase_order + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + ordering_agency + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + provider + integer + + + + + + + NOT NULL; + + + + + + + + + + + + state + text + + + + NOT NULL; + + + DEFAULT 'new'::text; + + + + + + + order_date + timestamp with time zone + + + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema action + + + aged_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr_post_code + text + + + + + + + + + + usr_home_ou + integer + + + + NOT NULL; + + + + + + + + usr_profile + integer + + + + NOT NULL; + + + + + + + + usr_birth_year + integer + + + + + + + + + + copy_call_number + integer + + + + NOT NULL; + + + + + + + + copy_location + integer + + + + NOT NULL; + + + + + + + + copy_owning_lib + integer + + + + NOT NULL; + + + + + + + + copy_circ_lib + integer + + + + NOT NULL; + + + + + + + + copy_bib_record + bigint + + + + NOT NULL; + + + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + NOT NULL; + + + + + + + + circ_lib + integer + + + + NOT NULL; + + + + + + + + circ_staff + integer + + + + NOT NULL; + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + NOT NULL; + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + NOT NULL; + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + NOT NULL; + + + + + + + + desk_renewal + boolean + + + + NOT NULL; + + + + + + + + opac_renewal + boolean + + + + NOT NULL; + + + + + + + + duration_rule + text + + + + NOT NULL; + + + + + + + + recuring_fine_rule + text + + + + NOT NULL; + + + + + + + + max_fine_rule + text + + + + NOT NULL; + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + all_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr_post_code + text + + + + + + + + + + usr_home_ou + integer + + + + + + + + + + usr_profile + integer + + + + + + + + + + usr_birth_year + integer + + + + + + + + + + copy_call_number + bigint + + + + + + + + + + copy_location + integer + + + + + + + + + + copy_owning_lib + integer + + + + + + + + + + copy_circ_lib + integer + + + + + + + + + + copy_bib_record + bigint + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + billable_circulations + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + billable_cirulations + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.billable_xact_id_seq'::regclass); + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + circ_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + circ_staff + integer + + + + NOT NULL; + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + NOT NULL; + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + NOT NULL; + + + DEFAULT '1 day'::interval; + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + desk_renewal + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac_renewal + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + duration_rule + text + + + + NOT NULL; + + + + + + + + recuring_fine_rule + text + + + + NOT NULL; + + + + + + + + max_fine_rule + text + + + + NOT NULL; + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + Constraints on circulation + + + circulation_stop_fines_check + CHECK ((stop_fines = ANY (ARRAY['CHECKIN'::text, 'CLAIMSRETURNED'::text, 'LOST'::text, 'MAXFINES'::text, 'RENEW'::text, 'LONGOVERDUE'::text]))) + + + + + + + + + + + + + hold_copy_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + hold + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + target_copy + bigint + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + hold_notification + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + hold + integer + + + + + + + NOT NULL; + + + + + + + + + + + + notify_staff + integer + + + + + + + + + + + + + + + + + notify_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + method + text + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + hold_request + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + request_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + capture_time + timestamp with time zone + + + + + + + + + + fulfillment_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + return_time + timestamp with time zone + + + + + + + + + + prev_check_time + timestamp with time zone + + + + + + + + + + expire_time + timestamp with time zone + + + + + + + + + + cancel_time + timestamp with time zone + + + + + + + + + + target + bigint + + + + NOT NULL; + + + + + + + + current_copy + bigint + + + + + + + + + + + + + + + + + fulfillment_staff + integer + + + + + + + + + + + + + + + + + fulfillment_lib + integer + + + + + + + + + + + + + + + + + request_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + requestor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + selection_ou + integer + + + + NOT NULL; + + + + + + + + selection_depth + integer + + + + NOT NULL; + + + + + + + + pickup_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + hold_type + text + + + + NOT NULL; + + + + + + + + holdable_formats + text + + + + + + + + + + phone_notify + text + + + + + + + + + + email_notify + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + frozen + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + thaw_date + timestamp with time zone + + + + + + + + + + cancel_cause + integer + + + + + + + + + + cancel_note + text + + + + + + + + + + shelf_time + timestamp with time zone + + + + + + + + + + + + + + + + Constraints on hold_request + + + hold_request_hold_type_check + CHECK ((hold_type = ANY (ARRAY['M'::text, 'T'::text, 'V'::text, 'C'::text]))) + + + + + + + + + + Tables referencing action.hold_copy_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + hold_request_cancel_cause + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + + + + + + + + + + + + + + + + + + + + hold_transit_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + PRIMARY KEY + + + + + + DEFAULT nextval('transit_copy_id_seq'::regclass); + + + + + + + + + source_send_time + timestamp with time zone + + + + + + + + + + dest_recv_time + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + integer + + + + NOT NULL; + + + + + + + + dest + integer + + + + NOT NULL; + + + + + + + + prev_hop + integer + + + + + + + + + + copy_status + integer + + + + NOT NULL; + + + + + + + + persistant_transfer + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + hold + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + in_house_use + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + use_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + non_cat_in_house_use + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item_type + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + use_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + non_cataloged_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + patron + integer + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + circ_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + item_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + circ_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + open_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + reservation_transit_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + PRIMARY KEY + + + + + + DEFAULT nextval('transit_copy_id_seq'::regclass); + + + + + + + + + source_send_time + timestamp with time zone + + + + + + + + + + dest_recv_time + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + integer + + + + NOT NULL; + + + + + + + + dest + integer + + + + NOT NULL; + + + + + + + + prev_hop + integer + + + + + + + + + + copy_status + integer + + + + NOT NULL; + + + + + + + + persistant_transfer + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + reservation + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + survey + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + start_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + end_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT (now() + '10 years'::interval); + + + + + + + usr_summary + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + poll + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + required + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + name + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action.survey_question via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + survey_answer + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + question + integer + + + + + + + NOT NULL; + + + + + + + + + + + + answer + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action.survey_response via Foreign Key Constraints + + + + + + + + + + + + + + + + survey_question + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + survey + integer + + + + + + + NOT NULL; + + + + + + + + + + + + question + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action.survey_answer via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + survey_response + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + response_group_id + integer + + + + + + + + + + usr + integer + + + + + + + + + + survey + integer + + + + + + + NOT NULL; + + + + + + + + + + + + question + integer + + + + + + + NOT NULL; + + + + + + + + + + + + answer + integer + + + + + + + NOT NULL; + + + + + + + + + + + + answer_date + timestamp with time zone + + + + + + + + + + effective_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + transit_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + source_send_time + timestamp with time zone + + + + + + + + + + dest_recv_time + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + integer + + + + + + + NOT NULL; + + + + + + + + + + + + dest + integer + + + + + + + NOT NULL; + + + + + + + + + + + + prev_hop + integer + + + + + + + + + + + + + + + + + copy_status + integer + + + + + + + NOT NULL; + + + + + + + + + + + + persistant_transfer + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action.transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + unfulfilled_hold_list + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + current_copy + bigint + + + + NOT NULL; + + + + + + + + hold + integer + + + + NOT NULL; + + + + + + + + circ_lib + integer + + + + NOT NULL; + + + + + + + + fail_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + +
+ +
+ Schema action_trigger + + + cleanup + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + + + collector + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.environment via Foreign Key Constraints + + + + + + + + + + + + + + + + environment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + event_def + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + path + text + + + + + + + + + + collector + text + + + + + + + + + + + + + + + + + label + text + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + + + Constraints on environment + + + environment_label_check + CHECK ((label <> ALL (ARRAY['result'::text, 'target'::text, 'event'::text]))) + + + + + + + + + + + + + event + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + target + bigint + + + + NOT NULL; + + + + + + + + event_def + integer + + + + + + + + + + + + + + + + + add_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + run_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + start_time + timestamp with time zone + + + + + + + + + + update_time + timestamp with time zone + + + + + + + + + + complete_time + timestamp with time zone + + + + + + + + + + update_process + integer + + + + + + + + + + state + text + + + + NOT NULL; + + + DEFAULT 'pending'::text; + + + + + + + template_output + bigint + + + + + + + + + + + + + + + + + error_output + bigint + + + + + + + + + + + + + + + + + + + + + + + Constraints on event + + + event_state_check + CHECK ((state = ANY (ARRAY['pending'::text, 'invalid'::text, 'found'::text, 'collecting'::text, 'collected'::text, 'validating'::text, 'valid'::text, 'reacting'::text, 'reacted'::text, 'cleaning'::text, 'complete'::text, 'error'::text]))) + + + + + + + + + + + + + event_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + UNIQUE#2 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + hook + text + + + + + UNIQUE#2 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + validator + text + + + + + UNIQUE#2 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + reactor + text + + + + + UNIQUE#2 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + cleanup_success + text + + + + + + + + + + + + + + + + + cleanup_failure + text + + + + + + + + + + + + + + + + + delay + interval + + + + + UNIQUE#2 + ; + + + + NOT NULL; + + + DEFAULT '00:05:00'::interval; + + + + + + + + + max_delay + interval + + + + + + + + + + delay_field + text + + + + + UNIQUE#2 + ; + + + + + + + + + + + + group_field + text + + + + + + + + + + template + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.environment via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + event_output + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + is_error + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + data + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action_trigger.event via Foreign Key Constraints + + + + + + + + + + + + + + + + event_params + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + event_def + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + param + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + hook + + + + + + + + Field + Data Type + Constraints and References + + + + + + key + text + + + + PRIMARY KEY + + + + + + + + + + + + + core_type + text + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + passive + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + + + reactor + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + + + validator + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + +
+ +
+ Schema actor + + + card + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + barcode + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + + + + hours_of_operation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + PRIMARY KEY + + + + + + + + + + + + + + + + + dow_0_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_0_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_1_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_1_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_2_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_2_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_3_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_3_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_4_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_4_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_5_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_5_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_6_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_6_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + + + + + + + + + + + + org_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + valid + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + address_type + text + + + + NOT NULL; + + + DEFAULT 'MAILING'::text; + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing actor.org_unit via Foreign Key Constraints + + + + + + + + + + + + + + + + org_lasso + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + + + + + + + + + + + + + + + + + Tables referencing actor.org_lasso_map via Foreign Key Constraints + + + + + + + + + + + + + + + + org_lasso_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + lasso + integer + + + + + + + NOT NULL; + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + org_unit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent_ou + integer + + + + + + + + + + + + + + + + + ou_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + ill_address + integer + + + + + + + + + + + + + + + + + holds_address + integer + + + + + + + + + + + + + + + + + mailing_address + integer + + + + + + + + + + + + + + + + + billing_address + integer + + + + + + + + + + + + + + + + + shortname + text + + + + NOT NULL; + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + email + text + + + + + + + + + + phone + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing acq.distribution_formula via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org_unit_closed + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + close_start + timestamp with time zone + + + + NOT NULL; + + + + + + + + close_end + timestamp with time zone + + + + NOT NULL; + + + + + + + + reason + text + + + + + + + + + + + + + + + + + + + + + org_unit_proximity + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + from_org + integer + + + + + + + + + + to_org + integer + + + + + + + + + + prox + integer + + + + + + + + + + + + + + + + + + + + + org_unit_setting + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + org_unit_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + opac_label + text + + + + NOT NULL; + + + + + + + + depth + integer + + + + NOT NULL; + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + can_have_vols + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + can_have_users + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing actor.org_unit via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + stat_cat + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing actor.stat_cat_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + stat_cat_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + value + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + stat_cat_entry_usr_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat_entry + text + + + + NOT NULL; + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + target_usr + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + usr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + card + integer + + + + + UNIQUE; + + + + + + + + + + + + profile + integer + + + + + + + NOT NULL; + + + + + + + + + + + + usrname + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + email + text + + + + + + + + + + passwd + text + + + + NOT NULL; + + + + + + + + standing + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + ident_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + ident_value + text + + + + + + + + + + ident_type2 + integer + + + + + + + + + + + + + + + + + ident_value2 + text + + + + + + + + + + net_access_level + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + photo_url + text + + + + + + + + + + prefix + text + + + + + + + + + + first_given_name + text + + + + NOT NULL; + + + + + + + + second_given_name + text + + + + + + + + + + family_name + text + + + + NOT NULL; + + + + + + + + suffix + text + + + + + + + + + + day_phone + text + + + + + + + + + + evening_phone + text + + + + + + + + + + other_phone + text + + + + + + + + + + mailing_address + integer + + + + + + + + + + + + + + + + + billing_address + integer + + + + + + + + + + + + + + + + + home_ou + integer + + + + + + + NOT NULL; + + + + + + + + + + + + dob + timestamp with time zone + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + master_account + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + super_user + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + barred + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + usrgroup + serial + + + + NOT NULL; + + + + + + + + claims_returned_count + integer + + + + NOT NULL; + + + + + + + + credit_forward_balance + numeric(6,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + last_xact_id + text + + + + NOT NULL; + + + DEFAULT 'none'::text; + + + + + + + alert_message + text + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + expire_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT (now() + '3 years'::interval); + + + + + + + alias + text + + + + + + + + + + juvenile + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing acq.fund_allocation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + usr_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + valid + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + within_city_limits + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + address_type + text + + + + NOT NULL; + + + DEFAULT 'MAILING'::text; + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + pending + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + replaces + integer + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + usr_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + title + text + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + usr_org_unit_opt_in + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + opt_in_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + opt_in_ws + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + usr_password_reset + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + uuid + text + + + + NOT NULL; + + + + + + + + usr + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + request_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + has_been_reset + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + usr_setting + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + usr_standing_penalty + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + standing_penalty + integer + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + + + + + + + + + + + set_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + stop_date + timestamp with time zone + + + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + workstation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + owning_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + Tables referencing actor.usr_org_unit_opt_in via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema asset + + + call_number + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + editor + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + edit_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + owning_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing asset.call_number_note via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + call_number_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + call_number + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + title + text + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + circ_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + call_number + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + editor + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + NOT NULL; + + + + + + + + + + + + location + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + loan_duration + integer + + + + NOT NULL; + + + + + + + + fine_level + integer + + + + NOT NULL; + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deposit + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + ref + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deposit_amount + numeric(6,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + NOT NULL; + + + + + + + + circ_modifier + text + + + + + + + + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on copy + + + copy_fine_level_check + CHECK ((fine_level = ANY (ARRAY[1, 2, 3]))) + + + + + + copy_loan_duration_check + CHECK ((loan_duration = ANY (ARRAY[1, 2, 3]))) + + + + + + + + + + Tables referencing acq.lineitem_detail via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + copy_location + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + owning_lib + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + hold_verify + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + circulate + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + label_prefix + text + + + + + + + + + + label_suffix + text + + + + + + + + + + + + + + + + + + Tables referencing acq.distribution_formula_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + copy_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owning_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + title + text + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy_transparency + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + deposit_amount + numeric(6,2) + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_lib + integer + + + + + + + + + + + + + + + + + loan_duration + integer + + + + + + + + + + fine_level + integer + + + + + + + + + + holdable + boolean + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + ref + boolean + + + + + + + + + + opac_visible + boolean + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + Constraints on copy_transparency + + + copy_ transparency_ fine_ level_ check + CHECK ((fine_level = ANY (ARRAY[1, 2, 3]))) + + + + + + copy_transparency_loan_duration_check + CHECK ((loan_duration = ANY (ARRAY[1, 2, 3]))) + + + + + + + + + + Tables referencing asset.copy_transparency_map via Foreign Key Constraints + + + + + + + + + + + + + + + + copy_transparency_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + transparency + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_copy + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + stat_cat + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing asset.stat_cat_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + stat_cat_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + value + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing asset.stat_cat_entry_copy_map via Foreign Key Constraints + + + + + + + + + + + + + + + + stat_cat_entry_copy_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + stat_cat_entry + integer + + + + + + + NOT NULL; + + + + + + + + + + + + owning_copy + bigint + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + stat_cat_entry_transparency_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + stat_cat_entry + integer + + + + NOT NULL; + + + + + + + + owning_transparency + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + uri + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + href + text + + + + NOT NULL; + + + + + + + + label + text + + + + + + + + + + use_restriction + text + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing asset.uri_call_number_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + uri_call_number_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + uri + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + call_number + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema auditor + + + actor_org_unit_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + integer + + + + NOT NULL; + + + + + + + + parent_ou + integer + + + + + + + + + + ou_type + integer + + + + NOT NULL; + + + + + + + + ill_address + integer + + + + + + + + + + holds_address + integer + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + shortname + text + + + + NOT NULL; + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + email + text + + + + + + + + + + phone + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + actor_org_unit_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + integer + + + + + + + + + + parent_ou + integer + + + + + + + + + + ou_type + integer + + + + + + + + + + ill_address + integer + + + + + + + + + + holds_address + integer + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + shortname + text + + + + + + + + + + name + text + + + + + + + + + + email + text + + + + + + + + + + phone + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + + + + + + + + + + + + actor_usr_address_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + integer + + + + NOT NULL; + + + + + + + + valid + boolean + + + + NOT NULL; + + + + + + + + within_city_limits + boolean + + + + NOT NULL; + + + + + + + + address_type + text + + + + NOT NULL; + + + + + + + + usr + integer + + + + NOT NULL; + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + pending + boolean + + + + + + + + + + replaces + integer + + + + + + + + + + + + + + + + + + + + + actor_usr_address_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + integer + + + + + + + + + + valid + boolean + + + + + + + + + + within_city_limits + boolean + + + + + + + + + + address_type + text + + + + + + + + + + usr + integer + + + + + + + + + + street1 + text + + + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + + + + + + + county + text + + + + + + + + + + state + text + + + + + + + + + + country + text + + + + + + + + + + post_code + text + + + + + + + + + + + + + + + + + + + + + actor_usr_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + integer + + + + NOT NULL; + + + + + + + + card + integer + + + + + + + + + + profile + integer + + + + NOT NULL; + + + + + + + + usrname + text + + + + NOT NULL; + + + + + + + + email + text + + + + + + + + + + passwd + text + + + + NOT NULL; + + + + + + + + standing + integer + + + + NOT NULL; + + + + + + + + ident_type + integer + + + + NOT NULL; + + + + + + + + ident_value + text + + + + + + + + + + ident_type2 + integer + + + + + + + + + + ident_value2 + text + + + + + + + + + + net_access_level + integer + + + + NOT NULL; + + + + + + + + photo_url + text + + + + + + + + + + prefix + text + + + + + + + + + + first_given_name + text + + + + NOT NULL; + + + + + + + + second_given_name + text + + + + + + + + + + family_name + text + + + + NOT NULL; + + + + + + + + suffix + text + + + + + + + + + + day_phone + text + + + + + + + + + + evening_phone + text + + + + + + + + + + other_phone + text + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + home_ou + integer + + + + NOT NULL; + + + + + + + + dob + timestamp with time zone + + + + + + + + + + active + boolean + + + + NOT NULL; + + + + + + + + master_account + boolean + + + + NOT NULL; + + + + + + + + super_user + boolean + + + + NOT NULL; + + + + + + + + barred + boolean + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + usrgroup + integer + + + + NOT NULL; + + + + + + + + claims_returned_count + integer + + + + NOT NULL; + + + + + + + + credit_forward_balance + numeric(6,2) + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + alert_message + text + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + expire_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + alias + text + + + + + + + + + + juvenile + boolean + + + + + + + + + + + + + + + + + + + + + actor_usr_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + integer + + + + + + + + + + card + integer + + + + + + + + + + profile + integer + + + + + + + + + + usrname + text + + + + + + + + + + email + text + + + + + + + + + + passwd + text + + + + + + + + + + standing + integer + + + + + + + + + + ident_type + integer + + + + + + + + + + ident_value + text + + + + + + + + + + ident_type2 + integer + + + + + + + + + + ident_value2 + text + + + + + + + + + + net_access_level + integer + + + + + + + + + + photo_url + text + + + + + + + + + + prefix + text + + + + + + + + + + first_given_name + text + + + + + + + + + + second_given_name + text + + + + + + + + + + family_name + text + + + + + + + + + + suffix + text + + + + + + + + + + day_phone + text + + + + + + + + + + evening_phone + text + + + + + + + + + + other_phone + text + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + home_ou + integer + + + + + + + + + + dob + timestamp with time zone + + + + + + + + + + active + boolean + + + + + + + + + + master_account + boolean + + + + + + + + + + super_user + boolean + + + + + + + + + + barred + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + usrgroup + integer + + + + + + + + + + claims_returned_count + integer + + + + + + + + + + credit_forward_balance + numeric(6,2) + + + + + + + + + + last_xact_id + text + + + + + + + + + + alert_message + text + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + expire_date + timestamp with time zone + + + + + + + + + + + + + + + + + + + + + asset_call_number_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + bigint + + + + NOT NULL; + + + + + + + + creator + bigint + + + + NOT NULL; + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + editor + bigint + + + + NOT NULL; + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + record + bigint + + + + NOT NULL; + + + + + + + + owning_lib + integer + + + + NOT NULL; + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + asset_call_number_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + bigint + + + + + + + + + + creator + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + editor + bigint + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + record + bigint + + + + + + + + + + owning_lib + integer + + + + + + + + + + label + text + + + + + + + + + + deleted + boolean + + + + + + + + + + + + + + + + + + + + + asset_copy_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + bigint + + + + NOT NULL; + + + + + + + + circ_lib + integer + + + + NOT NULL; + + + + + + + + creator + bigint + + + + NOT NULL; + + + + + + + + call_number + bigint + + + + NOT NULL; + + + + + + + + editor + bigint + + + + NOT NULL; + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + NOT NULL; + + + + + + + + location + integer + + + + NOT NULL; + + + + + + + + loan_duration + integer + + + + NOT NULL; + + + + + + + + fine_level + integer + + + + NOT NULL; + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + NOT NULL; + + + + + + + + deposit + boolean + + + + NOT NULL; + + + + + + + + ref + boolean + + + + NOT NULL; + + + + + + + + holdable + boolean + + + + NOT NULL; + + + + + + + + deposit_amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + NOT NULL; + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + asset_copy_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + creator + bigint + + + + + + + + + + call_number + bigint + + + + + + + + + + editor + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + + + + location + integer + + + + + + + + + + loan_duration + integer + + + + + + + + + + fine_level + integer + + + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + ref + boolean + + + + + + + + + + holdable + boolean + + + + + + + + + + deposit_amount + numeric(6,2) + + + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + + + + + + + + + + + + biblio_record_entry_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + bigint + + + + NOT NULL; + + + + + + + + creator + integer + + + + NOT NULL; + + + + + + + + editor + integer + + + + NOT NULL; + + + + + + + + source + integer + + + + + + + + + + quality + integer + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + active + boolean + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + fingerprint + text + + + + + + + + + + tcn_source + text + + + + NOT NULL; + + + + + + + + tcn_value + text + + + + NOT NULL; + + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + biblio_record_entry_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + bigint + + + + + + + + + + creator + integer + + + + + + + + + + editor + integer + + + + + + + + + + source + integer + + + + + + + + + + quality + integer + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + active + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + fingerprint + text + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + marc + text + + + + + + + + + + last_xact_id + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema authority + + + full_rec + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + NOT NULL; + + + + + + + + tag + character(3) + + + + NOT NULL; + + + + + + + + ind1 + text + + + + + + + + + + ind2 + text + + + + + + + + + + subfield + text + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + rec_descriptor + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + + + + record_status + text + + + + + + + + + + char_encoding + text + + + + + + + + + + + + + + + + + + + + + record_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + arn_source + text + + + + NOT NULL; + + + DEFAULT 'AUTOGEN'::text; + + + + + + + arn_value + text + + + + NOT NULL; + + + + + + + + creator + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + editor + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + source + integer + + + + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing authority.record_note via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + record_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + creator + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + editor + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + tracing_links + + + + + + + + Field + Data Type + Constraints and References + + + + + + record + bigint + + + + + + + + + + main_id + bigint + + + + + + + + + + main_tag + character(3) + + + + + + + + + + main_value + text + + + + + + + + + + relationship + text + + + + + + + + + + use_restriction + text + + + + + + + + + + deprecation + text + + + + + + + + + + display_restriction + text + + + + + + + + + + link_id + bigint + + + + + + + + + + link_tag + character(3) + + + + + + + + + + link_value + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema biblio + + + record_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + source + integer + + + + + + + + + + quality + integer + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + fingerprint + text + + + + + + + + + + tcn_source + text + + + + NOT NULL; + + + DEFAULT 'AUTOGEN'::text; + + + + + + + tcn_value + text + + + + NOT NULL; + + + DEFAULT next_autogen_tcn_value(); + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + record_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + +
+ +
+ Schema booking + + + reservation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.billable_xact_id_seq'::regclass); + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + request_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + start_time + timestamp with time zone + + + + + + + + + + end_time + timestamp with time zone + + + + + + + + + + capture_time + timestamp with time zone + + + + + + + + + + cancel_time + timestamp with time zone + + + + + + + + + + pickup_time + timestamp with time zone + + + + + + + + + + return_time + timestamp with time zone + + + + + + + + + + booking_interval + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + fine_amount + numeric(8,2) + + + + + + + + + + target_resource_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_resource + integer + + + + + + + + + + + + + + + + + current_resource + integer + + + + + + + + + + + + + + + + + request_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + pickup_lib + integer + + + + + + + + + + + + + + + + + capture_staff + integer + + + + + + + + + + + + + + + + + max_fine + numeric(8,2) + + + + + + + + + + + + + + + + + + Tables referencing action.reservation_transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + reservation_attr_value_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + reservation + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + attr_value + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + resource + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + overbook + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + barcode + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + deposit + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + deposit_amount + numeric(8,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + user_fee + numeric(8,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + + + + + + + + + Tables referencing action.reservation_transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + resource_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + resource_type + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + required + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing booking.resource_attr_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + resource_attr_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + resource + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + resource_attr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + value + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + resource_attr_value + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + attr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + valid_value + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing booking.reservation_attr_value_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + resource_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + fine_interval + interval + + + + + + + + + + fine_amount + numeric(8,2) + + + + NOT NULL; + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + catalog_item + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + transferable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + record + bigint + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + + + + max_fine + numeric(8,2) + + + + + + + + + + elbow_room + interval + + + + + + + + + + + + + + + + + + Tables referencing booking.reservation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema config + + + audience_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + + + + + + + + + + + + bib_level_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + bib_source + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + quality + integer + + + + + + + + + + source + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + transcendant + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on bib_source + + + bib_source_quality_check + CHECK (((quality >= 0) AND (quality <= 100))) + + + + + + + + + + Tables referencing vandelay.queued_bib_record via Foreign Key Constraints + + + + + + + + + + + + + + + + billing_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + default_price + numeric(6,2) + + + + + + + + + + + + + + + + + + Tables referencing money.billing via Foreign Key Constraints + + + + + + + + + + + + + + + + circ_matrix_circ_mod_test + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + matchpoint + integer + + + + + + + NOT NULL; + + + + + + + + + + + + items_out + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_circ_mod_test_map via Foreign Key Constraints + + + + + + + + + + + + + + + + circ_matrix_circ_mod_test_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + circ_mod_test + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_mod + text + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + circ_matrix_matchpoint + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + org_unit + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_modifier + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_type + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_form + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_vr_format + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + ref_flag + boolean + + + + + UNIQUE#1 + ; + + + + + + + + + + + + is_renewal + boolean + + + + + UNIQUE#1 + ; + + + + + + + + + + + + usr_age_lower_bound + interval + + + + + UNIQUE#1 + ; + + + + + + + + + + + + usr_age_upper_bound + interval + + + + + UNIQUE#1 + ; + + + + + + + + + + + + juvenile_flag + boolean + + + + + UNIQUE#1 + ; + + + + + + + + + + + + circulate + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + duration_rule + integer + + + + + + + NOT NULL; + + + + + + + + + + + + recurring_fine_rule + integer + + + + + + + NOT NULL; + + + + + + + + + + + + max_fine_rule + integer + + + + + + + NOT NULL; + + + + + + + + + + + + script_test + text + + + + + + + + + + hard_due_date + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_circ_mod_test via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + circ_matrix_test + + + + + + + + Field + Data Type + Constraints and References + + + + + + matchpoint + integer + + + + + + + PRIMARY KEY + + + + + + + + + + + + + + + + + circulate + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + max_items_out + integer + + + + + + + + + + max_overdue + integer + + + + + + + + + + max_fines + numeric(8,2) + + + + + + + + + + org_depth + integer + + + + + + + + + + script_test + text + + + + + + + + + + + + + + + + + + + + + circ_modifier + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + sip2_media_type + text + + + + NOT NULL; + + + + + + + + magnetic_media + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing acq.lineitem_detail via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + copy_status + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action.transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + hard_due_date + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + ceiling_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + forceto + boolean + + + + NOT NULL; + + + + + + + + owner + integer + + + + NOT NULL; + + + + + + + + + + + + + + Constraints on hard_due_date + + + hard_due_date_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + hard_due_date_values + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + hard_due_date + integer + + + + + + + NOT NULL; + + + + + + + + + + + + ceiling_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + active_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + hold_matrix_matchpoint + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + user_home_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + request_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + pickup_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + item_owning_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + item_circ_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + usr_grp + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + requestor_grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_modifier + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_type + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_form + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_vr_format + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + ref_flag + boolean + + + + + + + + + + juvenile_flag + boolean + + + + + + + + + + age_hold_protect_rule + integer + + + + + + + + + + + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + distance_is_from_owner + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + transit_range + integer + + + + + + + + + + + + + + + + + max_holds + integer + + + + + + + + + + include_frozen_holds + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + stop_blocked_user + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing config.hold_matrix_test via Foreign Key Constraints + + + + + + + + + + + + + + + + hold_matrix_test + + + + + + + + Field + Data Type + Constraints and References + + + + + + matchpoint + integer + + + + + + + PRIMARY KEY + + + + + + + + + + + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + distance_is_from_owner + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + transit_range + integer + + + + + + + + + + + + + + + + + max_holds + integer + + + + + + + + + + include_frozen_holds + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + stop_blocked_user + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + age_hold_protect_rule + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + i18n_core + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + fq_field + text + + + + NOT NULL; + + + + + + + + identity_value + text + + + + NOT NULL; + + + + + + + + translation + text + + + + + + + NOT NULL; + + + + + + + + + + + + string + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + i18n_locale + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + marc_code + text + + + + + + + NOT NULL; + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing config.i18n_core via Foreign Key Constraints + + + + + + + + + + + + + + + + identification_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + idl_field_doc + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + fm_class + text + + + + NOT NULL; + + + + + + + + field + text + + + + NOT NULL; + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + string + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + item_form_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + item_type_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + language_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.i18n_locale via Foreign Key Constraints + + + + + + + + + + + + + + + + lit_form_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + + + + + + + + + + + + metabib_field + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + field_class + text + + + + NOT NULL; + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + weight + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + format + text + + + + NOT NULL; + + + DEFAULT 'mods32'::text; + + + + + + + search_field + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + facet_field + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on metabib_field + + + metabib_field_field_class_check + CHECK ((lower(field_class) = ANY (ARRAY['title'::text, 'author'::text, 'subject'::text, 'keyword'::text, 'series'::text]))) + + + + + + + + + + Tables referencing metabib.author_field_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + net_access_level + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + non_cataloged_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owning_lib + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + circ_duration + interval + + + + NOT NULL; + + + DEFAULT '14 days'::interval; + + + + + + + in_house + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action.non_cat_in_house_use via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + rule_age_hold_protect + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + age + interval + + + + NOT NULL; + + + + + + + + prox + integer + + + + NOT NULL; + + + + + + + + + + + + + + Constraints on rule_age_hold_protect + + + rule_age_hold_protect_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.hold_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + rule_circ_duration + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + extended + interval + + + + NOT NULL; + + + + + + + + normal + interval + + + + NOT NULL; + + + + + + + + shrt + interval + + + + NOT NULL; + + + + + + + + max_renewals + integer + + + + NOT NULL; + + + + + + + + + + + + + + Constraints on rule_circ_duration + + + rule_circ_duration_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + rule_max_fine + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + is_percent + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on rule_max_fine + + + rule_max_fine_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + rule_recuring_fine + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + high + numeric(6,2) + + + + NOT NULL; + + + + + + + + normal + numeric(6,2) + + + + NOT NULL; + + + + + + + + low + numeric(6,2) + + + + NOT NULL; + + + + + + + + recurance_interval + interval + + + + NOT NULL; + + + DEFAULT '1 day'::interval; + + + + + + + + + + + + + Constraints on rule_recuring_fine + + + rule_recuring_fine_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + standing + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + standing_penalty + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + block_list + text + + + + + + + + + + + + + + + + + + Tables referencing actor.usr_standing_penalty via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + upgrade_log + + + + + + + + Field + Data Type + Constraints and References + + + + + + version + text + + + + PRIMARY KEY + + + + + + + + + + + + + install_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + videorecording_format_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + xml_transform + + + + + + + + Field + Data Type + Constraints and References + + + + + + name + text + + + + PRIMARY KEY + + + + + + + + + + + + + namespace_uri + text + + + + NOT NULL; + + + + + + + + prefix + text + + + + NOT NULL; + + + + + + + + xslt + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + z3950_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + source + text + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + code + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + format + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + truncation + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + z3950_source + + + + + + + + Field + Data Type + Constraints and References + + + + + + name + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + host + text + + + + NOT NULL; + + + + + + + + port + integer + + + + NOT NULL; + + + + + + + + db + text + + + + NOT NULL; + + + + + + + + record_format + text + + + + NOT NULL; + + + DEFAULT 'FI'::text; + + + + + + + transmission_format + text + + + + NOT NULL; + + + DEFAULT 'usmarc'::text; + + + + + + + auth + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing config.z3950_attr via Foreign Key Constraints + + + + + + + + + + + + + + +
+ +
+ Schema container + + + biblio_record_entry_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.biblio_record_entry_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + biblio_record_entry_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_biblio_record_entry + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + pos + integer + + + + + + + + + + + + + + + + + + Tables referencing container.biblio_record_entry_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + biblio_record_entry_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + biblio_record_entry_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + biblio_record_entry_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + call_number_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.call_number_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + call_number_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_call_number + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + pos + integer + + + + + + + + + + + + + + + + + + Tables referencing container.call_number_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + call_number_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + call_number_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + call_number_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + copy_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.copy_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + copy_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_copy + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + pos + integer + + + + + + + + + + + + + + + + + + Tables referencing container.copy_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + copy_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + user_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.user_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + user_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_user + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + pos + integer + + + + + + + + + + + + + + + + + + Tables referencing container.user_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + user_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + user_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + user_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema extend_reporter + + + full_circ_count + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + circ_count + bigint + + + + + + + + + + + + + + + + + + + + + global_bibs_by_holding_update + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + holding_update + timestamp with time zone + + + + + + + + + + update_type + text + + + + + + + + + + + + + + + + + + + + + legacy_circ_count + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + PRIMARY KEY + + + + + + + + + + + + + + + + + circ_count + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema metabib + + + author_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + full_rec + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + record + bigint + + + + + + + + + + tag + character(3) + + + + + + + + + + ind1 + text + + + + + + + + + + ind2 + text + + + + + + + + + + subfield + text + + + + + + + + + + value + text + + + + + + + + + + index_vector + public.tsvector + + + + + + + + + + + + + + + + + + + + + keyword_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + metarecord + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + fingerprint + text + + + + NOT NULL; + + + + + + + + master_record + bigint + + + + + + + + + + + + + + + + + mods + text + + + + + + + + + + + + + + + + + + Tables referencing metabib.metarecord_source_map via Foreign Key Constraints + + + + + + + + + + + + + + + + metarecord_source_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + metarecord + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + real_full_rec + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('full_rec_id_seq'::regclass); + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + tag + character(3) + + + + NOT NULL; + + + + + + + + ind1 + text + + + + + + + + + + ind2 + text + + + + + + + + + + subfield + text + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + rec_descriptor + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + bib_level + text + + + + + + + + + + control_type + text + + + + + + + + + + char_encoding + text + + + + + + + + + + enc_level + text + + + + + + + + + + audience + text + + + + + + + + + + lit_form + text + + + + + + + + + + type_mat + text + + + + + + + + + + cat_form + text + + + + + + + + + + pub_status + text + + + + + + + + + + item_lang + text + + + + + + + + + + vr_format + text + + + + + + + + + + date1 + text + + + + + + + + + + date2 + text + + + + + + + + + + + + + + + + + + + + + series_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + NOT NULL; + + + + + + + + field + integer + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + subject_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + title_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + public.tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema money + + + billable_xact + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + + + + + + + + + + + + billable_xact_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + billable_xact_with_void_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + billing + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + billing_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + voider + integer + + + + + + + + + + void_time + timestamp with time zone + + + + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + billing_type + text + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + btype + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + bnm_desk_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + bnm_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + bnm_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + + + + + + + accepting_usr + integer + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + cash_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + + + + + + + + + + + + cashdrawer_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + org_unit + integer + + + + + + + + + + cashdrawer + integer + + + + + + + + + + payment_type + name + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + voided + boolean + + + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + check_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + check_number + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + collections_tracker + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + collector + integer + + + + + + + NOT NULL; + + + + + + + + + + + + location + integer + + + + + + + NOT NULL; + + + + + + + + + + + + enter_time + timestamp with time zone + + + + + + + + + + + + + + + + + + + + + credit_card_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + cc_type + text + + + + + + + + + + cc_number + text + + + + + + + + + + expire_month + integer + + + + + + + + + + expire_year + integer + + + + + + + + + + approval_code + text + + + + + + + + + + + + + + + + + + + + + credit_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + desk_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + + + + + + + accepting_usr + integer + + + + + + + + + + cash_drawer + integer + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + forgive_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + goods_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + grocery + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('billable_xact_id_seq'::regclass); + + + + + + + + + usr + integer + + + + NOT NULL; + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + billing_location + integer + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + materialized_billable_xact_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + non_drawer_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + + + + + + + accepting_usr + integer + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + open_balance_by_circ_and_owning_lib + + + + + + + + Field + Data Type + Constraints and References + + + + + + circ_lib + integer + + + + + + + + + + owning_lib + integer + + + + + + + + + + billing_types + text + + + + + + + + + + balance + numeric + + + + + + + + + + + + + + + + + + + + + open_balance_by_owning_lib + + + + + + + + Field + Data Type + Constraints and References + + + + + + owning_lib + integer + + + + + + + + + + billing_types + text + + + + + + + + + + balance + numeric + + + + + + + + + + + + + + + + + + + + + open_balance_by_usr_home_and_owning_lib + + + + + + + + Field + Data Type + Constraints and References + + + + + + home_ou + integer + + + + + + + + + + owning_lib + integer + + + + + + + + + + billing_types + text + + + + + + + + + + balance + numeric + + + + + + + + + + + + + + + + + + + + + open_billable_xact_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + billing_location + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + open_circ_balance_by_circ_and_owning_lib + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + owning_lib + integer + + + + + + + + + + billing_type + text + + + + + + + + + + billed + numeric + + + + + + + + + + + + + + + + + + + + + open_circ_balance_by_owning_lib + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + owning_lib + integer + + + + + + + + + + billing_type + text + + + + + + + + + + billed + numeric + + + + + + + + + + + + + + + + + + + + + open_circ_balance_by_usr_home_and_owning_lib + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + home_ou + integer + + + + + + + + + + owning_lib + integer + + + + + + + + + + billing_type + text + + + + + + + + + + billed + numeric + + + + + + + + + + + + + + + + + + + + + open_transaction_billing_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + open_transaction_billing_type_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + open_transaction_payment_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_payment_type + name + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + + + + + + + + + + + + open_usr_circulation_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + open_usr_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + transaction_billing_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + transaction_billing_type_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + transaction_billing_with_void_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + transaction_payment_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_payment_type + name + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + + + + + + + + + + + + transaction_payment_with_void_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_payment_type + name + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + + + + + + + + + + + + usr_circulation_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + usr_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + work_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema offline + + + script + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + session + text + + + + NOT NULL; + + + + + + + + requestor + integer + + + + NOT NULL; + + + + + + + + create_time + integer + + + + NOT NULL; + + + + + + + + workstation + text + + + + NOT NULL; + + + + + + + + logfile + text + + + + NOT NULL; + + + + + + + + time_delta + integer + + + + NOT NULL; + + + + + + + + count + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + session + + + + + + + + Field + Data Type + Constraints and References + + + + + + key + text + + + + PRIMARY KEY + + + + + + + + + + + + + org + integer + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + creator + integer + + + + NOT NULL; + + + + + + + + create_time + integer + + + + NOT NULL; + + + + + + + + in_process + integer + + + + NOT NULL; + + + + + + + + start_time + integer + + + + + + + + + + end_time + integer + + + + + + + + + + num_complete + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema permission + + + grp_penalty_threshold + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + org_unit + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + penalty + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + threshold + numeric(8,2) + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + grp_perm_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + perm + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + depth + integer + + + + NOT NULL; + + + + + + + + grantable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + grp_tree + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + usergroup + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + perm_interval + interval + + + + NOT NULL; + + + DEFAULT '3 years'::interval; + + + + + + + description + text + + + + + + + + + + application_perm + text + + + + + + + + + + hold_priority + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + perm_list + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + code + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing permission.grp_perm_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + usr_grp_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + usr_object_perm_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + perm + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + object_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + object_id + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + grantable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + usr_perm_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + perm + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + depth + integer + + + + NOT NULL; + + + + + + + + grantable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + usr_work_ou_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + work_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema public + + + before_1980 + + + + + + + + Field + Data Type + Constraints and References + + + + + + record + bigint + + + + + + + + + + ltrim + text + + + + + + + + + + + + + + + + + + + + + billingtest + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + sum + numeric + + + + + + + + + + usrname + text + + + + + + + + + + + + + + + + + + + + + booking + + + + + + + + Field + Data Type + Constraints and References + + + + + + start_time + timestamp with time zone + + + + + + + + + + end_time + timestamp with time zone + + + + + + + + + + request lib + text + + + + + + + + + + pick up lib + text + + + + + + + + + + usrname + text + + + + + + + + + + user barcode + text + + + + + + + + + + barcode + text + + + + + + + + + + Call Number + text + + + + + + + + + + name + text + + + + + + + + + + value + text + + + + + + + + + + + + + + + + + + + + + booking2 + + + + + + + + Field + Data Type + Constraints and References + + + + + + start_time + timestamp with time zone + + + + + + + + + + end_time + timestamp with time zone + + + + + + + + + + owning library + text + + + + + + + + + + pick up lib + text + + + + + + + + + + usrname + text + + + + + + + + + + user barcode + text + + + + + + + + + + barcode + text + + + + + + + + + + Call Number + text + + + + + + + + + + name + text + + + + + + + + + + value + text + + + + + + + + + + + + + + + + + + + + + circ_mod_count + + + + + + + + Field + Data Type + Constraints and References + + + + + + campus + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + count + bigint + + + + + + + + + + + + + + + + + + + + + iahs_callnums_titles + + + + + + + + Field + Data Type + Constraints and References + + + + + + label + text + + + + + + + + + + value + text + + + + + + + + + + + + + + + + + + + + + iahs_canada + + + + + + + + Field + Data Type + Constraints and References + + + + + + label + text + + + + + + + + + + value + text + + + + + + + + + + + + + + + + + + + + + items_1980_89 + + + + + + + + Field + Data Type + Constraints and References + + + + + + record + bigint + + + + + + + + + + ltrim + text + + + + + + + + + + + + + + + + + + + + + mat_sum + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + usrname + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + mohawkstudents + + + + + + + + Field + Data Type + Constraints and References + + + + + + student_id + integer + + + + + + + + + + barcode + text + + + + + + + + + + last_name + text + + + + + + + + + + first_name + text + + + + + + + + + + program_number + text + + + + + + + + + + program_name + text + + + + + + + + + + email + text + + + + + + + + + + address_type + text + + + + + + + + + + street1 + text + + + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + + + + + + + province + text + + + + + + + + + + country + text + + + + + DEFAULT 'Canada'::text; + + + + + + + postal_code + text + + + + + + + + + + phone + text + + + + + + + + + + profile + integer + + + + + DEFAULT 2; + + + + + + + ident_type + integer + + + + + DEFAULT 3; + + + + + + + home_ou + integer + + + + + DEFAULT 101; + + + + + + + claims_returned_count + integer + + + + + + + + + + usrname + text + + + + + + + + + + net_access_level + integer + + + + + DEFAULT 2; + + + + + + + password + text + + + + + + + + + + + + + + + + + + + + + mohawkstudents2 + + + + + + + + Field + Data Type + Constraints and References + + + + + + student_id + integer + + + + + + + + + + barcode + text + + + + + + + + + + last_name + text + + + + + + + + + + first_name + text + + + + + + + + + + program_number + text + + + + + + + + + + program_name + text + + + + + + + + + + email + text + + + + + + + + + + address_type + text + + + + + + + + + + street1 + text + + + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + + + + + + + province + text + + + + + + + + + + country + text + + + + + + + + + + postal_code + text + + + + + + + + + + phone + text + + + + + + + + + + profile + integer + + + + + + + + + + ident_type + integer + + + + + + + + + + home_ou + integer + + + + + + + + + + claims_returned_count + integer + + + + + + + + + + usrname + text + + + + + + + + + + net_access_level + integer + + + + + + + + + + password + text + + + + + + + + + + + + + + + + + + + + + money_totals + + + + + + + + Field + Data Type + Constraints and References + + + + + + balanced owed + numeric + + + + + + + + + + total owed + numeric + + + + + + + + + + paid + numeric + + + + + + + + + + + + + + + + + + + + + pg_ts_cfg + + + + + + + + Field + Data Type + Constraints and References + + + + + + ts_name + text + + + + PRIMARY KEY + + + + + + + + + + + + + prs_name + text + + + + NOT NULL; + + + + + + + + locale + text + + + + + + + + + + + + + + + + + + + + + pg_ts_cfgmap + + + + + + + + Field + Data Type + Constraints and References + + + + + + ts_name + text + + + + PRIMARY KEY + + + + + + + + + + + + + tok_alias + text + + + + PRIMARY KEY + + + + + + + + + + + + + dict_name + text[] + + + + + + + + + + + + + + + + + + + + + pg_ts_dict + + + + + + + + Field + Data Type + Constraints and References + + + + + + dict_name + text + + + + PRIMARY KEY + + + + + + + + + + + + + dict_init + regprocedure + + + + + + + + + + dict_initoption + text + + + + + + + + + + dict_lexize + regprocedure + + + + NOT NULL; + + + + + + + + dict_comment + text + + + + + + + + + + + + + + + + + + + + + pg_ts_parser + + + + + + + + Field + Data Type + Constraints and References + + + + + + prs_name + text + + + + PRIMARY KEY + + + + + + + + + + + + + prs_start + regprocedure + + + + NOT NULL; + + + + + + + + prs_nexttoken + regprocedure + + + + NOT NULL; + + + + + + + + prs_end + regprocedure + + + + NOT NULL; + + + + + + + + prs_headline + regprocedure + + + + NOT NULL; + + + + + + + + prs_lextype + regprocedure + + + + NOT NULL; + + + + + + + + prs_comment + text + + + + + + + + + + + + + + + + + + + + + pre_1980_items + + + + + + + + Field + Data Type + Constraints and References + + + + + + campus + text + + + + + + + + + + title + text + + + + + + + + + + call number + text + + + + + + + + + + year + text + + + + + + + + + + + + + + + + + + + + + record_title + + + + + + + + Field + Data Type + Constraints and References + + + + + + record + bigint + + + + + + + + + + value + text + + + + + + + + + + + + + + + + + + + + + titles_80_to_89 + + + + + + + + Field + Data Type + Constraints and References + + + + + + campus + text + + + + + + + + + + title + text + + + + + + + + + + call number + text + + + + + + + + + + year + text + + + + + + + + + + + + + + + + + + + + + user_financial_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usrname + text + + + + + + + + + + total_owed + numeric + + + + + + + + + + total_paid + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + weblinks + + + + + + + + Field + Data Type + Constraints and References + + + + + + RecordID + serial + + + + PRIMARY KEY + + + + + + + + + + + + + Title + text + + + + + + + + + + Creator + text + + + + + + + + + + URL + text + + + + + + + + + + Access + text + + + + + + + + + + FullText + text + + + + + + + + + + Date + date + + + + + + + + + + DescriptionShort + text + + + + + + + + + + DescriptionLong + text + + + + + + + + + + Publisher + text + + + + + + + + + + NumberOfUsers + text + + + + + + + + + + Tutorial + text + + + + + + + + + + SubjectKeywords + text + + + + + + + + + + SubjectLCSH + text + + + + + + + + + + SubjectCategories + text + + + + + + + + + + JointCategory + text + + + + + + + + + + ResourceTypes + text + + + + + + + + + + Coverage + text + + + + + + + + + + CanadianContent + text + + + + + + + + + + RightsManagement + text + + + + + + + + + + Notes + text + + + + + + + + + + DateCreated + date + + + + + + + + + + DateModified + date + + + + + + + + + + MohawkOnly + text + + + + + + + + + + Course + text + + + + + + + + + + KeySite + text + + + + + + + + + + ScholarlySite + text + + + + + + + + + + Cataloguer + text + + + + + + + + + + EditedBy + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema reporter + + + circ_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + type + text + + + + + + + + + + + + + + + + + + + + + classic_current_billing_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + billing_location_shortname + text + + + + + + + + + + billing_location_name + text + + + + + + + + + + billing_location + integer + + + + + + + + + + barcode + text + + + + + + + + + + usr_home_ou + integer + + + + + + + + + + usr_home_ou_shortname + text + + + + + + + + + + usr_home_ou_name + text + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + xact_type + name + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + patron_county + text + + + + + + + + + + patron_city + text + + + + + + + + + + patron_zip + text + + + + + + + + + + profile_group + text + + + + + + + + + + demographic_general_division + text + + + + + + + + + + + + + + + + + + + + + classic_current_circ + + + + + + + + Field + Data Type + Constraints and References + + + + + + circ_lib + text + + + + + + + + + + circ_lib_id + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + circ_type + text + + + + + + + + + + copy_id + bigint + + + + + + + + + + circ_modifier + text + + + + + + + + + + owning_lib_name + text + + + + + + + + + + language + text + + + + + + + + + + lit_form + text + + + + + + + + + + item_form + text + + + + + + + + + + item_type + text + + + + + + + + + + shelving_location + text + + + + + + + + + + patron_id + integer + + + + + + + + + + profile_group + text + + + + + + + + + + demographic_general_division + text + + + + + + + + + + id + bigint + + + + + + + + + + call_number + bigint + + + + + + + + + + call_number_label + text + + + + + + + + + + dewey + text + + + + + + + + + + dewey_block_tens + text + + + + + + + + + + dewey_block_hundreds + text + + + + + + + + + + dewey_range_tens + text + + + + + + + + + + dewey_range_hundreds + text + + + + + + + + + + patron_home_lib + integer + + + + + + + + + + patron_home_lib_shortname + text + + + + + + + + + + patron_county + text + + + + + + + + + + patron_city + text + + + + + + + + + + patron_zip + text + + + + + + + + + + stat_cat_1 + integer + + + + + + + + + + stat_cat_2 + integer + + + + + + + + + + stat_cat_1_value + text + + + + + + + + + + stat_cat_2_value + text + + + + + + + + + + + + + + + + + + + + + classic_item_list + + + + + + + + Field + Data Type + Constraints and References + + + + + + title + text + + + + + + + + + + author + text + + + + + + + + + + pubdate + text + + + + + + + + + + id + bigint + + + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + + + + + + + call_number_label + text + + + + + + + + + + dewey_block_tens + text + + + + + + + + + + dewey_block_hundreds + text + + + + + + + + + + use_count + bigint + + + + + + + + + + circ_modifier + text + + + + + + + + + + shelving_location + text + + + + + + + + + + stat_cat_1 + integer + + + + + + + + + + stat_cat_2 + integer + + + + + + + + + + stat_cat_1_value + text + + + + + + + + + + stat_cat_2_value + text + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + owning_lib_name + text + + + + + + + + + + owning_lib + integer + + + + + + + + + + circ_lib_name + text + + + + + + + + + + circ_lib + integer + + + + + + + + + + creator + bigint + + + + + + + + + + age_protect + integer + + + + + + + + + + opac_visible + boolean + + + + + + + + + + ref + boolean + + + + + + + + + + deposit_amount + numeric(6,2) + + + + + + + + + + deleted + boolean + + + + + + + + + + tcn_value + text + + + + + + + + + + status + integer + + + + + + + + + + stop_fines + text + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + patron_barcode + text + + + + + + + + + + patron_name + text + + + + + + + + + + + + + + + + + + + + + currently_running + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + runner_barcode + text + + + + + + + + + + name + text + + + + + + + + + + run_time + timestamp with time zone + + + + + + + + + + scheduled_wait_time + interval + + + + + + + + + + + + + + + + + + + + + demographic + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + dob + timestamp with time zone + + + + + + + + + + general_division + text + + + + + + + + + + + + + + + + + + + + + hold_request_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + target + bigint + + + + + + + + + + hold_type + text + + + + + + + + + + bib_record + bigint + + + + + + + + + + + + + + + + + + + + + legacy_cat1 + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + owner + integer + + + + + + + + + + value + text + + + + + + + + + + + + + + + + + + + + + legacy_cat2 + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + owner + integer + + + + + + + + + + value + text + + + + + + + + + + + + + + + + + + + + + materialized_simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + + + + + + + + + + + + old_super_simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + + + + + + + + + + + + output_folder + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + shared + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + share_with + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.output_folder via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + overdue_circs + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + overdue_reports + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + runner_barcode + text + + + + + + + + + + name + text + + + + + + + + + + run_time + timestamp with time zone + + + + + + + + + + scheduled_wait_time + interval + + + + + + + + + + + + + + + + + + + + + pending_reports + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + runner_barcode + text + + + + + + + + + + name + text + + + + + + + + + + run_time + timestamp with time zone + + + + + + + + + + scheduled_wait_time + interval + + + + + + + + + + + + + + + + + + + + + report + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + description + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + template + integer + + + + + + + NOT NULL; + + + + + + + + + + + + data + text + + + + NOT NULL; + + + + + + + + folder + integer + + + + + + + NOT NULL; + + + + + + + + + + + + recur + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + recurance + interval + + + + + + + + + + + + + + + + + + Tables referencing reporter.schedule via Foreign Key Constraints + + + + + + + + + + + + + + + + report_folder + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + shared + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + share_with + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.report via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + schedule + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + report + integer + + + + + + + NOT NULL; + + + + + + + + + + + + folder + integer + + + + + + + NOT NULL; + + + + + + + + + + + + runner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + run_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + start_time + timestamp with time zone + + + + + + + + + + complete_time + timestamp with time zone + + + + + + + + + + email + text + + + + + + + + + + excel_format + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + html_format + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + csv_format + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + chart_pie + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + chart_bar + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + chart_line + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + error_code + integer + + + + + + + + + + error_text + text + + + + + + + + + + + + + + + + + + + + + simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + metarecord + bigint + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + uniform_title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + series_title + text + + + + + + + + + + series_statement + text + + + + + + + + + + summary + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + topic_subject + text[] + + + + + + + + + + geographic_subject + text[] + + + + + + + + + + genre + text[] + + + + + + + + + + name_subject + text[] + + + + + + + + + + corporate_subject + text[] + + + + + + + + + + external_uri + text[] + + + + + + + + + + + + + + + + + + + + + super_simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + + + + + + + + + + + + template + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + data + text + + + + NOT NULL; + + + + + + + + folder + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.report via Foreign Key Constraints + + + + + + + + + + + + + + + + template_folder + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + shared + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + share_with + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.template via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + xact_billing_totals + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + unvoided + numeric + + + + + + + + + + voided + numeric + + + + + + + + + + total + numeric + + + + + + + + + + + + + + + + + + + + + xact_paid_totals + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + unvoided + numeric + + + + + + + + + + voided + numeric + + + + + + + + + + total + numeric + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema search + + + relevance_adjustment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + bump_type + text + + + + NOT NULL; + + + + + + + + multiplier + numeric + + + + NOT NULL; + + + DEFAULT 1.0; + + + + + + + + + + + + + Constraints on relevance_adjustment + + + relevance_adjustment_bump_type_check + CHECK ((bump_type = ANY (ARRAY['word_order'::text, 'first_word'::text, 'full_match'::text]))) + + + + + + + + + + + +
+ +
+ Schema serial + + + bib_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + generated_coverage + text + + + + NOT NULL; + + + + + + + + textual_holdings + text + + + + + + + + + + + + + + + + + + + + + binding_unit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + label + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing serial.issuance via Foreign Key Constraints + + + + + + + + + + + + + + + + index_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + generated_coverage + text + + + + NOT NULL; + + + + + + + + textual_holdings + text + + + + + + + + + + + + + + + + + + + + + issuance + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_copy + bigint + + + + + + + + + + + + + + + + + location + bigint + + + + + + + + + + + + + + + + + binding_unit + integer + + + + + + + + + + + + + + + + + label + text + + + + + + + + + + + + + + + + + + + + + record_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + + + + + + + + + + + owning_lib + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + creator + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + editor + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + source + integer + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + subscription + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + callnumber + bigint + + + + + + + + + + + + + + + + + uri + integer + + + + + + + + + + + + + + + + + start_date + date + + + + NOT NULL; + + + + + + + + end_date + date + + + + + + + + + + + + + + + + + + Tables referencing serial.bib_summary via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sup_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + generated_coverage + text + + + + NOT NULL; + + + + + + + + textual_holdings + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema stats + + + fleshed_call_number + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + creator + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + editor + bigint + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + record + bigint + + + + + + + + + + owning_lib + integer + + + + + + + + + + label + text + + + + + + + + + + deleted + boolean + + + + + + + + + + create_date_day + date + + + + + + + + + + edit_date_day + date + + + + + + + + + + create_date_hour + timestamp with time zone + + + + + + + + + + edit_date_hour + timestamp with time zone + + + + + + + + + + item_lang + text + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + + + + + + + + + + + + fleshed_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + start_date_day + date + + + + + + + + + + finish_date_day + date + + + + + + + + + + start_date_hour + timestamp with time zone + + + + + + + + + + finish_date_hour + timestamp with time zone + + + + + + + + + + call_number_label + text + + + + + + + + + + owning_lib + integer + + + + + + + + + + item_lang + text + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + + + + + + + + + + + + fleshed_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + creator + bigint + + + + + + + + + + call_number + bigint + + + + + + + + + + editor + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + + + + location + integer + + + + + + + + + + loan_duration + integer + + + + + + + + + + fine_level + integer + + + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + ref + boolean + + + + + + + + + + holdable + boolean + + + + + + + + + + deposit_amount + numeric(6,2) + + + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + create_date_day + date + + + + + + + + + + edit_date_day + date + + + + + + + + + + create_date_hour + timestamp with time zone + + + + + + + + + + edit_date_hour + timestamp with time zone + + + + + + + + + + call_number_label + text + + + + + + + + + + owning_lib + integer + + + + + + + + + + item_lang + text + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema vandelay + + + authority_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + code + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing vandelay.queued_authority_record_attr via Foreign Key Constraints + + + + + + + + + + + + + + + + authority_match + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + matched_attr + integer + + + + + + + + + + + + + + + + + queued_record + bigint + + + + + + + + + + + + + + + + + eg_record + bigint + + + + + + + + + + + + + + + + + + + + + + + + + + + + authority_queue + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('queue_id_seq'::regclass); + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + complete + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + queue_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'authority'::text; + + + + + + + + + + + + + + + Constraints on authority_queue + + + authority_queue_queue_type_check + CHECK ((queue_type = 'authority'::text)) + + + + + + queue_queue_type_check + CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text]))) + + + + + + + + + + Tables referencing vandelay.queued_authority_record via Foreign Key Constraints + + + + + + + + + + + + + + + + bib_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + code + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing vandelay.queued_bib_record_attr via Foreign Key Constraints + + + + + + + + + + + + + + + + bib_match + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + field_type + text + + + + NOT NULL; + + + + + + + + matched_attr + integer + + + + + + + + + + + + + + + + + queued_record + bigint + + + + + + + + + + + + + + + + + eg_record + bigint + + + + + + + + + + + + + + + + + + + + + + + Constraints on bib_match + + + bib_match_field_type_check + CHECK ((field_type = ANY (ARRAY['isbn'::text, 'tcn_value'::text, 'id'::text]))) + + + + + + + + + + + + + bib_queue + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('queue_id_seq'::regclass); + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + complete + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + queue_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'bib'::text; + + + + + + + + + item_attr_def + bigint + + + + + + + + + + + + + + + + + + + + + + + Constraints on bib_queue + + + bib_queue_queue_type_check + CHECK ((queue_type = 'bib'::text)) + + + + + + queue_queue_type_check + CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text]))) + + + + + + + + + + Tables referencing vandelay.queued_bib_record via Foreign Key Constraints + + + + + + + + + + + + + + + + import_bib_trash_fields + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + field + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + import_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + definition + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + owning_lib + integer + + + + + + + + + + circ_lib + integer + + + + + + + + + + call_number + text + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + + + + location + integer + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + deposit_amount + numeric(8,2) + + + + + + + + + + ref + boolean + + + + + + + + + + holdable + boolean + + + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + alert_message + text + + + + + + + + + + pub_note + text + + + + + + + + + + priv_note + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + + + + + + + + + + + + import_item_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + tag + text + + + + NOT NULL; + + + + + + + + keep + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + owning_lib + text + + + + + + + + + + circ_lib + text + + + + + + + + + + call_number + text + + + + + + + + + + copy_number + text + + + + + + + + + + status + text + + + + + + + + + + location + text + + + + + + + + + + circulate + text + + + + + + + + + + deposit + text + + + + + + + + + + deposit_amount + text + + + + + + + + + + ref + text + + + + + + + + + + holdable + text + + + + + + + + + + price + text + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + text + + + + + + + + + + pub_note_title + text + + + + + + + + + + pub_note + text + + + + + + + + + + priv_note_title + text + + + + + + + + + + priv_note + text + + + + + + + + + + + + + + + + + + Tables referencing vandelay.bib_queue via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + queue + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + complete + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + queue_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'bib'::text; + + + + + + + + + + + + + + + Constraints on queue + + + queue_queue_type_check + CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text]))) + + + + + + + + + + + + + queued_authority_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('queued_record_id_seq'::regclass); + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + import_time + timestamp with time zone + + + + + + + + + + purpose + text + + + + NOT NULL; + + + DEFAULT 'import'::text; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + queue + integer + + + + + + + NOT NULL; + + + + + + + + + + + + imported_as + integer + + + + + + + + + + + + + + + + + + + + + + + Constraints on queued_authority_record + + + queued_record_purpose_check + CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text]))) + + + + + + + + + + Tables referencing vandelay.authority_match via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + queued_authority_record_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + attr_value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing vandelay.authority_match via Foreign Key Constraints + + + + + + + + + + + + + + + + queued_bib_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('queued_record_id_seq'::regclass); + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + import_time + timestamp with time zone + + + + + + + + + + purpose + text + + + + NOT NULL; + + + DEFAULT 'import'::text; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + queue + integer + + + + + + + NOT NULL; + + + + + + + + + + + + bib_source + integer + + + + + + + + + + + + + + + + + imported_as + integer + + + + + + + + + + + + + + + + + + + + + + + Constraints on queued_bib_record + + + queued_record_purpose_check + CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text]))) + + + + + + + + + + Tables referencing vandelay.bib_match via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + queued_bib_record_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + attr_value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing vandelay.bib_match via Foreign Key Constraints + + + + + + + + + + + + + + + + queued_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + import_time + timestamp with time zone + + + + + + + + + + purpose + text + + + + NOT NULL; + + + DEFAULT 'import'::text; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + + + + + + + Constraints on queued_record + + + queued_record_purpose_check + CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text]))) + + + + + + + + + + + +
+ +
+ diff --git a/appendices/schema1.6.1.6.xml b/appendices/schema1.6.1.6.xml new file mode 100644 index 0000000000..a0e9a8f76b --- /dev/null +++ b/appendices/schema1.6.1.6.xml @@ -0,0 +1,43110 @@ + + + Database Schema + This is the schema for the Evergreen database. + +
+ Schema acq + + + currency_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + + + + + + + + + + + + + + Tables referencing acq.exchange_rate via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + distribution_formula + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + skip_count + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing acq.distribution_formula_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + distribution_formula_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + formula + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + position + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + item_count + integer + + + + NOT NULL; + + + + + + + + owning_lib + integer + + + + + + + + + + + + + + + + + location + integer + + + + + + + + + + + + + + + + + + + + + + + Constraints on distribution_formula_entry + + + acqdfe_must_be_somewhere + CHECK (((owning_lib IS NOT NULL) OR (location IS NOT NULL))) + + + + + + + + + + + + + exchange_rate + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + from_currency + text + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + to_currency + text + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + ratio + numeric + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + fiscal_calendar + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing acq.fiscal_year via Foreign Key Constraints + + + + + + + + + + + + + + + + fiscal_year + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + calendar + integer + + + + + UNIQUE#1 + ; + + + + + UNIQUE#2 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + year + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + year_begin + timestamp with time zone + + + + + UNIQUE#2 + ; + + + + NOT NULL; + + + + + + + + + + year_end + timestamp with time zone + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + fund + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + org + integer + + + + + UNIQUE#2 + ; + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + year + integer + + + + + UNIQUE#2 + ; + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT date_part('year'::text, now()); + + + + + + + + + + + currency_type + text + + + + + + + NOT NULL; + + + + + + + + + + + + code + text + + + + + UNIQUE#2 + ; + + + + + + + + + + + + + + + + + + + + Tables referencing acq.fund_allocation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + fund_allocation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + funding_source + integer + + + + + + + NOT NULL; + + + + + + + + + + + + fund + integer + + + + + + + NOT NULL; + + + + + + + + + + + + amount + numeric + + + + + + + + + + percent + numeric + + + + + + + + + + allocator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + Constraints on fund_allocation + + + allocation_amount_or_percent + CHECK ((((percent IS NULL) AND (amount IS NOT NULL)) OR ((percent IS NOT NULL) AND (amount IS NULL)))) + + + + + + fund_allocation_percent_check + CHECK (((percent IS NULL) OR ((percent >= 0.0) AND (percent <= 100.0)))) + + + + + + + + + + + + + fund_allocation_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + amount + numeric(100,2) + + + + + + + + + + + + + + + + + + + + + fund_combined_balance + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + fund_debit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + fund + integer + + + + + + + NOT NULL; + + + + + + + + + + + + origin_amount + numeric + + + + NOT NULL; + + + + + + + + origin_currency_type + text + + + + + + + NOT NULL; + + + + + + + + + + + + amount + numeric + + + + NOT NULL; + + + + + + + + encumbrance + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + debit_type + text + + + + NOT NULL; + + + + + + + + xfer_destination + integer + + + + + + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing acq.lineitem_detail via Foreign Key Constraints + + + + + + + + + + + + + + + + fund_debit_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + encumbrance + boolean + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + fund_encumbrance_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + fund_spent_balance + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + fund_spent_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + fund + integer + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + fund_tag + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing acq.fund_tag_map via Foreign Key Constraints + + + + + + + + + + + + + + + + fund_tag_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + fund + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + tag + integer + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + funding_source + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + currency_type + text + + + + + + + NOT NULL; + + + + + + + + + + + + code + text + + + + + UNIQUE; + + + + + + + + + + + + + + + + + + + + Tables referencing acq.fund_allocation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + funding_source_allocation_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + funding_source + integer + + + + + + + + + + amount + numeric(100,2) + + + + + + + + + + + + + + + + + + + + + funding_source_balance + + + + + + + + Field + Data Type + Constraints and References + + + + + + funding_source + integer + + + + + + + + + + amount + numeric(100,2) + + + + + + + + + + + + + + + + + + + + + funding_source_credit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + funding_source + integer + + + + + + + NOT NULL; + + + + + + + + + + + + amount + numeric + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + funding_source_credit_total + + + + + + + + Field + Data Type + Constraints and References + + + + + + funding_source + integer + + + + + + + + + + amount + numeric + + + + + + + + + + + + + + + + + + + + + lineitem + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + selector + integer + + + + + + + NOT NULL; + + + + + + + + + + + + provider + integer + + + + + + + + + + + + + + + + + purchase_order + integer + + + + + + + + + + + + + + + + + picklist + integer + + + + + + + + + + + + + + + + + expected_recv_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + eg_bib_id + integer + + + + + + + + + + + + + + + + + source_label + text + + + + + + + + + + item_count + integer + + + + NOT NULL; + + + + + + + + state + text + + + + NOT NULL; + + + DEFAULT 'new'::text; + + + + + + + + + + + + + Constraints on lineitem + + + picklist_or_po + CHECK (((picklist IS NOT NULL) OR (purchase_order IS NOT NULL))) + + + + + + + + + + Tables referencing acq.lineitem_attr via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + lineitem_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + definition + bigint + + + + NOT NULL; + + + + + + + + lineitem + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + attr_type + text + + + + NOT NULL; + + + + + + + + attr_name + text + + + + NOT NULL; + + + + + + + + attr_value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + lineitem_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + lineitem_detail + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + lineitem + integer + + + + + + + NOT NULL; + + + + + + + + + + + + fund + integer + + + + + + + + + + + + + + + + + fund_debit + integer + + + + + + + + + + + + + + + + + eg_copy_id + bigint + + + + + + + + + + + + + + + + + barcode + text + + + + + + + + + + cn_label + text + + + + + + + + + + note + text + + + + + + + + + + collection_code + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + + + + + + + + owning_lib + integer + + + + + + + + + + + + + + + + + location + integer + + + + + + + + + + + + + + + + + recv_time + timestamp with time zone + + + + + + + + + + + + + + + + + + + + + lineitem_generated_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('acq.lineitem_attr_definition_id_seq'::regclass); + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + lineitem_local_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('acq.lineitem_attr_definition_id_seq'::regclass); + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + lineitem_marc_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('acq.lineitem_attr_definition_id_seq'::regclass); + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + lineitem_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + lineitem + integer + + + + + + + NOT NULL; + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + lineitem_provider_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('acq.lineitem_attr_definition_id_seq'::regclass); + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + provider + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + lineitem_usr_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('acq.lineitem_attr_definition_id_seq'::regclass); + + + + + + + + + code + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + picklist + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + po_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + purchase_order + integer + + + + + + + NOT NULL; + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + provider + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + owner + integer + + + + + UNIQUE#2 + ; + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + currency_type + text + + + + + + + NOT NULL; + + + + + + + + + + + + code + text + + + + + UNIQUE#2 + ; + + + + NOT NULL; + + + + + + + + + + holding_tag + text + + + + + + + + + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + provider_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + valid + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + address_type + text + + + + + + + + + + provider + integer + + + + + + + NOT NULL; + + + + + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + provider_contact + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + provider + integer + + + + + + + NOT NULL; + + + + + + + + + + + + name + text + + + + + + + + + + role + text + + + + + + + + + + email + text + + + + + + + + + + phone + text + + + + + + + + + + + + + + + + + + Tables referencing acq.provider_contact_address via Foreign Key Constraints + + + + + + + + + + + + + + + + provider_contact_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + valid + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + address_type + text + + + + + + + + + + contact + integer + + + + + + + NOT NULL; + + + + + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + provider_holding_subfield_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + provider + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + subfield + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + purchase_order + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + ordering_agency + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + provider + integer + + + + + + + NOT NULL; + + + + + + + + + + + + state + text + + + + NOT NULL; + + + DEFAULT 'new'::text; + + + + + + + order_date + timestamp with time zone + + + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema action + + + aged_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr_post_code + text + + + + + + + + + + usr_home_ou + integer + + + + NOT NULL; + + + + + + + + usr_profile + integer + + + + NOT NULL; + + + + + + + + usr_birth_year + integer + + + + + + + + + + copy_call_number + integer + + + + NOT NULL; + + + + + + + + copy_location + integer + + + + NOT NULL; + + + + + + + + copy_owning_lib + integer + + + + NOT NULL; + + + + + + + + copy_circ_lib + integer + + + + NOT NULL; + + + + + + + + copy_bib_record + bigint + + + + NOT NULL; + + + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + NOT NULL; + + + + + + + + circ_lib + integer + + + + NOT NULL; + + + + + + + + circ_staff + integer + + + + NOT NULL; + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + NOT NULL; + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + NOT NULL; + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + NOT NULL; + + + + + + + + desk_renewal + boolean + + + + NOT NULL; + + + + + + + + opac_renewal + boolean + + + + NOT NULL; + + + + + + + + duration_rule + text + + + + NOT NULL; + + + + + + + + recuring_fine_rule + text + + + + NOT NULL; + + + + + + + + max_fine_rule + text + + + + NOT NULL; + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + all_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr_post_code + text + + + + + + + + + + usr_home_ou + integer + + + + + + + + + + usr_profile + integer + + + + + + + + + + usr_birth_year + integer + + + + + + + + + + copy_call_number + bigint + + + + + + + + + + copy_location + integer + + + + + + + + + + copy_owning_lib + integer + + + + + + + + + + copy_circ_lib + integer + + + + + + + + + + copy_bib_record + bigint + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + billable_circulations + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.billable_xact_id_seq'::regclass); + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + circ_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + circ_staff + integer + + + + NOT NULL; + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + NOT NULL; + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + NOT NULL; + + + DEFAULT '1 day'::interval; + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + desk_renewal + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac_renewal + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + duration_rule + text + + + + NOT NULL; + + + + + + + + recuring_fine_rule + text + + + + NOT NULL; + + + + + + + + max_fine_rule + text + + + + NOT NULL; + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + Constraints on circulation + + + circulation_stop_fines_check + CHECK ((stop_fines = ANY (ARRAY['CHECKIN'::text, 'CLAIMSRETURNED'::text, 'LOST'::text, 'MAXFINES'::text, 'RENEW'::text, 'LONGOVERDUE'::text]))) + + + + + + + + + + + + + hold_copy_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + hold + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + target_copy + bigint + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + hold_notification + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + hold + integer + + + + + + + NOT NULL; + + + + + + + + + + + + notify_staff + integer + + + + + + + + + + + + + + + + + notify_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + method + text + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + hold_request + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + request_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + capture_time + timestamp with time zone + + + + + + + + + + fulfillment_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + return_time + timestamp with time zone + + + + + + + + + + prev_check_time + timestamp with time zone + + + + + + + + + + expire_time + timestamp with time zone + + + + + + + + + + cancel_time + timestamp with time zone + + + + + + + + + + cancel_cause + integer + + + + + + + + + + + + + + + + + cancel_note + text + + + + + + + + + + target + bigint + + + + NOT NULL; + + + + + + + + current_copy + bigint + + + + + + + + + + + + + + + + + fulfillment_staff + integer + + + + + + + + + + + + + + + + + fulfillment_lib + integer + + + + + + + + + + + + + + + + + request_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + requestor + integer + + + + + + + NOT NULL; + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + selection_ou + integer + + + + NOT NULL; + + + + + + + + selection_depth + integer + + + + NOT NULL; + + + + + + + + pickup_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + hold_type + text + + + + NOT NULL; + + + + + + + + holdable_formats + text + + + + + + + + + + phone_notify + text + + + + + + + + + + email_notify + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + frozen + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + thaw_date + timestamp with time zone + + + + + + + + + + shelf_time + timestamp with time zone + + + + + + + + + + + + + + + + Constraints on hold_request + + + hold_request_hold_type_check + CHECK ((hold_type = ANY (ARRAY['M'::text, 'T'::text, 'V'::text, 'C'::text]))) + + + + + + + + + + Tables referencing action.hold_copy_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + hold_request_cancel_cause + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + + + + + + + + + + + + + + + + + Tables referencing action.hold_request via Foreign Key Constraints + + + + + + + + + + + + + + + + hold_transit_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + PRIMARY KEY + + + + + + DEFAULT nextval('action.transit_copy_id_seq'::regclass); + + + + + + + + + source_send_time + timestamp with time zone + + + + + + + + + + dest_recv_time + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + integer + + + + NOT NULL; + + + + + + + + dest + integer + + + + NOT NULL; + + + + + + + + prev_hop + integer + + + + + + + + + + copy_status + integer + + + + NOT NULL; + + + + + + + + persistant_transfer + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + hold + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + in_house_use + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + use_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + non_cat_in_house_use + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item_type + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + use_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + non_cataloged_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + patron + integer + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + circ_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + item_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + circ_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + open_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + reservation_transit_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + PRIMARY KEY + + + + + + DEFAULT nextval('action.transit_copy_id_seq'::regclass); + + + + + + + + + source_send_time + timestamp with time zone + + + + + + + + + + dest_recv_time + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + integer + + + + NOT NULL; + + + + + + + + dest + integer + + + + NOT NULL; + + + + + + + + prev_hop + integer + + + + + + + + + + copy_status + integer + + + + NOT NULL; + + + + + + + + persistant_transfer + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + reservation + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + survey + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + start_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + end_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT (now() + '10 years'::interval); + + + + + + + usr_summary + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + poll + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + required + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + name + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action.survey_question via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + survey_answer + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + question + integer + + + + + + + NOT NULL; + + + + + + + + + + + + answer + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action.survey_response via Foreign Key Constraints + + + + + + + + + + + + + + + + survey_question + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + survey + integer + + + + + + + NOT NULL; + + + + + + + + + + + + question + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action.survey_answer via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + survey_response + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + response_group_id + integer + + + + + + + + + + usr + integer + + + + + + + + + + survey + integer + + + + + + + NOT NULL; + + + + + + + + + + + + question + integer + + + + + + + NOT NULL; + + + + + + + + + + + + answer + integer + + + + + + + NOT NULL; + + + + + + + + + + + + answer_date + timestamp with time zone + + + + + + + + + + effective_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + transit_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + source_send_time + timestamp with time zone + + + + + + + + + + dest_recv_time + timestamp with time zone + + + + + + + + + + target_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + integer + + + + + + + NOT NULL; + + + + + + + + + + + + dest + integer + + + + + + + NOT NULL; + + + + + + + + + + + + prev_hop + integer + + + + + + + + + + + + + + + + + copy_status + integer + + + + + + + NOT NULL; + + + + + + + + + + + + persistant_transfer + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action.transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + unfulfilled_hold_list + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + current_copy + bigint + + + + NOT NULL; + + + + + + + + hold + integer + + + + NOT NULL; + + + + + + + + circ_lib + integer + + + + NOT NULL; + + + + + + + + fail_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + +
+ +
+ Schema action_trigger + + + cleanup + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + + + collector + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.environment via Foreign Key Constraints + + + + + + + + + + + + + + + + environment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + event_def + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + path + text + + + + + + + + + + collector + text + + + + + + + + + + + + + + + + + label + text + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + + + Constraints on environment + + + environment_label_check + CHECK ((label <> ALL (ARRAY['result'::text, 'target'::text, 'event'::text]))) + + + + + + + + + + + + + event + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + target + bigint + + + + NOT NULL; + + + + + + + + event_def + integer + + + + + + + + + + + + + + + + + add_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + run_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + start_time + timestamp with time zone + + + + + + + + + + update_time + timestamp with time zone + + + + + + + + + + complete_time + timestamp with time zone + + + + + + + + + + update_process + integer + + + + + + + + + + state + text + + + + NOT NULL; + + + DEFAULT 'pending'::text; + + + + + + + template_output + bigint + + + + + + + + + + + + + + + + + error_output + bigint + + + + + + + + + + + + + + + + + + + + + + + Constraints on event + + + event_state_check + CHECK ((state = ANY (ARRAY['pending'::text, 'invalid'::text, 'found'::text, 'collecting'::text, 'collected'::text, 'validating'::text, 'valid'::text, 'reacting'::text, 'reacted'::text, 'cleaning'::text, 'complete'::text, 'error'::text]))) + + + + + + + + + + + + + event_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + owner + integer + + + + + UNIQUE#2 + ; + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + name + text + + + + + UNIQUE#2 + ; + + + + NOT NULL; + + + + + + + + + + hook + text + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + validator + text + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + reactor + text + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + cleanup_success + text + + + + + + + + + + + + + + + + + cleanup_failure + text + + + + + + + + + + + + + + + + + delay + interval + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT '00:05:00'::interval; + + + + + + + + + max_delay + interval + + + + + + + + + + delay_field + text + + + + + UNIQUE#1 + ; + + + + + + + + + + + + group_field + text + + + + + + + + + + template + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.environment via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + event_output + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + is_error + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + data + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing action_trigger.event via Foreign Key Constraints + + + + + + + + + + + + + + + + event_params + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + event_def + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + param + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + hook + + + + + + + + Field + Data Type + Constraints and References + + + + + + key + text + + + + PRIMARY KEY + + + + + + + + + + + + + core_type + text + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + passive + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + + + reactor + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + + + validator + + + + + + + + Field + Data Type + Constraints and References + + + + + + module + text + + + + PRIMARY KEY + + + + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing action_trigger.event_definition via Foreign Key Constraints + + + + + + + + + + + + + + +
+ +
+ Schema actor + + + card + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + barcode + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + + + + hours_of_operation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + PRIMARY KEY + + + + + + + + + + + + + + + + + dow_0_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_0_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_1_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_1_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_2_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_2_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_3_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_3_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_4_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_4_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_5_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_5_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + dow_6_open + time without time zone + + + + NOT NULL; + + + DEFAULT '09:00:00'::time without time zone; + + + + + + + dow_6_close + time without time zone + + + + NOT NULL; + + + DEFAULT '17:00:00'::time without time zone; + + + + + + + + + + + + + + + + + + org_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + valid + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + address_type + text + + + + NOT NULL; + + + DEFAULT 'MAILING'::text; + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing actor.org_unit via Foreign Key Constraints + + + + + + + + + + + + + + + + org_lasso + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + + + + + + + + + + + + + + + + + Tables referencing actor.org_lasso_map via Foreign Key Constraints + + + + + + + + + + + + + + + + org_lasso_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + lasso + integer + + + + + + + NOT NULL; + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + org_unit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent_ou + integer + + + + + + + + + + + + + + + + + ou_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + ill_address + integer + + + + + + + + + + + + + + + + + holds_address + integer + + + + + + + + + + + + + + + + + mailing_address + integer + + + + + + + + + + + + + + + + + billing_address + integer + + + + + + + + + + + + + + + + + shortname + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + email + text + + + + + + + + + + phone + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing acq.distribution_formula via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + org_unit_closed + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + close_start + timestamp with time zone + + + + NOT NULL; + + + + + + + + close_end + timestamp with time zone + + + + NOT NULL; + + + + + + + + reason + text + + + + + + + + + + + + + + + + + + + + + org_unit_proximity + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + from_org + integer + + + + + + + + + + to_org + integer + + + + + + + + + + prox + integer + + + + + + + + + + + + + + + + + + + + + org_unit_setting + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + org_unit_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + opac_label + text + + + + NOT NULL; + + + + + + + + depth + integer + + + + NOT NULL; + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + can_have_vols + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + can_have_users + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing actor.org_unit via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + stat_cat + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing actor.stat_cat_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + stat_cat_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + value + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + stat_cat_entry_usr_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat_entry + text + + + + NOT NULL; + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + target_usr + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + usr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + card + integer + + + + + UNIQUE; + + + + + + + + + + + + profile + integer + + + + + + + NOT NULL; + + + + + + + + + + + + usrname + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + email + text + + + + + + + + + + passwd + text + + + + NOT NULL; + + + + + + + + standing + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + ident_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + ident_value + text + + + + + + + + + + ident_type2 + integer + + + + + + + + + + + + + + + + + ident_value2 + text + + + + + + + + + + net_access_level + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + photo_url + text + + + + + + + + + + prefix + text + + + + + + + + + + first_given_name + text + + + + NOT NULL; + + + + + + + + second_given_name + text + + + + + + + + + + family_name + text + + + + NOT NULL; + + + + + + + + suffix + text + + + + + + + + + + alias + text + + + + + + + + + + day_phone + text + + + + + + + + + + evening_phone + text + + + + + + + + + + other_phone + text + + + + + + + + + + mailing_address + integer + + + + + + + + + + + + + + + + + billing_address + integer + + + + + + + + + + + + + + + + + home_ou + integer + + + + + + + NOT NULL; + + + + + + + + + + + + dob + timestamp with time zone + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + master_account + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + super_user + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + barred + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + juvenile + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + usrgroup + serial + + + + NOT NULL; + + + + + + + + claims_returned_count + integer + + + + NOT NULL; + + + + + + + + credit_forward_balance + numeric(6,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + last_xact_id + text + + + + NOT NULL; + + + DEFAULT 'none'::text; + + + + + + + alert_message + text + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + expire_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT (now() + '3 years'::interval); + + + + + + + + + + + + + + + Tables referencing acq.fund_allocation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + usr_address + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + valid + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + within_city_limits + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + address_type + text + + + + NOT NULL; + + + DEFAULT 'MAILING'::text; + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + pending + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + replaces + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + usr_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + title + text + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + usr_org_unit_opt_in + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + staff + integer + + + + + + + NOT NULL; + + + + + + + + + + + + opt_in_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + opt_in_ws + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + usr_password_reset + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + uuid + text + + + + NOT NULL; + + + + + + + + usr + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + request_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + has_been_reset + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + usr_setting + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + usr_standing_penalty + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + org_unit + integer + + + + + + + NOT NULL; + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + standing_penalty + integer + + + + + + + NOT NULL; + + + + + + + + + + + + staff + integer + + + + + + + + + + + + + + + + + set_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + stop_date + timestamp with time zone + + + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + workstation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + owning_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + Tables referencing actor.usr_org_unit_opt_in via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema asset + + + call_number + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + editor + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + edit_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + owning_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing asset.call_number_note via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + call_number_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + call_number + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + title + text + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + circ_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + call_number + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + editor + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + NOT NULL; + + + + + + + + + + + + location + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + loan_duration + integer + + + + NOT NULL; + + + + + + + + fine_level + integer + + + + NOT NULL; + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deposit + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + ref + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deposit_amount + numeric(6,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + NOT NULL; + + + + + + + + circ_modifier + text + + + + + + + + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on copy + + + copy_fine_level_check + CHECK ((fine_level = ANY (ARRAY[1, 2, 3]))) + + + + + + copy_ loan_ duration_ check + CHECK ((loan_duration = ANY (ARRAY[1, 2, 3]))) + + + + + + + + + + Tables referencing acq.lineitem_detail via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + copy_location + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + owning_lib + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + hold_verify + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + circulate + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing acq.distribution_formula_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + copy_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owning_copy + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + creator + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + create_date + timestamp with time zone + + + + + DEFAULT now(); + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + title + text + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy_transparency + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + deposit_amount + numeric(6,2) + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_lib + integer + + + + + + + + + + + + + + + + + loan_duration + integer + + + + + + + + + + fine_level + integer + + + + + + + + + + holdable + boolean + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + ref + boolean + + + + + + + + + + opac_visible + boolean + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + Constraints on copy_transparency + + + copy_ transparency_ fine_ level_ check + CHECK ((fine_level = ANY (ARRAY[1, 2, 3]))) + + + + + + copy_ transparency_ loan_ duration_ check + CHECK ((loan_duration = ANY (ARRAY[1, 2, 3]))) + + + + + + + + + + Tables referencing asset.copy_transparency_map via Foreign Key Constraints + + + + + + + + + + + + + + + + copy_transparency_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + transparency + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_copy + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + stat_cat + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing asset.stat_cat_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + stat_cat_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + value + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing asset.stat_cat_entry_copy_map via Foreign Key Constraints + + + + + + + + + + + + + + + + stat_cat_entry_copy_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + stat_cat_entry + integer + + + + + + + NOT NULL; + + + + + + + + + + + + owning_copy + bigint + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + stat_cat_entry_transparency_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + stat_cat + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + stat_cat_entry + integer + + + + NOT NULL; + + + + + + + + owning_transparency + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + uri + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + href + text + + + + NOT NULL; + + + + + + + + label + text + + + + + + + + + + use_restriction + text + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing asset.uri_call_number_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + uri_call_number_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + uri + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + call_number + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema auditor + + + actor_org_unit_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + integer + + + + NOT NULL; + + + + + + + + parent_ou + integer + + + + + + + + + + ou_type + integer + + + + NOT NULL; + + + + + + + + ill_address + integer + + + + + + + + + + holds_address + integer + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + shortname + text + + + + NOT NULL; + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + email + text + + + + + + + + + + phone + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + actor_org_unit_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + integer + + + + + + + + + + parent_ou + integer + + + + + + + + + + ou_type + integer + + + + + + + + + + ill_address + integer + + + + + + + + + + holds_address + integer + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + shortname + text + + + + + + + + + + name + text + + + + + + + + + + email + text + + + + + + + + + + phone + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + + + + + + + + + + + + actor_usr_address_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + integer + + + + NOT NULL; + + + + + + + + valid + boolean + + + + NOT NULL; + + + + + + + + within_city_limits + boolean + + + + NOT NULL; + + + + + + + + address_type + text + + + + NOT NULL; + + + + + + + + usr + integer + + + + NOT NULL; + + + + + + + + street1 + text + + + + NOT NULL; + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + NOT NULL; + + + + + + + + county + text + + + + + + + + + + state + text + + + + NOT NULL; + + + + + + + + country + text + + + + NOT NULL; + + + + + + + + post_code + text + + + + NOT NULL; + + + + + + + + pending + boolean + + + + NOT NULL; + + + + + + + + replaces + integer + + + + + + + + + + + + + + + + + + + + + actor_usr_address_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + integer + + + + + + + + + + valid + boolean + + + + + + + + + + within_city_limits + boolean + + + + + + + + + + address_type + text + + + + + + + + + + usr + integer + + + + + + + + + + street1 + text + + + + + + + + + + street2 + text + + + + + + + + + + city + text + + + + + + + + + + county + text + + + + + + + + + + state + text + + + + + + + + + + country + text + + + + + + + + + + post_code + text + + + + + + + + + + pending + boolean + + + + + + + + + + replaces + integer + + + + + + + + + + + + + + + + + + + + + actor_usr_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + integer + + + + NOT NULL; + + + + + + + + card + integer + + + + + + + + + + profile + integer + + + + NOT NULL; + + + + + + + + usrname + text + + + + NOT NULL; + + + + + + + + email + text + + + + + + + + + + passwd + text + + + + NOT NULL; + + + + + + + + standing + integer + + + + NOT NULL; + + + + + + + + ident_type + integer + + + + NOT NULL; + + + + + + + + ident_value + text + + + + + + + + + + ident_type2 + integer + + + + + + + + + + ident_value2 + text + + + + + + + + + + net_access_level + integer + + + + NOT NULL; + + + + + + + + photo_url + text + + + + + + + + + + prefix + text + + + + + + + + + + first_given_name + text + + + + NOT NULL; + + + + + + + + second_given_name + text + + + + + + + + + + family_name + text + + + + NOT NULL; + + + + + + + + suffix + text + + + + + + + + + + alias + text + + + + + + + + + + day_phone + text + + + + + + + + + + evening_phone + text + + + + + + + + + + other_phone + text + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + home_ou + integer + + + + NOT NULL; + + + + + + + + dob + timestamp with time zone + + + + + + + + + + active + boolean + + + + NOT NULL; + + + + + + + + master_account + boolean + + + + NOT NULL; + + + + + + + + super_user + boolean + + + + NOT NULL; + + + + + + + + barred + boolean + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + juvenile + boolean + + + + NOT NULL; + + + + + + + + usrgroup + integer + + + + NOT NULL; + + + + + + + + claims_returned_count + integer + + + + NOT NULL; + + + + + + + + credit_forward_balance + numeric(6,2) + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + alert_message + text + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + expire_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + actor_usr_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + integer + + + + + + + + + + card + integer + + + + + + + + + + profile + integer + + + + + + + + + + usrname + text + + + + + + + + + + email + text + + + + + + + + + + passwd + text + + + + + + + + + + standing + integer + + + + + + + + + + ident_type + integer + + + + + + + + + + ident_value + text + + + + + + + + + + ident_type2 + integer + + + + + + + + + + ident_value2 + text + + + + + + + + + + net_access_level + integer + + + + + + + + + + photo_url + text + + + + + + + + + + prefix + text + + + + + + + + + + first_given_name + text + + + + + + + + + + second_given_name + text + + + + + + + + + + family_name + text + + + + + + + + + + suffix + text + + + + + + + + + + alias + text + + + + + + + + + + day_phone + text + + + + + + + + + + evening_phone + text + + + + + + + + + + other_phone + text + + + + + + + + + + mailing_address + integer + + + + + + + + + + billing_address + integer + + + + + + + + + + home_ou + integer + + + + + + + + + + dob + timestamp with time zone + + + + + + + + + + active + boolean + + + + + + + + + + master_account + boolean + + + + + + + + + + super_user + boolean + + + + + + + + + + barred + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + juvenile + boolean + + + + + + + + + + usrgroup + integer + + + + + + + + + + claims_returned_count + integer + + + + + + + + + + credit_forward_balance + numeric(6,2) + + + + + + + + + + last_xact_id + text + + + + + + + + + + alert_message + text + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + expire_date + timestamp with time zone + + + + + + + + + + + + + + + + + + + + + asset_call_number_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + bigint + + + + NOT NULL; + + + + + + + + creator + bigint + + + + NOT NULL; + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + editor + bigint + + + + NOT NULL; + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + record + bigint + + + + NOT NULL; + + + + + + + + owning_lib + integer + + + + NOT NULL; + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + asset_call_number_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + bigint + + + + + + + + + + creator + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + editor + bigint + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + record + bigint + + + + + + + + + + owning_lib + integer + + + + + + + + + + label + text + + + + + + + + + + deleted + boolean + + + + + + + + + + + + + + + + + + + + + asset_copy_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + bigint + + + + NOT NULL; + + + + + + + + circ_lib + integer + + + + NOT NULL; + + + + + + + + creator + bigint + + + + NOT NULL; + + + + + + + + call_number + bigint + + + + NOT NULL; + + + + + + + + editor + bigint + + + + NOT NULL; + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + NOT NULL; + + + + + + + + location + integer + + + + NOT NULL; + + + + + + + + loan_duration + integer + + + + NOT NULL; + + + + + + + + fine_level + integer + + + + NOT NULL; + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + NOT NULL; + + + + + + + + deposit + boolean + + + + NOT NULL; + + + + + + + + ref + boolean + + + + NOT NULL; + + + + + + + + holdable + boolean + + + + NOT NULL; + + + + + + + + deposit_amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + NOT NULL; + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + asset_copy_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + creator + bigint + + + + + + + + + + call_number + bigint + + + + + + + + + + editor + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + + + + location + integer + + + + + + + + + + loan_duration + integer + + + + + + + + + + fine_level + integer + + + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + ref + boolean + + + + + + + + + + holdable + boolean + + + + + + + + + + deposit_amount + numeric(6,2) + + + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + + + + + + + + + + + + biblio_record_entry_history + + + + + + + + Field + Data Type + Constraints and References + + + + + + audit_id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + audit_time + timestamp with time zone + + + + NOT NULL; + + + + + + + + audit_action + text + + + + NOT NULL; + + + + + + + + id + bigint + + + + NOT NULL; + + + + + + + + creator + integer + + + + NOT NULL; + + + + + + + + editor + integer + + + + NOT NULL; + + + + + + + + source + integer + + + + + + + + + + quality + integer + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + + + + + + active + boolean + + + + NOT NULL; + + + + + + + + deleted + boolean + + + + NOT NULL; + + + + + + + + fingerprint + text + + + + + + + + + + tcn_source + text + + + + NOT NULL; + + + + + + + + tcn_value + text + + + + NOT NULL; + + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + biblio_record_entry_lifecycle + + + + + + + + Field + Data Type + Constraints and References + + + + + + ?column? + bigint + + + + + + + + + + audit_time + timestamp with time zone + + + + + + + + + + audit_action + text + + + + + + + + + + id + bigint + + + + + + + + + + creator + integer + + + + + + + + + + editor + integer + + + + + + + + + + source + integer + + + + + + + + + + quality + integer + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + active + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + fingerprint + text + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + marc + text + + + + + + + + + + last_xact_id + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema authority + + + full_rec + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + NOT NULL; + + + + + + + + tag + character(3) + + + + NOT NULL; + + + + + + + + ind1 + text + + + + + + + + + + ind2 + text + + + + + + + + + + subfield + text + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + rec_descriptor + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + + + + record_status + text + + + + + + + + + + char_encoding + text + + + + + + + + + + + + + + + + + + + + + record_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + arn_source + text + + + + NOT NULL; + + + DEFAULT 'AUTOGEN'::text; + + + + + + + arn_value + text + + + + NOT NULL; + + + + + + + + creator + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + editor + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + source + integer + + + + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing authority.record_note via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + record_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + creator + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + editor + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + tracing_links + + + + + + + + Field + Data Type + Constraints and References + + + + + + record + bigint + + + + + + + + + + main_id + bigint + + + + + + + + + + main_tag + character(3) + + + + + + + + + + main_value + text + + + + + + + + + + relationship + text + + + + + + + + + + use_restriction + text + + + + + + + + + + deprecation + text + + + + + + + + + + display_restriction + text + + + + + + + + + + link_id + bigint + + + + + + + + + + link_tag + character(3) + + + + + + + + + + link_value + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema biblio + + + record_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + source + integer + + + + + + + + + + quality + integer + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + fingerprint + text + + + + + + + + + + tcn_source + text + + + + NOT NULL; + + + DEFAULT 'AUTOGEN'::text; + + + + + + + tcn_value + text + + + + NOT NULL; + + + DEFAULT biblio.next_autogen_tcn_value(); + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing acq.lineitem via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + record_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + creator + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + editor + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + +
+ +
+ Schema booking + + + reservation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.billable_xact_id_seq'::regclass); + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + request_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + start_time + timestamp with time zone + + + + + + + + + + end_time + timestamp with time zone + + + + + + + + + + capture_time + timestamp with time zone + + + + + + + + + + cancel_time + timestamp with time zone + + + + + + + + + + pickup_time + timestamp with time zone + + + + + + + + + + return_time + timestamp with time zone + + + + + + + + + + booking_interval + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + fine_amount + numeric(8,2) + + + + + + + + + + max_fine + numeric(8,2) + + + + + + + + + + target_resource_type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_resource + integer + + + + + + + + + + + + + + + + + current_resource + integer + + + + + + + + + + + + + + + + + request_lib + integer + + + + + + + NOT NULL; + + + + + + + + + + + + pickup_lib + integer + + + + + + + + + + + + + + + + + capture_staff + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing action.reservation_transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + reservation_attr_value_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + reservation + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + attr_value + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + resource + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + type + integer + + + + + + + NOT NULL; + + + + + + + + + + + + overbook + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + barcode + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + deposit + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + deposit_amount + numeric(8,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + user_fee + numeric(8,2) + + + + NOT NULL; + + + DEFAULT 0.00; + + + + + + + + + + + + + + + Tables referencing action.reservation_transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + resource_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + resource_type + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + required + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing booking.resource_attr_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + resource_attr_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + resource + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + resource_attr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + value + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + resource_attr_value + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + attr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + valid_value + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing booking.reservation_attr_value_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + resource_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + elbow_room + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + fine_amount + numeric(8,2) + + + + NOT NULL; + + + + + + + + max_fine + numeric(8,2) + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + catalog_item + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + transferable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + record + integer + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing booking.reservation via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema config + + + audience_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + + + + + + + + + + + + bib_level_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + bib_source + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + quality + integer + + + + + + + + + + source + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + transcendant + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on bib_source + + + bib_source_quality_check + CHECK (((quality >= 0) AND (quality <= 100))) + + + + + + + + + + Tables referencing vandelay.queued_bib_record via Foreign Key Constraints + + + + + + + + + + + + + + + + billing_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + default_price + numeric(6,2) + + + + + + + + + + + + + + + + + + Tables referencing money.billing via Foreign Key Constraints + + + + + + + + + + + + + + + + circ_matrix_circ_mod_test + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + matchpoint + integer + + + + + + + NOT NULL; + + + + + + + + + + + + items_out + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_circ_mod_test_map via Foreign Key Constraints + + + + + + + + + + + + + + + + circ_matrix_circ_mod_test_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + circ_mod_test + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_mod + text + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + circ_matrix_matchpoint + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + org_unit + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_modifier + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_type + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_form + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_vr_format + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + ref_flag + boolean + + + + + UNIQUE#1 + ; + + + + + + + + + + + + juvenile_flag + boolean + + + + + UNIQUE#1 + ; + + + + + + + + + + + + is_renewal + boolean + + + + + UNIQUE#1 + ; + + + + + + + + + + + + usr_age_lower_bound + interval + + + + + UNIQUE#1 + ; + + + + + + + + + + + + usr_age_upper_bound + interval + + + + + UNIQUE#1 + ; + + + + + + + + + + + + circulate + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + duration_rule + integer + + + + + + + NOT NULL; + + + + + + + + + + + + recurring_fine_rule + integer + + + + + + + NOT NULL; + + + + + + + + + + + + max_fine_rule + integer + + + + + + + NOT NULL; + + + + + + + + + + + + script_test + text + + + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_circ_mod_test via Foreign Key Constraints + + + + + + + + + + + + + + + + circ_modifier + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + sip2_media_type + text + + + + NOT NULL; + + + + + + + + magnetic_media + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing acq.lineitem_detail via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + copy_status + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + opac_visible + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action.transit_copy via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + hold_matrix_matchpoint + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + user_home_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + request_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + pickup_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + item_owning_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + item_circ_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + usr_grp + integer + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + requestor_grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + circ_modifier + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_type + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_form + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + marc_vr_format + text + + + + + + + + UNIQUE#1 + ; + + + + + + + + + + + + + + + + juvenile_flag + boolean + + + + + UNIQUE#1 + ; + + + + + + + + + + + + ref_flag + boolean + + + + + UNIQUE#1 + ; + + + + + + + + + + + + holdable + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + distance_is_from_owner + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + transit_range + integer + + + + + + + + + + + + + + + + + max_holds + integer + + + + + + + + + + include_frozen_holds + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + stop_blocked_user + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + age_hold_protect_rule + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + i18n_core + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + fq_field + text + + + + NOT NULL; + + + + + + + + identity_value + text + + + + NOT NULL; + + + + + + + + translation + text + + + + + + + NOT NULL; + + + + + + + + + + + + string + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + i18n_locale + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + marc_code + text + + + + + + + NOT NULL; + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing config.i18n_core via Foreign Key Constraints + + + + + + + + + + + + + + + + identification_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + idl_field_doc + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + fm_class + text + + + + NOT NULL; + + + + + + + + field + text + + + + NOT NULL; + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + string + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + item_form_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + item_type_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + language_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.i18n_locale via Foreign Key Constraints + + + + + + + + + + + + + + + + lit_form_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + + + + + + + + + + + + metabib_field + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + field_class + text + + + + NOT NULL; + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + weight + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + format + text + + + + NOT NULL; + + + DEFAULT 'mods33'::text; + + + + + + + search_field + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + facet_field + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on metabib_field + + + metabib_field_field_class_check + CHECK ((lower(field_class) = ANY (ARRAY['title'::text, 'author'::text, 'subject'::text, 'keyword'::text, 'series'::text]))) + + + + + + + + + + Tables referencing metabib.author_field_entry via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + net_access_level + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + non_cataloged_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owning_lib + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + circ_duration + interval + + + + NOT NULL; + + + DEFAULT '14 days'::interval; + + + + + + + in_house + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing action.non_cat_in_house_use via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + rule_age_hold_protect + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + age + interval + + + + NOT NULL; + + + + + + + + prox + integer + + + + NOT NULL; + + + + + + + + + + + + + + Constraints on rule_age_hold_protect + + + rule_age_hold_ protect_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.hold_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + rule_circ_duration + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + extended + interval + + + + NOT NULL; + + + + + + + + normal + interval + + + + NOT NULL; + + + + + + + + shrt + interval + + + + NOT NULL; + + + + + + + + max_renewals + integer + + + + NOT NULL; + + + + + + + + + + + + + + Constraints on rule_circ_duration + + + rule_circ_duration_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + rule_max_fine + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + is_percent + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + Constraints on rule_max_fine + + + rule_max_fine_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + rule_recuring_fine + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + high + numeric(6,2) + + + + NOT NULL; + + + + + + + + normal + numeric(6,2) + + + + NOT NULL; + + + + + + + + low + numeric(6,2) + + + + NOT NULL; + + + + + + + + recurance_interval + interval + + + + NOT NULL; + + + DEFAULT '1 day'::interval; + + + + + + + + + + + + + Constraints on rule_recuring_fine + + + rule_recuring_fine_name_check + CHECK ((name ~ '^\\w+$'::text)) + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + standing + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + standing_penalty + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + block_list + text + + + + + + + + + + + + + + + + + + Tables referencing actor.usr_standing_penalty via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + upgrade_log + + + + + + + + Field + Data Type + Constraints and References + + + + + + version + text + + + + PRIMARY KEY + + + + + + + + + + + + + install_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + + + + videorecording_format_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing config.circ_matrix_matchpoint via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + xml_transform + + + + + + + + Field + Data Type + Constraints and References + + + + + + name + text + + + + PRIMARY KEY + + + + + + + + + + + + + namespace_uri + text + + + + NOT NULL; + + + + + + + + prefix + text + + + + NOT NULL; + + + + + + + + xslt + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + z3950_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + source + text + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + NOT NULL; + + + + + + + + label + text + + + + NOT NULL; + + + + + + + + code + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + format + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + truncation + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + z3950_source + + + + + + + + Field + Data Type + Constraints and References + + + + + + name + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + host + text + + + + NOT NULL; + + + + + + + + port + integer + + + + NOT NULL; + + + + + + + + db + text + + + + NOT NULL; + + + + + + + + record_format + text + + + + NOT NULL; + + + DEFAULT 'FI'::text; + + + + + + + transmission_format + text + + + + NOT NULL; + + + DEFAULT 'usmarc'::text; + + + + + + + auth + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + + + + + + + + + Tables referencing config.z3950_attr via Foreign Key Constraints + + + + + + + + + + + + + + +
+ +
+ Schema container + + + biblio_record_entry_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.biblio_record_entry_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + biblio_record_entry_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_biblio_record_entry + integer + + + + + + + NOT NULL; + + + + + + + + + + + + pos + integer + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.biblio_record_entry_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + biblio_record_entry_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + biblio_record_entry_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + biblio_record_entry_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing container.biblio_record_entry_bucket via Foreign Key Constraints + + + + + + + + + + + + + + + + call_number_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.call_number_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + call_number_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_call_number + integer + + + + + + + NOT NULL; + + + + + + + + + + + + pos + integer + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.call_number_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + call_number_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + call_number_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + call_number_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing container.call_number_bucket via Foreign Key Constraints + + + + + + + + + + + + + + + + copy_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.copy_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + copy_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_copy + integer + + + + + + + NOT NULL; + + + + + + + + + + + + pos + integer + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.copy_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + copy_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + copy_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing container.copy_bucket via Foreign Key Constraints + + + + + + + + + + + + + + + + user_bucket + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + btype + text + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + DEFAULT 'misc'::text; + + + + + + + + + + + + + pub + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.user_bucket_item via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + user_bucket_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_user + integer + + + + + + + NOT NULL; + + + + + + + + + + + + pos + integer + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + + + + + + + + + Tables referencing container.user_bucket_item_note via Foreign Key Constraints + + + + + + + + + + + + + + + + user_bucket_item_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + item + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + user_bucket_note + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + bucket + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + user_bucket_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + code + text + + + + PRIMARY KEY + + + + + + + + + + + + + label + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing container.user_bucket via Foreign Key Constraints + + + + + + + + + + + + + + +
+ +
+ Schema extend_reporter + + + full_circ_count + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + circ_count + bigint + + + + + + + + + + + + + + + + + + + + + global_bibs_by_holding_update + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + holding_update + timestamp with time zone + + + + + + + + + + update_type + text + + + + + + + + + + + + + + + + + + + + + legacy_circ_count + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + PRIMARY KEY + + + + + + + + + + + + + + + + + circ_count + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema metabib + + + author_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + full_rec + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + record + bigint + + + + + + + + + + tag + character(3) + + + + + + + + + + ind1 + text + + + + + + + + + + ind2 + text + + + + + + + + + + subfield + text + + + + + + + + + + value + text + + + + + + + + + + index_vector + tsvector + + + + + + + + + + + + + + + + + + + + + keyword_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + metarecord + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + fingerprint + text + + + + NOT NULL; + + + + + + + + master_record + bigint + + + + + + + + + + + + + + + + + mods + text + + + + + + + + + + + + + + + + + + Tables referencing metabib.metarecord_source_map via Foreign Key Constraints + + + + + + + + + + + + + + + + metarecord_source_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + metarecord + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + real_full_rec + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('metabib.full_rec_id_seq'::regclass); + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + tag + character(3) + + + + NOT NULL; + + + + + + + + ind1 + text + + + + + + + + + + ind2 + text + + + + + + + + + + subfield + text + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + rec_descriptor + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + bib_level + text + + + + + + + + + + control_type + text + + + + + + + + + + char_encoding + text + + + + + + + + + + enc_level + text + + + + + + + + + + audience + text + + + + + + + + + + lit_form + text + + + + + + + + + + type_mat + text + + + + + + + + + + cat_form + text + + + + + + + + + + pub_status + text + + + + + + + + + + item_lang + text + + + + + + + + + + vr_format + text + + + + + + + + + + date1 + text + + + + + + + + + + date2 + text + + + + + + + + + + + + + + + + + + + + + series_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + NOT NULL; + + + + + + + + field + integer + + + + NOT NULL; + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + subject_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + title_field_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + source + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + value + text + + + + NOT NULL; + + + + + + + + index_vector + tsvector + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema money + + + billable_xact + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + + + + + + + + + + + + billable_xact_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + billable_xact_with_void_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + billing + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + billing_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + voider + integer + + + + + + + + + + void_time + timestamp with time zone + + + + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + billing_type + text + + + + NOT NULL; + + + + + + + + btype + integer + + + + + + + NOT NULL; + + + + + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + bnm_desk_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + + + + + + + + + + + + + + + + + + + bnm_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + bnm_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + + + + + + + accepting_usr + integer + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + cash_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + + + + + + + + + + + + cashdrawer_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + org_unit + integer + + + + + + + + + + cashdrawer + integer + + + + + + + + + + payment_type + name + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + voided + boolean + + + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + check_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + check_number + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + collections_tracker + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + NOT NULL; + + + + + + + + + + + + collector + integer + + + + + + + NOT NULL; + + + + + + + + + + + + location + integer + + + + + + + NOT NULL; + + + + + + + + + + + + enter_time + timestamp with time zone + + + + + + + + + + + + + + + + + + + + + credit_card_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + cash_drawer + integer + + + + + + + + + + cc_type + text + + + + + + + + + + cc_number + text + + + + + + + + + + expire_month + integer + + + + + + + + + + expire_year + integer + + + + + + + + + + approval_code + text + + + + + + + + + + + + + + + + + + + + + credit_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + desk_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + + + + + + + accepting_usr + integer + + + + + + + + + + cash_drawer + integer + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + forgive_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + goods_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + grocery + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.billable_xact_id_seq'::regclass); + + + + + + + + + usr + integer + + + + NOT NULL; + + + + + + + + xact_start + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + billing_location + integer + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + materialized_billable_xact_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + non_drawer_payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + + + + + + + accepting_usr + integer + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + open_billable_xact_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + billing_location + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_type + name + + + + + + + + + + total_owed + numeric + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_type + text + + + + + + + + + + balance_owed + numeric + + + + + + + + + + xact_type + name + + + + + + + + + + + + + + + + + + + + + open_transaction_billing_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + open_transaction_billing_type_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + open_transaction_payment_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_payment_type + name + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + + + + + + + + + + + + open_usr_circulation_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + open_usr_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + + + + + + + + + + + + payment_view + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + xact + bigint + + + + + + + + + + payment_ts + timestamp with time zone + + + + + + + + + + voided + boolean + + + + + + + + + + amount + numeric(6,2) + + + + + + + + + + note + text + + + + + + + + + + payment_type + name + + + + + + + + + + + + + + + + + + + + + transaction_billing_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + transaction_billing_type_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + transaction_billing_with_void_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_billing_type + text + + + + + + + + + + last_billing_note + text + + + + + + + + + + last_billing_ts + timestamp with time zone + + + + + + + + + + total_owed + numeric + + + + + + + + + + + + + + + + + + + + + transaction_payment_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_payment_type + name + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + + + + + + + + + + + + transaction_payment_with_void_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + last_payment_type + name + + + + + + + + + + last_payment_note + text + + + + + + + + + + last_payment_ts + timestamp with time zone + + + + + + + + + + total_paid + numeric + + + + + + + + + + + + + + + + + + + + + usr_circulation_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + usr_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + usr + integer + + + + + + + + + + total_paid + numeric + + + + + + + + + + total_owed + numeric + + + + + + + + + + balance_owed + numeric + + + + + + + + + + + + + + + + + + + + + work_payment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('money.payment_id_seq'::regclass); + + + + + + + + + xact + bigint + + + + NOT NULL; + + + + + + + + payment_ts + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + voided + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + amount + numeric(6,2) + + + + NOT NULL; + + + + + + + + note + text + + + + + + + + + + amount_collected + numeric(6,2) + + + + NOT NULL; + + + + + + + + accepting_usr + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema offline + + + script + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + session + text + + + + NOT NULL; + + + + + + + + requestor + integer + + + + NOT NULL; + + + + + + + + create_time + integer + + + + NOT NULL; + + + + + + + + workstation + text + + + + NOT NULL; + + + + + + + + logfile + text + + + + NOT NULL; + + + + + + + + time_delta + integer + + + + NOT NULL; + + + + + + + + count + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + session + + + + + + + + Field + Data Type + Constraints and References + + + + + + key + text + + + + PRIMARY KEY + + + + + + + + + + + + + org + integer + + + + NOT NULL; + + + + + + + + description + text + + + + + + + + + + creator + integer + + + + NOT NULL; + + + + + + + + create_time + integer + + + + NOT NULL; + + + + + + + + in_process + integer + + + + NOT NULL; + + + + + + + + start_time + integer + + + + + + + + + + end_time + integer + + + + + + + + + + num_complete + integer + + + + NOT NULL; + + + + + + + + + + + + + + + + + +
+ +
+ Schema permission + + + grp_penalty_threshold + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + org_unit + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + penalty + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + threshold + numeric(8,2) + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + grp_perm_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + perm + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + depth + integer + + + + NOT NULL; + + + + + + + + grantable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + grp_tree + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + name + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + usergroup + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + perm_interval + interval + + + + NOT NULL; + + + DEFAULT '3 years'::interval; + + + + + + + description + text + + + + + + + + + + application_perm + text + + + + + + + + + + + + + + + + + + Tables referencing actor.usr via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + perm_list + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + code + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + + + + + + + + + Tables referencing permission.grp_perm_map via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + usr_grp_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + grp + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + + + usr_object_perm_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + perm + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + object_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + object_id + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + grantable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + usr_perm_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + perm + integer + + + + + UNIQUE#1 + ; + + + + + + + NOT NULL; + + + + + + + + + + + + + + depth + integer + + + + NOT NULL; + + + + + + + + grantable + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + + + + usr_work_ou_map + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + usr + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + work_ou + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema public + +
+ +
+ Schema reporter + + + circ_type + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + type + text + + + + + + + + + + + + + + + + + + + + + currently_running + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + runner_barcode + text + + + + + + + + + + name + text + + + + + + + + + + run_time + timestamp with time zone + + + + + + + + + + scheduled_wait_time + interval + + + + + + + + + + + + + + + + + + + + + demographic + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + dob + timestamp with time zone + + + + + + + + + + general_division + text + + + + + + + + + + + + + + + + + + + + + hold_request_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + target + bigint + + + + + + + + + + hold_type + text + + + + + + + + + + bib_record + bigint + + + + + + + + + + + + + + + + + + + + + materialized_simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + + + + + + + + + + + + old_super_simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + + + + + + + + + + + + output_folder + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + shared + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + share_with + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.output_folder via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + overdue_circs + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + + + + + + + + + + + + overdue_reports + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + runner_barcode + text + + + + + + + + + + name + text + + + + + + + + + + run_time + timestamp with time zone + + + + + + + + + + scheduled_wait_time + interval + + + + + + + + + + + + + + + + + + + + + pending_reports + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + integer + + + + + + + + + + runner_barcode + text + + + + + + + + + + name + text + + + + + + + + + + run_time + timestamp with time zone + + + + + + + + + + scheduled_wait_time + interval + + + + + + + + + + + + + + + + + + + + + report + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + description + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + template + integer + + + + + + + NOT NULL; + + + + + + + + + + + + data + text + + + + NOT NULL; + + + + + + + + folder + integer + + + + + + + NOT NULL; + + + + + + + + + + + + recur + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + recurance + interval + + + + + + + + + + + + + + + + + + Tables referencing reporter.schedule via Foreign Key Constraints + + + + + + + + + + + + + + + + report_folder + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + shared + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + share_with + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.report via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + schedule + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + report + integer + + + + + + + NOT NULL; + + + + + + + + + + + + folder + integer + + + + + + + NOT NULL; + + + + + + + + + + + + runner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + run_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + start_time + timestamp with time zone + + + + + + + + + + complete_time + timestamp with time zone + + + + + + + + + + email + text + + + + + + + + + + excel_format + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + html_format + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + csv_format + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + chart_pie + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + chart_bar + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + chart_line + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + error_code + integer + + + + + + + + + + error_text + text + + + + + + + + + + + + + + + + + + + + + simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + metarecord + bigint + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + uniform_title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + series_title + text + + + + + + + + + + series_statement + text + + + + + + + + + + summary + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + topic_subject + text[] + + + + + + + + + + geographic_subject + text[] + + + + + + + + + + genre + text[] + + + + + + + + + + name_subject + text[] + + + + + + + + + + corporate_subject + text[] + + + + + + + + + + external_uri + text[] + + + + + + + + + + + + + + + + + + + + + super_simple_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + fingerprint + text + + + + + + + + + + quality + integer + + + + + + + + + + tcn_source + text + + + + + + + + + + tcn_value + text + + + + + + + + + + title + text + + + + + + + + + + author + text + + + + + + + + + + publisher + text + + + + + + + + + + pubdate + text + + + + + + + + + + isbn + text[] + + + + + + + + + + issn + text[] + + + + + + + + + + + + + + + + + + + + + template + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + description + text + + + + NOT NULL; + + + + + + + + data + text + + + + NOT NULL; + + + + + + + + folder + integer + + + + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.report via Foreign Key Constraints + + + + + + + + + + + + + + + + template_folder + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + parent + integer + + + + + + + + + + + + + + + + + owner + integer + + + + + + + NOT NULL; + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + name + text + + + + NOT NULL; + + + + + + + + shared + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + share_with + integer + + + + + + + + + + + + + + + + + + + + + + + + + Tables referencing reporter.template via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + xact_billing_totals + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + unvoided + numeric + + + + + + + + + + voided + numeric + + + + + + + + + + total + numeric + + + + + + + + + + + + + + + + + + + + + xact_paid_totals + + + + + + + + Field + Data Type + Constraints and References + + + + + + xact + bigint + + + + + + + + + + unvoided + numeric + + + + + + + + + + voided + numeric + + + + + + + + + + total + numeric + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema search + + + relevance_adjustment + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + bump_type + text + + + + NOT NULL; + + + + + + + + multiplier + numeric + + + + NOT NULL; + + + DEFAULT 1.0; + + + + + + + + + + + + + Constraints on relevance_adjustment + + + relevance_adjustment _bump_type_check + CHECK ((bump_type = ANY (ARRAY['word_order'::text, 'first_word'::text, 'full_match'::text]))) + + + + + + + + + + + +
+ +
+ Schema serial + + + bib_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + generated_coverage + text + + + + NOT NULL; + + + + + + + + textual_holdings + text + + + + + + + + + + + + + + + + + + + + + binding_unit + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + label + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + Tables referencing serial.issuance via Foreign Key Constraints + + + + + + + + + + + + + + + + index_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + generated_coverage + text + + + + NOT NULL; + + + + + + + + textual_holdings + text + + + + + + + + + + + + + + + + + + + + + issuance + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + NOT NULL; + + + + + + + + + + + + target_copy + bigint + + + + + + + + + + + + + + + + + location + bigint + + + + + + + + + + + + + + + + + binding_unit + integer + + + + + + + + + + + + + + + + + label + text + + + + + + + + + + + + + + + + + + + + + record_entry + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + + + + + + + + + + + owning_lib + integer + + + + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + + + + + creator + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + editor + integer + + + + NOT NULL; + + + DEFAULT 1; + + + + + + + source + integer + + + + + + + + + + create_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + edit_date + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + active + boolean + + + + NOT NULL; + + + DEFAULT true; + + + + + + + deleted + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + last_xact_id + text + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + subscription + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + callnumber + bigint + + + + + + + + + + + + + + + + + uri + integer + + + + + + + + + + + + + + + + + start_date + date + + + + NOT NULL; + + + + + + + + end_date + date + + + + + + + + + + + + + + + + + + Tables referencing serial.bib_summary via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + sup_summary + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + subscription + integer + + + + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + + + + + generated_coverage + text + + + + NOT NULL; + + + + + + + + textual_holdings + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema stats + + + fleshed_call_number + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + creator + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + editor + bigint + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + record + bigint + + + + + + + + + + owning_lib + integer + + + + + + + + + + label + text + + + + + + + + + + deleted + boolean + + + + + + + + + + create_date_day + date + + + + + + + + + + edit_date_day + date + + + + + + + + + + create_date_hour + timestamp with time zone + + + + + + + + + + edit_date_hour + timestamp with time zone + + + + + + + + + + item_lang + text + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + + + + + + + + + + + + fleshed_circulation + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + usr + integer + + + + + + + + + + xact_start + timestamp with time zone + + + + + + + + + + xact_finish + timestamp with time zone + + + + + + + + + + unrecovered + boolean + + + + + + + + + + target_copy + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + circ_staff + integer + + + + + + + + + + checkin_staff + integer + + + + + + + + + + checkin_lib + integer + + + + + + + + + + renewal_remaining + integer + + + + + + + + + + due_date + timestamp with time zone + + + + + + + + + + stop_fines_time + timestamp with time zone + + + + + + + + + + checkin_time + timestamp with time zone + + + + + + + + + + create_time + timestamp with time zone + + + + + + + + + + duration + interval + + + + + + + + + + fine_interval + interval + + + + + + + + + + recuring_fine + numeric(6,2) + + + + + + + + + + max_fine + numeric(6,2) + + + + + + + + + + phone_renewal + boolean + + + + + + + + + + desk_renewal + boolean + + + + + + + + + + opac_renewal + boolean + + + + + + + + + + duration_rule + text + + + + + + + + + + recuring_fine_rule + text + + + + + + + + + + max_fine_rule + text + + + + + + + + + + stop_fines + text + + + + + + + + + + start_date_day + date + + + + + + + + + + finish_date_day + date + + + + + + + + + + start_date_hour + timestamp with time zone + + + + + + + + + + finish_date_hour + timestamp with time zone + + + + + + + + + + call_number_label + text + + + + + + + + + + owning_lib + integer + + + + + + + + + + item_lang + text + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + + + + + + + + + + + + fleshed_copy + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + + + + + + + circ_lib + integer + + + + + + + + + + creator + bigint + + + + + + + + + + call_number + bigint + + + + + + + + + + editor + bigint + + + + + + + + + + create_date + timestamp with time zone + + + + + + + + + + edit_date + timestamp with time zone + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + + + + location + integer + + + + + + + + + + loan_duration + integer + + + + + + + + + + fine_level + integer + + + + + + + + + + age_protect + integer + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + ref + boolean + + + + + + + + + + holdable + boolean + + + + + + + + + + deposit_amount + numeric(6,2) + + + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + dummy_title + text + + + + + + + + + + dummy_author + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + deleted + boolean + + + + + + + + + + create_date_day + date + + + + + + + + + + edit_date_day + date + + + + + + + + + + create_date_hour + timestamp with time zone + + + + + + + + + + edit_date_hour + timestamp with time zone + + + + + + + + + + call_number_label + text + + + + + + + + + + owning_lib + integer + + + + + + + + + + item_lang + text + + + + + + + + + + item_type + text + + + + + + + + + + item_form + text + + + + + + + + + + + + + + + + + + + +
+ +
+ Schema vandelay + + + authority_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + code + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing vandelay.queued_authority_record_attr via Foreign Key Constraints + + + + + + + + + + + + + + + + authority_match + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + matched_attr + integer + + + + + + + + + + + + + + + + + queued_record + bigint + + + + + + + + + + + + + + + + + eg_record + bigint + + + + + + + + + + + + + + + + + + + + + + + + + + + + authority_queue + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('vandelay.queue_id_seq'::regclass); + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + complete + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + queue_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'authority'::text; + + + + + + + + + + + + + + + Constraints on authority_queue + + + authority_queue_ queue_type_check + CHECK ((queue_type = 'authority'::text)) + + + + + + queue_queue_type_check + CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text]))) + + + + + + + + + + Tables referencing vandelay.queued_authority_record via Foreign Key Constraints + + + + + + + + + + + + + + + + bib_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + serial + + + + PRIMARY KEY + + + + + + + + + + + + + code + text + + + + + UNIQUE; + + + + NOT NULL; + + + + + + + + + + description + text + + + + + + + + + + xpath + text + + + + NOT NULL; + + + + + + + + remove + text + + + + NOT NULL; + + + DEFAULT ''::text; + + + + + + + ident + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + + + + + + + + + Tables referencing vandelay.queued_bib_record_attr via Foreign Key Constraints + + + + + + + + + + + + + + + + bib_match + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + field_type + text + + + + NOT NULL; + + + + + + + + matched_attr + integer + + + + + + + + + + + + + + + + + queued_record + bigint + + + + + + + + + + + + + + + + + eg_record + bigint + + + + + + + + + + + + + + + + + + + + + + + Constraints on bib_match + + + bib_match_field_type_check + CHECK ((field_type = ANY (ARRAY['isbn'::text, 'tcn_value'::text, 'id'::text]))) + + + + + + + + + + + + + bib_queue + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('vandelay.queue_id_seq'::regclass); + + + + + + + + + owner + integer + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + complete + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + queue_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'bib'::text; + + + + + + + + + item_attr_def + bigint + + + + + + + + + + + + + + + + + + + + + + + Constraints on bib_queue + + + bib_queue_queue_type_check + CHECK ((queue_type = 'bib'::text)) + + + + + + queue_queue_type_check + CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text]))) + + + + + + + + + + Tables referencing vandelay.queued_bib_record via Foreign Key Constraints + + + + + + + + + + + + + + + + import_bib_trash_fields + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + field + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + + + + + + + + import_item + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + definition + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + owning_lib + integer + + + + + + + + + + circ_lib + integer + + + + + + + + + + call_number + text + + + + + + + + + + copy_number + integer + + + + + + + + + + status + integer + + + + + + + + + + location + integer + + + + + + + + + + circulate + boolean + + + + + + + + + + deposit + boolean + + + + + + + + + + deposit_amount + numeric(8,2) + + + + + + + + + + ref + boolean + + + + + + + + + + holdable + boolean + + + + + + + + + + price + numeric(8,2) + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + alert_message + text + + + + + + + + + + pub_note + text + + + + + + + + + + priv_note + text + + + + + + + + + + opac_visible + boolean + + + + + + + + + + + + + + + + + + + + + import_item_attr_definition + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + tag + text + + + + NOT NULL; + + + + + + + + keep + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + owning_lib + text + + + + + + + + + + circ_lib + text + + + + + + + + + + call_number + text + + + + + + + + + + copy_number + text + + + + + + + + + + status + text + + + + + + + + + + location + text + + + + + + + + + + circulate + text + + + + + + + + + + deposit + text + + + + + + + + + + deposit_amount + text + + + + + + + + + + ref + text + + + + + + + + + + holdable + text + + + + + + + + + + price + text + + + + + + + + + + barcode + text + + + + + + + + + + circ_modifier + text + + + + + + + + + + circ_as_type + text + + + + + + + + + + alert_message + text + + + + + + + + + + opac_visible + text + + + + + + + + + + pub_note_title + text + + + + + + + + + + pub_note + text + + + + + + + + + + priv_note_title + text + + + + + + + + + + priv_note + text + + + + + + + + + + + + + + + + + + Tables referencing vandelay.bib_queue via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + queue + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + owner + integer + + + + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + + + + + name + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + + + + + + + + complete + boolean + + + + NOT NULL; + + + DEFAULT false; + + + + + + + queue_type + text + + + + + UNIQUE#1 + ; + + + + NOT NULL; + + + DEFAULT 'bib'::text; + + + + + + + + + + + + + + + Constraints on queue + + + queue_queue_type_check + CHECK ((queue_type = ANY (ARRAY['bib'::text, 'authority'::text]))) + + + + + + + + + + + + + queued_authority_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('vandelay.queued_record_id_seq'::regclass); + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + import_time + timestamp with time zone + + + + + + + + + + purpose + text + + + + NOT NULL; + + + DEFAULT 'import'::text; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + queue + integer + + + + + + + NOT NULL; + + + + + + + + + + + + imported_as + integer + + + + + + + + + + + + + + + + + + + + + + + Constraints on queued_authority_record + + + queued_record_purpose_check + CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text]))) + + + + + + + + + + Tables referencing vandelay.authority_match via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + queued_authority_record_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + attr_value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing vandelay.authority_match via Foreign Key Constraints + + + + + + + + + + + + + + + + queued_bib_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigint + + + + PRIMARY KEY + + + + + + DEFAULT nextval('vandelay.queued_record_id_seq'::regclass); + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + import_time + timestamp with time zone + + + + + + + + + + purpose + text + + + + NOT NULL; + + + DEFAULT 'import'::text; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + queue + integer + + + + + + + NOT NULL; + + + + + + + + + + + + bib_source + integer + + + + + + + + + + + + + + + + + imported_as + integer + + + + + + + + + + + + + + + + + + + + + + + Constraints on queued_bib_record + + + queued_record_purpose_check + CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text]))) + + + + + + + + + + Tables referencing vandelay.bib_match via Foreign Key Constraints + + + + + + + + + + + + + + + + + + + + + + + + + + + + queued_bib_record_attr + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + record + bigint + + + + + + + NOT NULL; + + + + + + + + + + + + field + integer + + + + + + + NOT NULL; + + + + + + + + + + + + attr_value + text + + + + NOT NULL; + + + + + + + + + + + + + + + + Tables referencing vandelay.bib_match via Foreign Key Constraints + + + + + + + + + + + + + + + + queued_record + + + + + + + + Field + Data Type + Constraints and References + + + + + + id + bigserial + + + + PRIMARY KEY + + + + + + + + + + + + + create_time + timestamp with time zone + + + + NOT NULL; + + + DEFAULT now(); + + + + + + + import_time + timestamp with time zone + + + + + + + + + + purpose + text + + + + NOT NULL; + + + DEFAULT 'import'::text; + + + + + + + marc + text + + + + NOT NULL; + + + + + + + + + + + + + + Constraints on queued_record + + + queued_record_purpose_check + CHECK ((purpose = ANY (ARRAY['import'::text, 'overlay'::text]))) + + + + + + + + + + + +
+ +
+ diff --git a/development/OpenSRF_intro.xml b/development/OpenSRF_intro.xml new file mode 100644 index 0000000000..f345997836 --- /dev/null +++ b/development/OpenSRF_intro.xml @@ -0,0 +1,1738 @@ + + + + OpenSRF + + + One of the claimed advantages of + Evergreen over alternative integrated library systems is the underlying Open + Service Request Framework (OpenSRF, pronounced "open surf") architecture. This + article introduces OpenSRF, demonstrates how to build OpenSRF services through + simple code examples, and explains the technical foundations on which OpenSRF + is built. This chapter was taken from Dan Scott's Easing gently into OpenSRF article, June, 2010. + +
+ Introducing OpenSRF + OpenSRF + OpenSRF is a message routing network that offers scalability and failover + support for individual services and entire servers with minimal development and + deployment overhead. You can use OpenSRF to build loosely-coupled applications + that can be deployed on a single server or on clusters of geographically + distributed servers using the same code and minimal configuration changes. + Although copyright statements on some of the OpenSRF code date back to Mike + Rylander’s original explorations in 2000, Evergreen was the first major + application to be developed with, and to take full advantage of, the OpenSRF + architecture starting in 2004. The first official release of OpenSRF was 0.1 in + February 2005 (http://evergreen-ils.org/blog/?p=21), but OpenSRF’s development + continues a steady pace of enhancement and refinement, with the release of + 1.0.0 in October 2008 and the most recent release of 1.2.2 in February 2010. + OpenSRF is a distinct break from the architectural approach used by previous + library systems and has more in common with modern Web applications. The + traditional "scale-up" approach to serve more transactions is to purchase a + server with more CPUs and more RAM, possibly splitting the load between a Web + server, a database server, and a business logic server. Evergreen, however, is + built on the Open Service Request Framework (OpenSRF) architecture, which + firmly embraces the "scale-out" approach of spreading transaction load over + cheap commodity servers. The initial GPLS + PINES hardware cluster, while certainly impressive, may have offered the + misleading impression that Evergreen requires a lot of hardware to run. + However, Evergreen and OpenSRF easily scale down to a single server; many + Evergreen libraries run their entire library system on a single server, and + most OpenSRF and Evergreen development occurs on a virtual machine running on a + single laptop or desktop image. + Another common concern is that the flexibility of OpenSRF’s distributed + architecture makes it complex to configure and to write new applications. This + article demonstrates that OpenSRF itself is an extremely simple architecture on + which one can easily build applications of many kinds – not just library + applications – and that you can use a number of different languages to call and + implement OpenSRF methods with a minimal learning curve. With an application + built on OpenSRF, when you identify a bottleneck in your application’s business + logic layer, you can adjust the number of the processes serving that particular + bottleneck on each of your servers; or if the problem is that your service is + resource-hungry, you could add an inexpensive server to your cluster and + dedicate it to running that resource-hungry service. + + Programming language support + If you need to develop an entirely new OpenSRF service, you can choose from a + number of different languages in which to implement that service. OpenSRF + client language bindings have been written for C, Java, JavaScript, Perl, and + Python, and service language bindings have been written for C, Perl, and Python. + This article uses Perl examples as a lowest common denominator programming + language. Writing an OpenSRF binding for another language is a relatively small + task if that language offers libraries that support the core technologies on + which OpenSRF depends: + + + + Extensible Messaging and Presence + Protocol (XMPP, sometimes referred to as Jabber) - provides the base messaging + infrastructure between OpenSRF clients and services + + XMPP + + + + JavaScript Object Notation (JSON) - serializes the content + of each XMPP message in a standardized and concise format + + + + + memcached - provides the caching service + + memcached + + + + syslog - the standard UNIX logging + service + + syslog + + + Unfortunately, the + OpenSRF + reference documentation, although augmented by the + OpenSRF + glossary, blog posts like the description + of OpenSRF and Jabber, and even this article, is not a sufficient substitute + for a complete specification on which one could implement a language binding. + The recommended option for would-be developers of another language binding is + to use the Python implementation as the cleanest basis for a port to another + language. + Python + +
+
+ Writing an OpenSRF Service + Imagine an application architecture in which 10 lines of Perl or Python, using + the data types native to each language, are enough to implement a method that + can then be deployed and invoked seamlessly across hundreds of servers. You + have just imagined developing with OpenSRF – it is truly that simple. Under the + covers, of course, the OpenSRF language bindings do an incredible amount of + work on behalf of the developer. An OpenSRF application consists of one or more + OpenSRF services that expose methods: for example, the opensrf.simple-text + demonstration + service exposes the opensrf.simple-text.split() and + opensrf.simple-text.reverse() methods. Each method accepts zero or more + arguments and returns zero or one results. The data types supported by OpenSRF + arguments and results are typical core language data types: strings, numbers, + booleans, arrays, and hashes. + To implement a new OpenSRF service, perform the following steps: + + + + Include the base OpenSRF support libraries + + + + + Write the code for each of your OpenSRF methods as separate procedures + + + + + Register each method + + + + + Add the service definition to the OpenSRF configuration files + + + + For example, the following code implements an OpenSRF service. The service + includes one method named opensrf.simple-text.reverse() that accepts one + string as input and returns the reversed version of that string: + +#!/usr/bin/perl + +package OpenSRF::Application::Demo::SimpleText; + +use strict; + +use OpenSRF::Application; +use parent qw/OpenSRF::Application/; + +sub text_reverse { + my ($self , $conn, $text) = @_; + my $reversed_text = scalar reverse($text); + return $reversed_text; +} + +__PACKAGE__->register_method( + method => 'text_reverse', + api_name => 'opensrf.simple-text.reverse' +); + + Ten lines of code, and we have a complete OpenSRF service that exposes a single + method and could be deployed quickly on a cluster of servers to meet your + application’s ravenous demand for reversed strings! If you’re unfamiliar with + Perl, the use OpenSRF::Application; use parent qw/OpenSRF::Application/; + lines tell this package to inherit methods and properties from the + OpenSRF::Application module. For example, the call to + __PACKAGE__->register_method() is defined in OpenSRF::Application but due to + inheritance is available in this package (named by the special Perl symbol + __PACKAGE__ that contains the current package name). The register_method() + procedure is how we introduce a method to the rest of the OpenSRF world. + + Registering a service with the OpenSRF configuration files + Two files control most of the configuration for OpenSRF: + + + + opensrf.xml contains the configuration for the service itself, as well as + a list of which application servers in your OpenSRF cluster should start + the service. + + + + + opensrf_core.xml (often referred to as the "bootstrap configuration" + file) contains the OpenSRF networking information, including the XMPP server + connection credentials for the public and private routers. You only need to touch + this for a new service if the new service needs to be accessible via the + public router. + + configuration filesopensrf_core.xml + + + Begin by defining the service itself in opensrf.xml. To register the + opensrf.simple-text service, add the following section to the <apps> + element (corresponding to the XPath /opensrf/default/apps/): + configuration filesopensrf.xml + +<apps> + <opensrf.simple-text> + <keepalive>3</keepalive> + <stateless>1</stateless> + <language>perl</language> + <implementation>OpenSRF::Application::Demo::SimpleText</implementation> + <max_requests>100</max_requests> + <unix_config> + <max_requests>1000</max_requests> + <unix_log>opensrf.simple-text_unix.log</unix_log> + <unix_sock>opensrf.simple-text_unix.sock</unix_sock> + <unix_pid>opensrf.simple-text_unix.pid</unix_pid> + <min_children>5</min_children> + <max_children>15</max_children> + <min_spare_children>2</min_spare_children> + <max_spare_children>5</max_spare_children> + </unix_config> + </opensrf.simple-text> + + <!-- other OpenSRF services registered here... --> +</apps> + + + + + The element name is the name that the OpenSRF control scripts use to refer + to the service. + + + + + The <keepalive> element specifies the interval (in seconds) between + checks to determine if the service is still running. + + + + + The <stateless> element specifies whether OpenSRF clients can call + methods from this service without first having to create a connection to a + specific service backend process for that service. If the value is 1, then + the client can simply issue a request and the router will forward the request + to an available service and the result will be returned directly to the client. + + + + + The <language> element specifies the programming language in which the + service is implemented. + + + + + The <implementation> element pecifies the name of the library or module + in which the service is implemented. + + + + + (C implementations only): The <max_requests> element, as a direct child + of the service element name, specifies the maximum number of requests a process + serves before it is killed and replaced by a new process. + + + + + (Perl implementations only): The <max_requests> element, as a direct + child of the <unix_config> element, specifies the maximum number of requests + a process serves before it is killed and replaced by a new process. + + + + + The <unix_log> element specifies the name of the log file for + language-specific log messages such as syntax warnings. + + + + + The <unix_sock> element specifies the name of the UNIX socket used for + inter-process communications. + + + + + The <unix_pid> element specifies the name of the PID file for the + master process for the service. + + + + + The <min_children> element specifies the minimum number of child + processes that should be running at any given time. + + + + + The <max_children> element specifies the maximum number of child + processes that should be running at any given time. + + + + + The <min_spare_children> element specifies the minimum number of idle + child processes that should be available to handle incoming requests. If there + are fewer than this number of spare child processes, new processes will be + spawned. + + + + + The`<max_spare_children>` element specifies the maximum number of idle + child processes that should be available to handle incoming requests. If there + are more than this number of spare child processes, the extra processes will be + killed. + + + + To make the service accessible via the public router, you must also + edit the opensrf_core.xml configuration file to add the service to the list + of publicly accessible services: + Making a service publicly accessible in <literal>opensrf_core.xml</literal> + +<router> + <!-- This is the public router. On this router, we only register applications + which should be accessible to everyone on the opensrf network --> + <name>router</name> + <domain>public.localhost</domain> + <services> + <service>opensrf.math</service> + <service>opensrf.simple-text</service> + </services> +</router> + + + + + + This section of the opensrf_core.xml file is located at XPath + /config/opensrf/routers/. + + + + + public.localhost is the canonical public router domain in the OpenSRF + installation instructions. + + + + + Each <service> element contained in the <services> element + offers their services via the public router as well as the private router. + + + + Once you have defined the new service, you must restart the OpenSRF Router + to retrieve the new configuration and start or restart the service itself. + + + Calling an OpenSRF method + srfsh + OpenSRF clients in any supported language can invoke OpenSRF services in any + supported language. So let’s see a few examples of how we can call our fancy + new opensrf.simple-text.reverse() method: + + Calling OpenSRF methods from the srfsh client + srfsh is a command-line tool installed with OpenSRF that you can use to call + OpenSRF methods. To call an OpenSRF method, issue the request command and + pass the OpenSRF service and method name as the first two arguments; then pass + one or more JSON objects delimited by commas as the arguments to the method + being invoked. + The following example calls the opensrf.simple-text.reverse method of the + opensrf.simple-text OpenSRF service, passing the string "foobar" as the + only method argument: + +$ srfsh +srfsh # request opensrf.simple-text opensrf.simple-text.reverse "foobar" + +Received Data: "raboof" + +=------------------------------------ +Request Completed Successfully +Request Time in seconds: 0.016718 +=------------------------------------ + + + + Getting documentation for OpenSRF methods from the srfsh client + The srfsh client also gives you command-line access to retrieving metadata + about OpenSRF services and methods. For a given OpenSRF method, for example, + you can retrieve information such as the minimum number of required arguments, + the data type and a description of each argument, the package or library in + which the method is implemented, and a description of the method. To retrieve + the documentation for an opensrf method from srfsh, issue the introspect + command, followed by the name of the OpenSRF service and (optionally) the + name of the OpenSRF method. If you do not pass a method name to the introspect + command, srfsh lists all of the methods offered by the service. If you pass + a partial method name, srfsh lists all of the methods that match that portion + of the method name. + The quality and availability of the descriptive information for each + method depends on the developer to register the method with complete and + accurate information. The quality varies across the set of OpenSRF and + Evergreen APIs, although some effort is being put towards improving the + state of the internal documentation. + +srfsh# introspect opensrf.simple-text "opensrf.simple-text.reverse" +--> opensrf.simple-text + +Received Data: { + "__c":"opensrf.simple-text", + "__p":{ + "api_level":1, + "stream":0, + "object_hint":"OpenSRF_Application_Demo_SimpleText", + "remote":0, + "package":"OpenSRF::Application::Demo::SimpleText", + "api_name":"opensrf.simple-text.reverse", + "server_class":"opensrf.simple-text", + "signature":{ + "params":[ + { + "desc":"The string to reverse", + "name":"text", + "type":"string" + } + ], + "desc":"Returns the input string in reverse order\n", + "return":{ + "desc":"Returns the input string in reverse order", + "type":"string" + } + }, + "method":"text_reverse", + "argc":1 + } +} + + + + + stream denotes whether the method supports streaming responses or not. + + + + + package identifies which package or library implements the method. + + + + + api_name identifies the name of the OpenSRF method. + + + + + signature is a hash that describes the parameters for the method. + + + + + params is an array of hashes describing each parameter in the method; + each parameter has a description (desc), name (name), and type (type). + + + + + desc is a string that describes the method itself. + + + + + return is a hash that describes the return value for the method; it + contains a description of the return value (desc) and the type of the + returned value (type). + + + + + method identifies the name of the function or method in the source + implementation. + + + + + argc is an integer describing the minimum number of arguments that + must be passed to this method. + + + + + + Calling OpenSRF methods from Perl applications + To call an OpenSRF method from Perl, you must connect to the OpenSRF service, + issue the request to the method, and then retrieve the results. + +#/usr/bin/perl +use strict; +use OpenSRF::AppSession; +use OpenSRF::System; + +OpenSRF::System->bootstrap_client(config_file => '/openils/conf/opensrf_core.xml'); + +my $session = OpenSRF::AppSession->create("opensrf.simple-text"); + +print "substring: Accepts a string and a number as input, returns a string\n"; +my $result = $session->request("opensrf.simple-text.substring", "foobar", 3); +my $request = $result->gather(); +print "Substring: $request\n\n"; + +print "split: Accepts two strings as input, returns an array of strings\n"; +$request = $session->request("opensrf.simple-text.split", "This is a test", " "); +my $output = "Split: ["; +my $element; +while ($element = $request->recv()) { + $output .= $element->content . ", "; +} +$output =~ s/, $/]/; +print $output . "\n\n"; + +print "statistics: Accepts an array of strings as input, returns a hash\n"; +my @many_strings = [ + "First I think I'll have breakfast", + "Then I think that lunch would be nice", + "And then seventy desserts to finish off the day" +]; + +$result = $session->request("opensrf.simple-text.statistics", @many_strings); +$request = $result->gather(); +print "Length: " . $result->{'length'} . "\n"; +print "Word count: " . $result->{'word_count'} . "\n"; + +$session->disconnect(); + + + + + The OpenSRF::System->bootstrap_client() method reads the OpenSRF + configuration information from the indicated file and creates an XMPP client + connection based on that information. + + + + + The OpenSRF::AppSession->create() method accepts one argument - the name + of the OpenSRF service to which you want to want to make one or more requests - + and returns an object prepared to use the client connection to make those + requests. + + + + + The OpenSRF::AppSession->request() method accepts a minimum of one + argument - the name of the OpenSRF method to which you want to make a request - + followed by zero or more arguments to pass to the OpenSRF method as input + values. This example passes a string and an integer to the + opensrf.simple-text.substring method defined by the opensrf.simple-text + OpenSRF service. + + + + + The gather() method, called on the result object returned by the + request() method, iterates over all of the possible results from the result + object and returns a single variable. + + + + + This request() call passes two strings to the opensrf.simple-text.split + method defined by the opensrf.simple-text OpenSRF service and returns (via + gather()) a reference to an array of results. + + + + + The opensrf.simple-text.split() method is a streaming method that + returns an array of results with one element per recv() call on the + result object. We could use the gather() method to retrieve all of the + results in a single array reference, but instead we simply iterate over + the result variable until there are no more results to retrieve. + + + + + While the gather() convenience method returns only the content of the + complete set of results for a given request, the recv() method returns an + OpenSRF result object with status, statusCode, and content fields as + we saw in the HTTP results example. + + + + + This request() call passes an array to the + opensrf.simple-text.statistics method defined by the opensrf.simple-text + OpenSRF service. + + + + + The result object returns a hash reference via gather(). The hash + contains the length and word_count keys we defined in the method. + + + + + The OpenSRF::AppSession->disconnect() method closes the XMPP client + connection and cleans up resources associated with the session. + + + + + + + Accepting and returning more interesting data types + Of course, the example of accepting a single string and returning a single + string is not very interesting. In real life, our applications tend to pass + around multiple arguments, including arrays and hashes. Fortunately, OpenSRF + makes that easy to deal with; in Perl, for example, returning a reference to + the data type does the right thing. In the following example of a method that + returns a list, we accept two arguments of type string: the string to be split, + and the delimiter that should be used to split the string. + Basic text splitting method + +sub text_split { + my $self = shift; + my $conn = shift; + my $text = shift; + my $delimiter = shift || ' '; + + my @split_text = split $delimiter, $text; + return \@split_text; +} + +__PACKAGE__->register_method( + method => 'text_split', + api_name => 'opensrf.simple-text.split' +); + + + We simply return a reference to the list, and OpenSRF does the rest of the work + for us to convert the data into the language-independent format that is then + returned to the caller. As a caller of a given method, you must rely on the + documentation used to register to determine the data structures - if the developer has + added the appropriate documentation. + + + Accepting and returning Evergreen objects + OpenSRF is agnostic about objects; its role is to pass JSON back and forth + between OpenSRF clients and services, and it allows the specific clients and + services to define their own semantics for the JSON structures. On top of that + infrastructure, Evergreen offers the fieldmapper: an object-relational mapper + that provides a complete definition of all objects, their properties, their + relationships to other objects, the permissions required to create, read, + update, or delete objects of that type, and the database table or view on which + they are based. + Fieldmapper + The Evergreen fieldmapper offers a great deal of convenience for working with + complex system objects beyond the basic mapping of classes to database + schemas. Although the result is passed over the wire as a JSON object + containing the indicated fields, fieldmapper-aware clients then turn those + JSON objects into native objects with setter / getter methods for each field. + All of this metadata about Evergreen objects is defined in the + fieldmapper configuration file (/openils/conf/fm_IDL.xml), and access to + these classes is provided by the open-ils.cstore, open-ils.pcrud, and + open-ils.reporter-store OpenSRF services which parse the fieldmapper + configuration file and dynamically register OpenSRF methods for creating, + reading, updating, and deleting all of the defined classes. + Example fieldmapper class definition for "Open User Summary" + +<class id="mous" controller="open-ils.cstore open-ils.pcrud" + oils_obj:fieldmapper="money::open_user_summary" + oils_persist:tablename="money.open_usr_summary" + reporter:label="Open User Summary"> + <fields oils_persist:primary="usr" oils_persist:sequence=""> + <field name="balance_owed" reporter:datatype="money" /> + <field name="total_owed" reporter:datatype="money" /> + <field name="total_paid" reporter:datatype="money" /> + <field name="usr" reporter:datatype="link"/> + </fields> + <links> + <link field="usr" reltype="has_a" key="id" map="" class="au"/> + </links> + <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1"> + <actions> + <retrieve permission="VIEW_USER"> + <context link="usr" field="home_ou"/> + </retrieve> + </actions> + </permacrud> +</class> + + + + + + The <class> element defines the class: + + + + + The id attribute defines the class hint that identifies the class both + elsewhere in the fieldmapper configuration file, such as in the value of the + field attribute of the <link> element, and in the JSON object itself when + it is instantiated. For example, an "Open User Summary" JSON object would have + the top level property of "__c":"mous". + + + + + The controller attribute identifies the services that have direct access + to this class. If open-ils.pcrud is not listed, for example, then there is + no means to directly access members of this class through a public service. + + + + + The oils_obj:fieldmapper attribute defines the name of the Perl + fieldmapper class that will be dynamically generated to provide setter and + getter methods for instances of the class. + + + + + The oils_persist:tablename attribute identifies the schema name and table + name of the database table that stores the data that represents the instances + of this class. In this case, the schema is money and the table is + open_usr_summary. + + + + + The reporter:label attribute defines a human-readable name for the class + used in the reporting interface to identify the class. These names are defined + in English in the fieldmapper configuration file; however, they are extracted + so that they can be translated and served in the user’s language of choice. + + + + + + + The <fields> element lists all of the fields that belong to the object. + + + + + The oils_persist:primary attribute identifies the field that acts as the + primary key for the object; in this case, the field with the name usr. + + + + + The oils_persist:sequence attribute identifies the sequence object + (if any) in this database provides values for new instances of this class. In + this case, the primary key is defined by a field that is linked to a different + table, so no sequence is used to populate these instances. + + + + + + + Each <field> element defines a single field with the following attributes: + + + + + The name attribute identifies the column name of the field in the + underlying database table as well as providing a name for the setter / getter + method that can be invoked in the JSON or native version of the object. + + + + + The reporter:datatype attribute defines how the reporter should treat + the contents of the field for the purposes of querying and display. + + + + + The reporter:label attribute can be used to provide a human-readable name + for each field; without it, the reporter falls back to the value of the name + attribute. + + + + + + + The <links> element contains a set of zero or more <link> elements, + each of which defines a relationship between the class being described and + another class. + + + + + The field attribute identifies the field named in this class that links + to the external class. + + + + + The reltype attribute identifies the kind of relationship between the + classes; in the case of has_a, each value in the usr field is guaranteed + to have a corresponding value in the external class. + + + + + The key attribute identifies the name of the field in the external + class to which this field links. + + + + + The rarely-used map attribute identifies a second class to which + the external class links; it enables this field to define a direct + relationship to an external class with one degree of separation, to + avoid having to retrieve all of the linked members of an intermediate + class just to retrieve the instances from the actual desired target class. + + + + + The class attribute identifies the external class to which this field + links. + + + + + + + The <permacrud> element defines the permissions that must have been + granted to a user to operate on instances of this class. + + + + + The <retrieve> element is one of four possible children of the + <actions> element that define the permissions required for each action: + create, retrieve, update, and delete. + + + + + The permission attribute identifies the name of the permission that must + have been granted to the user to perform the action. + + + + + The contextfield attribute, if it exists, defines the field in this class + that identifies the library within the system for which the user must have + prvileges to work. If a user has been granted a given permission, but has not been + granted privileges to work at a given library, they can not perform the action + at that library. + + + + + + + The rarely-used <context> element identifies a linked field (link + attribute) in this class which links to an external class that holds the field + (field attribute) that identifies the library within the system for which the + user must have privileges to work. + + + + When you retrieve an instance of a class, you can ask for the result to + flesh some or all of the linked fields of that class, so that the linked + instances are returned embedded directly in your requested instance. In that + same request you can ask for the fleshed instances to in turn have their linked + fields fleshed. By bundling all of this into a single request and result + sequence, you can avoid the network overhead of requiring the client to request + the base object, then request each linked object in turn. + You can also iterate over a collection of instances and set the automatically + generated isdeleted, isupdated, or isnew properties to indicate that + the given instance has been deleted, updated, or created respectively. + Evergreen can then act in batch mode over the collection to perform the + requested actions on any of the instances that have been flagged for action. + + + Returning streaming results + In the previous implementation of the opensrf.simple-text.split method, we + returned a reference to the complete array of results. For small values being + delivered over the network, this is perfectly acceptable, but for large sets of + values this can pose a number of problems for the requesting client. Consider a + service that returns a set of bibliographic records in response to a query like + "all records edited in the past month"; if the underlying database is + relatively active, that could result in thousands of records being returned as + a single network request. The client would be forced to block until all of the + results are returned, likely resulting in a significant delay, and depending on + the implementation, correspondingly large amounts of memory might be consumed + as all of the results are read from the network in a single block. + OpenSRF offers a solution to this problem. If the method returns results that + can be divided into separate meaningful units, you can register the OpenSRF + method as a streaming method and enable the client to loop over the results one + unit at a time until the method returns no further results. In addition to + registering the method with the provided name, OpenSRF also registers an additional + method with .atomic appended to the method name. The .atomic variant gathers + all of the results into a single block to return to the client, giving the caller + the ability to choose either streaming or atomic results from a single method + definition. + In the following example, the text splitting method has been reimplemented to + support streaming; very few changes are required: + Text splitting method - streaming mode + +sub text_split { + my $self = shift; + my $conn = shift; + my $text = shift; + my $delimiter = shift || ' '; + + my @split_text = split $delimiter, $text; + foreach my $string (@split_text) { + $conn->respond($string); + } + return undef; +} + +__PACKAGE__->register_method( + method => 'text_split', + api_name => 'opensrf.simple-text.split', + stream => 1 +); + + + + + + Rather than returning a reference to the array, a streaming method loops + over the contents of the array and invokes the respond() method of the + connection object on each element of the array. + + + + + Registering the method as a streaming method instructs OpenSRF to also + register an atomic variant (opensrf.simple-text.split.atomic). + + + + + + Error! Warning! Info! Debug! + As hard as it may be to believe, it is true: applications sometimes do not + behave in the expected manner, particularly when they are still under + development. The service language bindings for OpenSRF include integrated + support for logging messages at the levels of ERROR, WARNING, INFO, DEBUG, and + the extremely verbose INTERNAL to either a local file or to a syslogger + service. The destination of the log files, and the level of verbosity to be + logged, is set in the opensrf_core.xml configuration file. To add logging to + our Perl example, we just have to add the OpenSRF::Utils::Logger package to our + list of used Perl modules, then invoke the logger at the desired logging level. + You can include many calls to the OpenSRF logger; only those that are higher + than your configured logging level will actually hit the log. The following + example exercises all of the available logging levels in OpenSRF: + +use OpenSRF::Utils::Logger; +my $logger = OpenSRF::Utils::Logger; +# some code in some function +{ + $logger->error("Hmm, something bad DEFINITELY happened!"); + $logger->warn("Hmm, something bad might have happened."); + $logger->info("Something happened."); + $logger->debug("Something happened; here are some more details."); + $logger->internal("Something happened; here are all the gory details.") +} + + If you call the mythical OpenSRF method containing the preceding OpenSRF logger + statements on a system running at the default logging level of INFO, you will + only see the INFO, WARN, and ERR messages, as follows: + Results of logging calls at the default level of INFO + +[2010-03-17 22:27:30] opensrf.simple-text [ERR :5681:SimpleText.pm:277:] +[2010-03-17 22:27:30] opensrf.simple-text [WARN:5681:SimpleText.pm:278:] +[2010-03-17 22:27:30] opensrf.simple-text [INFO:5681:SimpleText.pm:279:] + + + If you then increase the the logging level to INTERNAL (5), the logs will + contain much more information, as follows: + Results of logging calls at the default level of INTERNAL + +[2010-03-17 22:48:11] opensrf.simple-text [ERR :5934:SimpleText.pm:277:] +[2010-03-17 22:48:11] opensrf.simple-text [WARN:5934:SimpleText.pm:278:] +[2010-03-17 22:48:11] opensrf.simple-text [INFO:5934:SimpleText.pm:279:] +[2010-03-17 22:48:11] opensrf.simple-text [DEBG:5934:SimpleText.pm:280:] +[2010-03-17 22:48:11] opensrf.simple-text [INTL:5934:SimpleText.pm:281:] +[2010-03-17 22:48:11] opensrf.simple-text [ERR :5934:SimpleText.pm:283:] +[2010-03-17 22:48:21] opensrf.simple-text [INTL:5934:Cache.pm:125:] +[2010-03-17 22:48:21] opensrf.simple-text [DEBG:5934:Application.pm:579:] +[2010-03-17 22:48:21] opensrf.simple-text [DEBG:5934:Application.pm:586:] +[2010-03-17 22:48:21] opensrf.simple-text [DEBG:5934:Application.pm:190:] +[2010-03-17 22:48:21] opensrf.simple-text [INTL:5934:AppSession.pm:780:] Calling queue_wait(0) +[2010-03-17 22:48:21] opensrf.simple-text [INTL:5934:AppSession.pm:769:] Resending...0 +[2010-03-17 22:48:21] opensrf.simple-text [INTL:5934:AppSession.pm:450:] In send +[2010-03-17 22:48:21] opensrf.simple-text [DEBG:5934:AppSession.pm:506:] +[2010-03-17 22:48:21] opensrf.simple-text [DEBG:5934:AppSession.pm:506:] +... + + + To see everything that is happening in OpenSRF, try leaving your logging level + set to INTERNAL for a few minutes - just ensure that you have a lot of free disk + space available if you have a moderately busy system! + + + Caching results: one secret of scalability + search resultscaching + If you have ever used an application that depends on a remote Web service + outside of your control — say, if you need to retrieve results from a + microblogging service — you know the pain of latency and dependability (or the + lack thereof). To improve the response time for OpenSRF services, you can take + advantage of the support offered by the OpenSRF::Utils::Cache module for + communicating with a local instance or cluster of memcache daemons to store + and retrieve persistent values. The following example demonstrates caching + by sleeping for 10 seconds the first time it receives a given cache key and + cannot retrieve a corresponding value from the cache: + Simple caching OpenSRF service + +use OpenSRF::Utils::Cache; +sub test_cache { + my $self = shift; + my $conn = shift; + my $test_key = shift; + my $cache = OpenSRF::Utils::Cache->new('global'); + my $cache_key = "opensrf.simple-text.test_cache.$test_key"; + my $result = $cache->get_cache($cache_key) || undef; + if ($result) { + $logger->info("Resolver found a cache hit"); + return $result; + } + sleep 10; + my $cache_timeout = 300; + $cache->put_cache($cache_key, "here", $cache_timeout); + return "There was no cache hit."; +} + + + + + + The OpenSRF::Utils::Cache module provides access to the built-in caching + support in OpenSRF. + + + + + The constructor for the cache object accepts a single argument to define + the cache type for the object. Each cache type can use a separate memcache + server to keep the caches separated. Most Evergreen services use the global + cache, while the anon cache is used for Web sessions. + + + + + The cache key is simply a string that uniquely identifies the value you + want to store or retrieve. This line creates a cache key based on the OpenSRF + method name and request input value. + + + + + The get_cache() method checks to see if the cache key already exists. If + a matching key is found, the service immediately returns the stored value. + + + + + If the cache key does not exist, the code sleeps for 10 seconds to + simulate a call to a slow remote Web service or an intensive process. + + + + + The $cache_timeout variable represents a value for the lifetime of the + cache key in seconds. + + + + + After the code retrieves its value (or, in the case of this example, + finishes sleeping), it creates the cache entry by calling the put_cache() + method. The method accepts three arguments: the cache key, the value to be + stored ("here"), and the timeout value in seconds to ensure that we do not + return stale data on subsequent calls. + + + + + + Initializing the service and its children: child labour + When an OpenSRF service is started, it looks for a procedure called + initialize() to set up any global variables shared by all of the children of + the service. The initialize() procedure is typically used to retrieve + configuration settings from the opensrf.xml file. + An OpenSRF service spawns one or more children to actually do the work + requested by callers of the service. For every child process an OpenSRF service + spawns, the child process clones the parent environment and then each child + process runs the child_init() process (if any) defined in the OpenSRF service + to initialize any child-specific settings. + When the OpenSRF service kills a child process, it invokes the child_exit() + procedure (if any) to clean up any resources associated with the child process. + Similarly, when the OpenSRF service is stopped, it calls the DESTROY() + procedure to clean up any remaining resources. + + + Retrieving configuration settings + The settings for OpenSRF services are maintained in the opensrf.xml XML + configuration file. The structure of the XML document consists of a root + element <opensrf> containing two child elements: + + + + The <default> element contains an <apps> element describing all + OpenSRF services running on this system — see --, as + well as any other arbitrary XML descriptions required for global configuration + purposes. For example, Evergreen uses this section for email notification and + inter-library patron privacy settings. + + + + + The <hosts> element contains one element per host that participates in + this OpenSRF system. Each host element must include an <activeapps> element + that lists all of the services to start on this host when the system starts + up. Each host element can optionally override any of the default settings. + + + + OpenSRF includes a service named opensrf.settings to provide distributed + cached access to the configuration settings with a simple API: + + + + opensrf.settings.default_config.get accepts zero arguments and returns + the complete set of default settings as a JSON document. + + + + + opensrf.settings.host_config.get accepts one argument (hostname) and + returns the complete set of settings, as customized for that hostname, as a + JSON document. + + + + + opensrf.settings.xpath.get accepts one argument (an + XPath expression) and returns the portion of + the configuration file that matches the expression as a JSON document. + + + + For example, to determine whether an Evergreen system uses the opt-in + support for sharing patron information between libraries, you could either + invoke the opensrf.settings.default_config.get method and parse the + JSON document to determine the value, or invoke the opensrf.settings.xpath.get + method with the XPath /opensrf/default/share/user/opt_in argument to + retrieve the value directly. + In practice, OpenSRF includes convenience libraries in all of its client + language bindings to simplify access to configuration values. C offers + osrfConfig.c, Perl offers OpenSRF::Utils::SettingsClient, Java offers + org.opensrf.util.SettingsClient, and Python offers osrf.set. These + libraries locally cache the configuration file to avoid network roundtrips for + every request and enable the developer to request specific values without + having to manually construct XPath expressions. + +
+
+ OpenSRF Communication Flows + OpenSRFCommunication Flows + Now that you have seen that it truly is easy to create an OpenSRF service, we + can take a look at what is going on under the covers to make all of this work + for you. + + Get on the messaging bus - safely + One of the core innovations of OpenSRF was to use the Extensible Messaging and + Presence Protocol (XMPP, more colloquially known as Jabber) as the messaging + bus that ties OpenSRF services together across servers. XMPP is an "XML + protocol for near-real-time messaging, presence, and request-response services" + (http://www.ietf.org/rfc/rfc3920.txt) that OpenSRF relies on to handle most of + the complexity of networked communications. OpenSRF requres an XMPP server + that supports multiple domains such as ejabberd. + Multiple domain support means that a single server can support XMPP virtual + hosts with separate sets of users and access privileges per domain. By + routing communications through separate public and private XMPP domains, + OpenSRF services gain an additional layer of security. + The OpenSRF + installation documentation instructs you to create two separate hostnames + (private.localhost and public.localhost) to use as XMPP domains. OpenSRF + can control access to its services based on the domain of the client and + whether a given service allows access from clients on the public domain. When + you start OpenSRF, the first XMPP clients that connect to the XMPP server are + the OpenSRF public and private routers. OpenSRF routers maintain a list of + available services and connect clients to available services. When an OpenSRF + service starts, it establishes a connection to the XMPP server and registers + itself with the private router. The OpenSRF configuration contains a list of + public OpenSRF services, each of which must also register with the public + router. + + + OpenSRF communication flows over XMPP + XMPP + In a minimal OpenSRF deployment, two XMPP users named "router" connect to the + XMPP server, with one connected to the private XMPP domain and one connected to + the public XMPP domain. Similarly, two XMPP users named "opensrf" connect to + the XMPP server via the private and public XMPP domains. When an OpenSRF + service is started, it uses the "opensrf" XMPP user to advertise its + availability with the corresponding router on that XMPP domain; the XMPP server + automatically assigns a Jabber ID (JID) based on the client hostname to each + service’s listener process and each connected drone process waiting to carry + out requests. When an OpenSRF router receives a request to invoke a method on a + given service, it connects the requester to the next available listener in the + list of registered listeners for that service. + Services and clients connect to the XMPP server using a single set of XMPP + client credentials (for example, opensrf@private.localhost), but use XMPP + resource identifiers to differentiate themselves in the JID for each + connection. For example, the JID for a copy of the opensrf.simple-text + service with process ID 6285 that has connected to the private.localhost + domain using the opensrf XMPP client credentials could be + opensrf@private.localhost/opensrf.simple-text_drone_at_localhost_6285. By + convention, the user name for OpenSRF clients is opensrf, and the user name + for OpenSRF routers is router, so the XMPP server for OpenSRF will have four + separate users registered: + * opensrf@private.localhost is an OpenSRF client that connects with these + credentials and which can access any OpenSRF service. + * opensrf@public.localhost is an OpenSRF client that connects with these + credentials and which can only access OpenSRF services that have registered + with the public router. + * router@private.localhost is the private OpenSRF router with which all + services register. + * router@public.localhost is the public OpenSRF router with which only + services that must be publicly accessible register. + All OpenSRF services automatically register themselves with the private XMPP + domain, but only those services that register themselves with the public XMPP + domain can be invoked from public OpenSRF clients. The OpenSRF client and + router user names, passwords, and domain names, along with the list of services + that should be public, are contained in the opensrf_core.xml configuration + file. + + + OpenSRF communication flows over HTTP + HTTPtranslator + In some contexts, access to a full XMPP client is not a practical option. For + example, while XMPP clients have been implemented in JavaScript, you might + be concerned about browser compatibility and processing overhead - or you might + want to issue OpenSRF requests from the command line with curl. Fortunately, + any OpenSRF service registered with the public router is accessible via the + OpenSRF HTTP Translator. The OpenSRF HTTP Translator implements the + OpenSRF-over-HTTP + proposed specification as an Apache module that translates HTTP requests into + OpenSRF requests and returns OpenSRF results as HTTP results to the initiating + HTTP client. + Issuing an HTTP POST request to an OpenSRF method via the OpenSRF HTTP Translator + +# curl request broken up over multiple lines for legibility +curl -H "X-OpenSRF-service: opensrf.simple-text" + --data 'osrf-msg=[ \ + {"__c":"osrfMessage","__p":{"threadTrace":0,"locale":"en-CA", + "type":"REQUEST","payload": {"__c":"osrfMethod","__p": + {"method":"opensrf.simple-text.reverse","params":["foobar"]} + }} + }]' +http://localhost/osrf-http-translator + + + + + + The X-OpenSRF-service header identifies the OpenSRF service of interest. + + + + + The POST request consists of a single parameter, the osrf-msg value, + which contains a JSON array. + + + + + The first object is an OpenSRF message ("__c":"osrfMessage") with a set of + parameters ("__p":{}). + + + + + The identifier for the request ("threadTrace":0); this value is echoed + back in the result. + + + + + The message type ("type":"REQUEST"). + + + + + The locale for the message; if the OpenSRF method is locale-sensitive, it + can check the locale for each OpenSRF request and return different information + depending on the locale. + + + + + The payload of the message ("payload":{}) containing the OpenSRF method + request ("__c":"osrfMethod") and its parameters ("__p:"{}). + + + + + The method name for the request ("method":"opensrf.simple-text.reverse"). + + + + + A set of JSON parameters to pass to the method ("params":["foobar"]); in + this case, a single string "foobar". + + + + + + + + + The URL on which the OpenSRF HTTP translator is listening, + /osrf-http-translator is the default location in the Apache example + configuration files shipped with the OpenSRF source, but this is configurable. + + + + Results from an HTTP POST request to an OpenSRF method via the OpenSRF HTTP Translator + +# HTTP response broken up over multiple lines for legibility +[{"__c":"osrfMessage","__p": + {"threadTrace":0, "payload": + {"__c":"osrfResult","__p": + {"status":"OK","content":"raboof","statusCode":200} + },"type":"RESULT","locale":"en-CA" + } +}, +{"__c":"osrfMessage","__p": + {"threadTrace":0,"payload": + {"__c":"osrfConnectStatus","__p": + {"status":"Request Complete","statusCode":205} + },"type":"STATUS","locale":"en-CA" + } +}] + + + + + + The OpenSRF HTTP Translator returns an array of JSON objects in its + response. Each object in the response is an OpenSRF message + ("__c":"osrfMessage") with a collection of response parameters ("__p":). + + + + + The OpenSRF message identifier ("threadTrace":0) confirms that this + message is in response to the request matching the same identifier. + + + + + The message includes a payload JSON object ("payload":) with an OpenSRF + result for the request ("__c":"osrfResult"). + + + + + The result includes a status indicator string ("status":"OK"), the content + of the result response - in this case, a single string "raboof" + ("content":"raboof") - and an integer status code for the request + ("statusCode":200). + + + + + The message also includes the message type ("type":"RESULT") and the + message locale ("locale":"en-CA"). + + + + + The second message in the set of results from the response. + + + + + Again, the message identifier confirms that this message is in response to + a particular request. + + + + + The payload of the message denotes that this message is an + OpenSRF connection status message ("__c":"osrfConnectStatus"), with some + information about the particular OpenSRF connection that was used for this + request. + + + + + The response parameters for an OpenSRF connection status message include a + verbose status ("status":"Request Complete") and an integer status code for + the connection status (`"statusCode":205). + + + + + The message also includes the message type ("type":"RESULT") and the + message locale ("locale":"en-CA"). + + + + Before adding a new public OpenSRF service, ensure that it does + not introduce privilege escalation or unchecked access to data. For example, + the Evergreen open-ils.cstore private service is an object-relational mapper + that provides read and write access to the entire Evergreen database, so it + would be catastrophic to expose that service publicly. In comparison, the + Evergreen open-ils.pcrud public service offers the same functionality as + open-ils.cstore to any connected HTTP client or OpenSRF client, but the + additional authentication and authorization layer in open-ils.pcrud prevents + unchecked access to Evergreen’s data. + + + Stateless and stateful connections + OpenSRF supports both stateless and stateful connections. When an OpenSRF + client issues a REQUEST message in a stateless connection, the router + forwards the request to the next available service and the service returns the + result directly to the client. + + When an OpenSRF client issues a CONNECT message to create a stateful conection, the + router returns the Jabber ID of the next available service to the client so + that the client can issue one or more REQUEST message directly to that + particular service and the service will return corresponding RESULT messages + directly to the client. Until the client issues a DISCONNECT message, that + particular service is only available to the requesting client. Stateful connections + are useful for clients that need to make many requests from a particular service, + as it avoids the intermediary step of contacting the router for each request, as + well as for operations that require a controlled sequence of commands, such as a + set of database INSERT, UPDATE, and DELETE statements within a transaction. + + + + Message body format + OpenSRF was an early adopter of JavaScript Object Notation (JSON). While XMPP + is an XML protocol, the Evergreen developers recognized that the compactness of + the JSON format offered a significant reduction in bandwidth for the volume of + messages that would be generated in an application of that size. In addition, + the ability of languages such as JavaScript, Perl, and Python to generate + native objects with minimal parsing offered an attractive advantage over + invoking an XML parser for every message. Instead, the body of the XMPP message + is a simple JSON structure. For a simple request, like the following example + that simply reverses a string, it looks like a significant overhead: but we get + the advantages of locale support and tracing the request from the requester + through the listener and responder (drone). + A request for opensrf.simple-text.reverse("foobar"): + +<message from='router@private.localhost/opensrf.simple-text' + to='opensrf@private.localhost/opensrf.simple-text_listener_at_localhost_6275' + router_from='opensrf@private.localhost/_karmic_126678.3719_6288' + router_to='' router_class='' router_command='' osrf_xid='' +> + <thread>1266781414.366573.12667814146288</thread> + <body> +[ + {"__c":"osrfMessage","__p": + {"threadTrace":"1","locale":"en-US","type":"REQUEST","payload": + {"__c":"osrfMethod","__p": + {"method":"opensrf.simple-text.reverse","params":["foobar"]} + } + } + } +] + </body> +</message> + + + A response from opensrf.simple-text.reverse("foobar") + +<message from='opensrf@private.localhost/opensrf.simple-text_drone_at_localhost_6285' + to='opensrf@private.localhost/_karmic_126678.3719_6288' + router_command='' router_class='' osrf_xid='' +> + <thread>1266781414.366573.12667814146288</thread> + <body> +[ + {"__c":"osrfMessage","__p": + {"threadTrace":"1","payload": + {"__c":"osrfResult","__p": + {"status":"OK","content":"raboof","statusCode":200} + } ,"type":"RESULT","locale":"en-US"} + }, + {"__c":"osrfMessage","__p": + {"threadTrace":"1","payload": + {"__c":"osrfConnectStatus","__p": + {"status":"Request Complete","statusCode":205} + },"type":"STATUS","locale":"en-US"} + } +] + </body> +</message> + + + The content of the <body> element of the OpenSRF request and result should + look familiar; they match the structure of the OpenSRF over HTTP examples that we previously dissected. + + + Registering OpenSRF methods in depth + Let’s explore the call to __PACKAGE__->register_method(); most of the members + of the hash are optional, and for the sake of brevity we omitted them in the + previous example. As we have seen in the results of the introspection call, a + verbose registration method call is recommended to better enable the internal + documentation. Here is the complete set of members that you should pass to + __PACKAGE__->register_method(): + + + + The method member specifies the name of the procedure in this module that is being registered as an OpenSRF method. + + + + + The api_name member specifies the invocable name of the OpenSRF method; by convention, the OpenSRF service name is used as the prefix. + + + + + The optional api_level member can be used for versioning the methods to allow the use of a deprecated API, but in practical use is always 1. + + + + + The optional argc member specifies the minimal number of arguments that the method expects. + + + + + The optional stream member, if set to any value, specifies that the method supports returning multiple values from a single call to + subsequent requests. OpenSRF automatically creates a corresponding method with ".atomic" appended to its name that returns the complete set of results in a + single request. Streaming methods are useful if you are returning hundreds of records and want to act on the results as they return. + + + + + The optional signature member is a hash that describes the method’s purpose, arguments, and return value. + + + + + The desc member of the signature hash describes the method’s purpose. + + + + + The params member of the signature hash is an array of hashes in which each array element describes the corresponding method + argument in order. + + + + + The name member of the argument hash specifies the name of the argument. + + + + + The desc member of the argument hash describes the argument’s purpose. + + + + + The type member of the argument hash specifies the data type of the argument: for example, string, integer, boolean, number, array, or hash. + + + + + + + The return member of the signature hash is a hash that describes the return value of the method. + + + + + The desc member of the return hash describes the return value. + + + + + The type member of the return hash specifies the data type of the return value: for example, string, integer, boolean, number, + array, or hash. + + + + + + + + +
+
+ Evergreen-specific OpenSRF services + Evergreen is currently the primary showcase for the use of OpenSRF as an + application architecture. Evergreen 1.6.1 includes the following + set of OpenSRF services: + + + + The open-ils.actor service supports common tasks for working with user + accounts and libraries. + + + + + The open-ils.auth service supports authentication of Evergreen users. + + + + + The open-ils.booking service supports the management of reservations + for bookable items. + + + + + The open-ils.cat service supports common cataloging tasks, such as + creating, modifying, and merging bibliographic and authority records. + + + + + The open-ils.circ service supports circulation tasks such as checking + out items and calculating due dates. + + + + + The open-ils.collections service supports tasks that assist collections + agencies in contacting users with outstanding fines above a certain + threshold. + + + + + The open-ils.cstore private service supports unrestricted access to + Evergreen fieldmapper objects. + + + + + The open-ils.ingest private service supports tasks for importing + data such as bibliographic and authority records. + + + + + The open-ils.pcrud service supports permission-based access to Evergreen + fieldmapper objects. + + + + + The open-ils.penalty penalty service supports the calculation of + penalties for users, such as being blocked from further borrowing, for + conditions such as having too many items checked out or too many unpaid + fines. + + + + + The open-ils.reporter service supports the creation and scheduling of + reports. + + + + + The open-ils.reporter-store private service supports access to Evergreen + fieldmapper objects for the reporting service. + + + + + The open-ils.search service supports searching across bibliographic + records, authority records, serial records, Z39.50 sources, and ZIP codes. + + + + + The open-ils.storage private service supports a deprecated method of + providing access to Evergreen fieldmapper objects. Implemented in Perl, + this service has largely been replaced by the much faster C-based + open-ils.cstore service. + + + + + The open-ils.supercat service supports transforms of MARC records into + other formats, such as MODS, as well as providing Atom and RSS feeds and + SRU access. + + + + + The open-ils.trigger private service supports event-based triggers for + actions such as overdue and holds available notification emails. + + + + + The open-ils.vandelay service supports the import and export of batches of + bibliographic and authority records. + + + + Of some interest is that the open-ils.reporter-store and open-ils.cstore + services have identical implementations. Surfacing them as separate services + enables a deployer of Evergreen to ensure that the reporting service does not + interfere with the performance-critical open-ils.cstore service. One can also + direct the reporting service to a read-only database replica to, again, avoid + interference with open-ils.cstore which must write to the master database. + There are only a few significant services that are not built on OpenSRF in + Evergreen 1.6.0, such as the SIP and Z39.50 servers. These services implement + different protocols and build on existing daemon architectures (Simple2ZOOM + for Z39.50), but still rely on the other OpenSRF services to provide access + to the Evergreen data. The non-OpenSRF services are reasonably self-contained + and can be deployed on different servers to deliver the same sort of deployment + flexibility as OpenSRF services, but have the disadvantage of not being + integrated into the same configuration and control infrastructure as the + OpenSRF services. +
+
diff --git a/development/customize_opac.xml b/development/customize_opac.xml new file mode 100644 index 0000000000..fd23da254d --- /dev/null +++ b/development/customize_opac.xml @@ -0,0 +1,370 @@ + + + + Customizing the OPAC + + While Evergreen is ready to go out of the box, libraries will want to customize Evergreen with their own color scheme, logos and layout. This chapter will explain how to + customize Evergreen to meet the needs of your users. For these task some knowledge of html and css is required. Many of these + instructions assume an installation of Evergreen using the default file locations. + + Be sure to save a backup copy of all files you edit in a location other than /openils/var/web/opac/ as files here could be + overwritten when you upgrade your copy of Evergreen. + +
+ Change the Color Scheme + OPACcustomizingchanging the color scheme + To change the color scheme of the default Evergreen skin, edit /openils/var/web/opac/theme/default/css/colors.css. From this one file you can + change the 4 base color scheme as well as colors of specific elements. + + You can also create alternate themes for your users. + + + Copy the css folder and its contents from the example alternate theme /openils/var/web/opac/theme/reddish/ + to a new folder /openils/var/web/opac/theme/[your new theme]/. + + + Edit /openils/var/web/opac/theme/[your new theme]/css/colors.css to use the colors you want. + + + Link to your new style sheet by adding the following to /openils/var/web/opac/skin/default/xml/common/css_common.xml. + +<link type='text/css' +rel="alternate stylesheet" +title='&opac.style.yourtheme;' +href="<!--#echo var='OILS_THEME_BASE'-->/yourtheme/css/colors.css" +name='Default' csstype='color'/> + + + + Give your new theme a name users can select by adding the following to /openils/var/web/opac/locale/ + [your locale]/opac.dtd. + <!ENTITY opac.style.yourtheme "YourTheme"> + + +
+
+ customizing Opac Text and Labels + OPACcustomizingtext and labels + To change text and links used throughout the OPAC, edit the following files: + + /openils/var/web/opac/locale/[your locale]/lang.dtd + /openils/var/web/opac/locale/[your locale]/opac.dtd + + + A better way to customize OPAC text is to create custom dtd files for your lang and opac customizations and then add a include + statement above the default dtd files. + + <!DOCTYPE html PUBLIC + "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" [ + <!--#include virtual="/opac/locale/${locale}/custom_opac.dtd"--> + <!--#include virtual="/opac/locale/${locale}/opac.dtd"--> + ]> + + position is important here. The first/top included dtd files will take precedence over the subsequent dtd includes. + + While it is possible to add text to the xml files itself, it is a good practice to use the DTD file to control the text and refer to the DTD elements in the xml/html code. + For example, the footer.xml file has this code to generate a copyright statement: + +<div id='copyright_text'> +<span>&footer.copyright;</span> + + The included opac.dtd file in the en-US locale directory has this setting for &footer.copyright text: + <!ENTITY footer.copyright "Copyright © 2006-2010 Georgia Public Library Service, and others"> +
+
+ Logo Images + To change the logos used by default to your own logos, replace the following files with images of your own, appropriately sized. + + Large main logo:/openils/var/web/opac/images/main_logo.jpg + Small logo:/openils/var/web/opac/images/small_logo.jpg + +
+
+ Added Content + OPACadded content + By default Evergreen includes customizable Added Content features to enhance the OPAC experience for your user. These features include Amazon book covers + and Google books searching. These features can be turned off or customized. + + Book Covers + The default install of Evergreen includes Amazon book covers. The settings for this are controlled by the <added_content> section of + /openils/conf/opensrf.xml. Here are the key elements of this configuration: + <module>OpenILS::WWW::AddedContent::Amazon</module> + This calls the Amazon perl module. If you wish to link to a different book cover service other than Amazon, you must create a new perl module and refer to it here. + You will also need to change other settings accordingly. There are some available book cover perl modules available in + trunk + <base_url>http://images.amazon.com/images/P/</base_url> + Base URL for Amazon added content fetching. This URL may need to be shortened when new (read: non-image) content fetching + capabilities are added. + <timeout>1</timeout> + Max number of seconds to wait for an added content request to return data. Data not returned within the timeout is considered a failure. + <retry_timeout>600</retry_timeout> + After added content lookups have been disabled due to too many lookup failures, this is the amount of time to wait before we try again. + <max_errors>15</max_errors> + Maximum number of consecutive lookup errors a given process can live before added content lookups are disabled for everyone. + <userid>MY_USER_ID</userid> + If a userid is required to access the added content. + + + Google Books Link + OPACadded contentGoogle Books + The results page will display a Browse in Google Books Search link for items in the results page which have corresponding entries + in Google Books. + This will link to Google Books content including table of contents and complete versions of the work if it exists in Google Books. Items not in Google Books will not + display a link. This feature can be turned off by changing the googleBooksLink variable setting to false in the file + /openils/var/web/opac/skin/default/js/result_common.js. By default, this feature is activated. + + + Syndeticsadded contentSyndetics + Sydantics is another option for added content, Here is an example of using Sydantics as your added content provider: + + + + OpenILS::WWW::AddedContent::Syndetic + http://syndetics.com/index.aspx + + + uneedsomethinghere + + + 1 + + + 600 + + + 15 + + +]]> + + Sydantics is a fee based service. For details, visit: http://www.bowker.com/syndetics/ + +
+
+ Customizing the Results Page + The results page is extremely customizable and allows some built in features to be activated with some simple edits or more advanced customizations can be done by more + experienced web developers. + There are several critical files to edit if you wish to customize the results page: + + /openils/var/web/opac/skin/default/js/result_common.js - This file controls the JavaScript for the top level elements on the results + page and should only be edited by experienced web developers except for the Google books link setting mentioned previously. + /openils/var/web/opac/skin/default/js/rresult.js - Has some good controls of results page settings at the top of this file but + requires web development skills for editing this file. + /openils/var/web/opac/skin/default/xml/result/rresult_table.xml - This controls the layout of the items table on results page. + +
+
+ Customizing the Details Page + OPACcustomizingdetails page + There are many options when customizing the details page in Evergreen. The default settings are effective for most libraries, but it is important to understand the full potential + of Evergreen when displaying the details of items. + Some quick features can be turned on and off by changing variable values in the file /openils/var/web/opac/skin/default/js/rdedail.js. + You will notice the section at the top of this file called Per-skin configuration settings. Changing setting in this section can control several features including + limiting results to local only or showing copy location or displaying serial holdings. Form this section you can also enable refworks and set the Refworks host URL. + Some copy level details settings can be turned on and off from /openils/var/web/opac/skin/default/js/copy_details.js including displaying certain fields + such as due date in the OPAC. + An important file is the /openils/var/web/opac/skin/default/xml/rdetail/rdetail_summary.xml file. This file allows you to control which field to display in + the details summary of the record. The new BibTemplate feature makes this file even more powerful by allowing you to display any marc fields + with a variety of formatting options. + The /openils/var/web/opac/skin/default/xml/rdetail/rdetail_copyinfo.xml file allows you to format the display of the copy information. +
+
+ BibTemplateBibTemplate + BibTemplate is an Evergreen-custom Dojo module which can be used to retrieve and format XML data served by the Evergreen unAPI service. unAPI is a protocol for requesting known objects in specific formats, and Evergreen uses this to supply data – bibliographic records, + metarecords, monograph holdings information, Located URIs, and more to come – in many different formats from MARCXML to MODS to custom XML applications. + unAPI MARCXMLMODS + Managing the display of information from raw XML can be difficult, and the purpose of BibTemplate is to make this simpler, as well as move the display closer to the + client and away from the source data. This is good from a separation-of-responsibilities perspective, and also makes it easier to contain and control local customization. + BibTemplate supports the following Evergreen meta data formats: + + MARCXML - datatype='marcxml-full' (default) + MODS 3.3: datatype='mods33' + Dublin Core: datatype='rdf_dc'Dublin Core + FGDC: datatype='fgdc'FGDC + + + HTML API + BibTemplate follows the Dojo convention of adding attributes to existing (X)HTML in order to progressively change its behavior. The 1.6.0 HTML API consists of a + set of attributes that are added to existing OPAC markup, and fall into two classes:Dojo toolkit + + The slot marker – Elements that denote the location of bibliographic data to insert. + The slot formatter – Elements that specify how the named data should be formatted for display. + + + + Slot Markerslot marker + A slot marker is any displayable HTML element that has a type attribute with a value starting with opac/slot-data. This element will become the container + for the formatted data. A slot marker is required in order to retrieve, format and display data using BibTemplate. A slot marker must also have an + attribute called query containing a CSS3 selector. This selector is applied to the XML returned by the unAPI service in order to gather the specific XML + Nodes that should be considered for formatting.CSS3 + The slot marker can also specify the format of the data to be returned from the unAPI service. This can be specified by adding +{format} to the type + attribute, as in opac/slot-data+mods33-full. The default data format is marcxml-uri, which is an augmented MARCXML record containing Located URI information + and unAPI links. + Example of a slot marker: + <p type='opac/slot-data' query='datafield[tag=245]'></p> + Most useful attribute match operators include: + + datafield[tag=245] - exact match + datafield[tag^=65] - match start of value + + Selectors always narrow, so select broadly and iterate through the NodeList + + + Slot Formatterslot formatter + A slot formatter is any invisible HTML element which has a type attribute with the value of opac/slot-format. (NOTE: before 1.6.0.4, only <script> + elements were supported, though this restriction is now removed to support Internet Explorer.) Only one slot formatter element is allowed in each slot. The text contents + of this element are wrapped in a JavaScriptJavaScript function and run for each node returned by the query CSS3 selector + specified on the slot marker. This function is passed + one argument, called item, which an XML Node captured by the selector. This function should return HTML text. The output for all runs of the slot formatter is + concatenated into a single string and used to replace the contents of the slot marker. + The slot formatter is optional, and if not supplied BibTemplate will create a simple function which extracts and returns the text content of the XML Nodes + specified in the CSS3 selector. + Example of a slot formatter: + + <td class='rdetail_item' id='rdetail_online' type='opac/slot-data' + query='volumes volume uris uri' join=", "> + <script type='opac/slot-format'><![CDATA[ + var link = '<a href="' + item.getAttribute('href') + '">' + item.getAttribute('label') + '</a>'; + if (item.getAttribute('use_restriction')) + link += ' (Use restriction: ' + item.getAttribute('use_restriction') + ')'; + return link; + ]]></script> + </td> + + + + JavaScript APIJavaScript + In order for BibTemplate to find the slot markers and invoke the slot formatters JavaScript renderer must be instantiated and called. This must be done + for each record that is to contribute to a pages display. The API for this is simple and straight-forward: + The slot formatter is optional, and if not supplied BibTemplate will create a simple function which extracts and returns the text content of the XML Nodes + specified in the CSS3 selector.CSS3 + Example of a slot formatter: + + dojo.require('openils.BibTemplate'); // Tell Dojo to load BibTemplate, if it is not already loaded + + // Create a renderer supplying the record id and the short name of the org unit, if known, + // and call the render() method + new openils.BibTemplate({ record : new CGI().param('r'), org_unit : here.shortname() }).render(); + + The argument hash supplied to the new openils.BibTemplate() constructor can have the following properties: + + record – The bibliographic record ID. + org_unit – The relevant Organizational Unit, used to restrict holdings scope as on a search result or record detail page. + root – The root element within the web page that BibTemplate should search for slot markers + + + + BibTemplate Examples + This is all that we had to add to display the contents of an arbitrary MARC field: + +<tr> + <td>Bibliography note</td> + <td type='opac/slot-data' query='datafield[tag=504]'></td> +</tr> + + If multiple fields match, they are displayed on consecutive lines within the same left-hand cell. + To display a specific MARC subfield, add that subfield to the query attribute.MARC + For example, subfield $a is the only user-oriented subfield in field 586 (Awards Note) + +<tr> + <td>Awards note</td> + <td type='opac/slot-data' query='datafield[tag=586] subfield[code=a]'></td> +</tr> + + Hide empty rows by default, and display them only if they have content: + + <tr class='hide_me' id='tag504'> + <td>Bibliographic note</td> + <td type='opac/slot-data' query='datafield[tag=504]'> + <script type='opac/slot-format'><![CDATA[ + dojo.query('#tag504').removeClass('hide_me'); + return '<span>' + dojox.data.dom.textContent(item) + + '</span><br/>'; + ]]></script> + </td></tr> + + + <![CDATA[ ... ]]> tells Evergreen Web server to treat the contents as literal character data - + avoids hilarity of entity substitution + <script type='opac/slot-format'>...</script>, contained within an opac/slot-data element, receives a variable named item + containing the results of the query (a NodeList) + + Suppressing a subfield: + +<tr class='hide_me' id='tag700'> + <td>Additional authors</td> + <td type='opac/slot-data' query='datafield[tag=700]'> + <script type='opac/slot-format'><![CDATA[ + dojo.query('#tag700').removeClass('hide_me'); + var text = ''; + var list = dojo.query('subfield:not([code=4])', item); + for (var i =0; i < list.length; i++) { + text += dojox.data.dom.textContent(list[i]) + ' '; + } + return '<span>' + text + '</span><br/>'; + ]]></script> + </td></tr> + + +
+
+ Customizing the Slimpac + The Slimpac is the an alternative OPAC display for browsers or devices without JavaScript or which may have screen size limitations. There is both a simple and advanced search + option for the Slimpac. + The html files for customizing the Slimpac search display are located in the folder /openils/var/web/opac/extras/slimpac. + start.html is the basic search display and advanced.html is the display for the advanced search option. + By default, the Slimpac files include the same locale dtd as the regular OPAC (opac.dtd). However, the slimpac files do not use the same CSS files as the + regular OPAC which means that if you change the OPAC color scheme, you must also edit the Slimpac files. + + Customizing the Slimpac Results Display + Two files control the display results for the slimpac. Edit the XSL stylesheet (/openils/var/xsl/ATOM2XHTML.xsl) to edit the elements of the + record as pulled from the XML output. + You may also change the style of the page by editing the CSS stylesheet for the results display (/openils/var/web/opac/extras/os.css). + + + Customizing the Slimpac Details/Holdings Display + It is also possible to customize the details page when viewing specific items from the results list. To edit the holdings display which contains the details of the specific + record linked from the results display, edit the CSS stylesheet for the holdings/details page + (/openils/var/web/opac/extras/htmlcard.css). You may also control the content of the record by editing MARC21slim2HTMLCard.xsl. + Holdings data may also be controlled by editing MARC21slim2HTMLCard-holdings.xsl. + +
+
+ Integrating a Evergreen Search Form on a Web Page + It is possible to embed a simple search form into an html page which will allow users to search for materials in your Evergreen catalog. Here is code which can be embedded + anywhere in the body of your web page: + +
+ Quick Catalog Search:
+ + + + + + + +
+ +]]> +
+ Replace [domain name] with the domain name of your Evergreen server and replace [locale] with the desired locale of + your Evergreen instance (e.g. en-US). This does a basic keyword search. Different types of searches and more advanced search forms can be developed. For further information on the url parameters used by Evergreen, see for more details. +
+
+ diff --git a/development/customizingstaffclient.xml b/development/customizingstaffclient.xml new file mode 100644 index 0000000000..dbe1fa4afc --- /dev/null +++ b/development/customizingstaffclient.xml @@ -0,0 +1,54 @@ + + + Customizing the Staff Client + staff clientcustomizing + This chapter will give you some guidance on customizing the staff client. + The files related to the staff client are located in the directory /openils/var/web/xul/[staff client version]/server/ +
+ Changing Colors and Images + To change or adjust the image on the main screen edit /openils/var/web/xul/index.xhtml. By default, the image on this page is + main_logo.jpg which is the same main logo used in the OPAC. + To adjust colors on various staff client pages edit the corresponding cascading style sheets located in + /openils/var/web/xul/[staff client version]/server/skin/. Other display aspects can also be adjusted using these cascading style sheets. +
+
+ Changing Labels and Messages + staff clientcustomizinglabels and messages + You can customize labels in the staff client by editing the corresponding DTD files. The staff client uses the same lang.dtd used by the OPAC. This file is located in /openils/var/web/opac/locale/[your locale]. Other labels are controlled by the staff client specific lang.dtd file in /openils/var/web/xul/client version]/server/locale/[your locale]/. +
+
+ Changing the Search Skin + There are a few ways to change the custom skin for OPAC searching in staff client. + + Changing the Search Skin on Server - Overriding Local Settings + To change the opac search skins used by the staff client create a file named custom.js and place it in the + /openils/var/web/xul/[staff client version]/server/skin/ directory. This will effect all staff clients since these settings will + override local settings. + For example, the following text in custom.js would set the staff client opac, details page, results page and browse function to the craftsman + skin: + +urls['opac'] = '/opac/' + LOCALE + '/skin/craftsman/xml/advanced.xml?nps=1'; +urls['opac_rdetail'] = '/opac/' + LOCALE + '/skin/craftsman/xml/rdetail.xml'; +urls['opac_rresult'] = '/opac/' + LOCALE + '/skin/craftsman/xml/rresult.xml'; +urls['browser'] = '/opac/' + LOCALE + '/skin/craftsman/xml/advanced.xml?nps=1'; + + Restart the staff client to see the changes. + + + Changing the Search Skin on an individual Machine + To change the search skin on an individual machine for personal preferences or needs, edit the file + /[Evergreen staff client path]/build/chrome/content/main/constants.js. + Find the lines which point to the urls for the OPAC and edit accordingly. For example, here is an example to set the opac, details page, results page and browse + function to the craftsman skin: + + 'opac' : '/opac/' + LOCALE + '/skin/craftsman/xml/advanced.xml?nps=1', +'opac_rdetail' : '/opac/' + LOCALE + '/skin/craftsman/xml/rdetail.xml', +'opac_rresult' : '/opac/' + LOCALE + '/skin/craftsman/xml/rresult.xml', +... +'browser' : '/opac/' + LOCALE + '/skin/craftsman/xml/advanced.xml?nps=1', + + After editing this file, save it and restart the staff client for the changes to take effect. + +
+
diff --git a/development/datamodelsandaccess.xml b/development/datamodelsandaccess.xml new file mode 100644 index 0000000000..93ec2462a5 --- /dev/null +++ b/development/datamodelsandaccess.xml @@ -0,0 +1,789 @@ + + + + Evergreen Data Models and Access + + + This chapter was taken from Dan Scott's Developer Workshop, February 2010. + +
+ Exploring the Database Schema + The database schema is tied pretty tightly to PostgreSQL. Although PostgreSQLdatabasesPostgreSQL + adheres closely to ANSI SQL standards, the use of schemas, SQL functionsANSI + implemented in both plpgsql and plperl, and PostgreSQL’s native full-text + search would make it… challenging… to port to other database platforms. + A few common PostgreSQL interfaces for poking around the schema and + manipulating data are: + + + + psql (the command line client)databasesPostgreSQLpsql + + + + + pgadminIII (a GUI client).databasesPostgreSQLpgadminIII + + + + Or you can read through the source files in Open-ILS/src/sql/Pg. + Let’s take a quick tour through the schemas, pointing out some highlights + and some key interdependencies: + + + + actor.org_unit → asset.copy_location + + + + + actor.usr → actor.card + + + + + biblio.record_entry → asset.call_number → asset.copy + + + + + config.metabib_field → metabib.*_field_entry + + + + This documentation also contains an Appendix for the Evergreen . +
+
+ Database access methods + You could use direct access to the database via Perl DBI, JDBC, etc, + but Evergreen offers several database CRUD services for + creating / retrieving / updating / deleting data. These avoid tying + you too tightly to the current database schema and they funnel database + access through the same mechanism, rather than tying up connections + with other interfaces. +
+
+ Evergreen Interface Definition Language (IDL) + Evergreen Interface Definition Language (IDL) + Defines properties and required permissions for Evergreen classes. + To reduce network overhead, a given object is identified via a + class-hint and serialized as a JSON array of properties (no named properties). + As of 1.6, fields will be serialized in the order in which they appear + in the IDL definition file, and the is_new / is_changed / is_deleted + properties are automatically added. This has greatly reduced the size of + the fm_IDL.xml file and makes DRY people happier :) + + + + … oils_persist:readonly tells us, if true, that the data lives in the database, but is pulled from the SELECT statement defined in the <oils_persist:source_definition> + child element + + + + + IDL basic example (config.language_map) + +<class id="clm" controller="open-ils.cstore open-ils.pcrud" + oils_obj:fieldmapper="config::language_map" + oils_persist:tablename="config.language_map" + reporter:label="Language Map" oils_persist:field_safe="true"> + <fields oils_persist:primary="code" oils_persist:sequence=""> + <field reporter:label="Language Code" name="code" + reporter:selector="value" reporter:datatype="text"/> + <field reporter:label="Language" name="value" + reporter:datatype="text" oils_persist:i18n="true"/> + </fields> + <links/> + <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1"> + <actions> + <create global_required="true" permission="CREATE_MARC_CODE"> + <retrieve global_required="true" + permission="CREATE_MARC_CODE UPDATE_MARC_CODE DELETE_MARC_CODE"> + <update global_required="true" permission="UPDATE_MARC_CODE"> + <delete global_required="true" permission="DELETE_MARC_CODE"> + </actions> + </permacrud> +</class> + + + + + The class element defines the attributes and permissions for classes, + and relationships between classes. + + Evergreen Interface Definition Language (IDL)class element + + + + The id attribute on the class element defines the class hint that is + used everywhere in Evergreen. + + + + + The controller attribute defines the OpenSRF + services that provide access to the data for the class objects. + + + + + + + The oils_obj::fieldmapper attribute defines the name of the class that + is generated by OpenILS::Utils::Fieldmapper. + + + + + The oils_persist:tablename attribute defines the name of the table + that contains the data for the class objects. + + + + + The reporter interface uses reporter:label attribute values in + the source list to provide meaningful class and attribute names. The + open-ils.fielder service generates a set of methods that provide direct + access to the classes for which oils_persist:field_safe is true. For + example, + + + +srfsh# request open-ils.fielder open-ils.fielder.clm.atomic \ +{"query":{"code":{"=":"eng"}}} + +Received Data: [ + { + "value":"English", + "code":"eng" + } +] + + + + + + The fields element defines the list of fields for the class. + + Evergreen Interface Definition Language (IDL)fields element + + + + The oils_persist:primary attribute defines the column that acts as + the primary key for the table. + + + + + The oils_persist:sequence attribute holds the name of the database + sequence. + + + + + + + Each field element defines one property of the class. + + Evergreen Interface Definition Language (IDL)field element + + + + The name attribute defines the getter/setter method name for the field. + + + + + The reporter:label attribute defines the attribute name as used in + the reporter interface. + + + + + The reporter:selector attribute defines the field used in the reporter + filter interface to provide a selectable list. This gives the user a more + meaningful access point than the raw numeric ID or abstract code. + + + + + The reporter:datatype attribute defines the type of data held by + this property for the purposes of the reporter. + + + + + + + The oils_persist:i18n attribute, when true, means that + translated values for the field’s contents may be accessible in + different locales. + + + + + Evergreen Interface Definition Language (IDL)permacrud element + The permacrud element defines the permissions (if any) required + to create, retrieve, update, + and delete data for this + class. open-ils.permacrud must be defined as a controller for the class + for the permissions to be applied. + + + + + + Each action requires one or more permission values that the + user must possess to perform the action. + + + + + If the global_required attribute is true, then the user must + have been granted that permission globally (depth = 0) to perform + the action. + + + + + The context_field attribute denotes the <field> that identifies + the org_unit at which the user must have the pertinent permission. + + + + Evergreen Interface Definition Language (IDL)action element + + An action element may contain a <context_field> element that + defines the linked class (identified by the link attribute) and + the field in the linked class that identifies the org_unit where + the permission must be held. + + + + Evergreen Interface Definition Language (IDL)context_field element + + If the <context_field> element contains a jump attribute, + then it defines a link to a link to a class with a field identifying + the org_unit where the permission must be held. + + + + + + + + + + Reporter data types and their possible values + + + + bool: Boolean true or false + + + + + id: ID of the row in the database + + + + + int: integer value + + + + + interval: PostgreSQL time interval + + + + + link: link to another class, as defined in the <links> + element of the class definition + + + + + money: currency amount + + + + + org_unit: list of org_units + + + + + text: text value + + + + + timestamp: PostgreSQL timestamp + + + + + + IDL example with linked fields (actor.workstation) + Just as tables often include columns with foreign keys that point + to values stored in the column of a different table, IDL classes + can contain fields that link to fields in other classes. The <links> + element defines which fields link to fields in other classes, and + the nature of the relationship: + +<class id="aws" controller="open-ils.cstore" + oils_obj:fieldmapper="actor::workstation" + oils_persist:tablename="actor.workstation" + reporter:label="Workstation"> + <fields oils_persist:primary="id" + oils_persist:sequence="actor.workstation_id_seq"> + <field reporter:label="Workstation ID" name="id" + reporter:datatype="id"/> + <field reporter:label="Workstation Name" name="name" + reporter:datatype="text"/> + <field reporter:label="Owning Library" name="owning_lib" + reporter:datatype="org_unit"/> + <field reporter:label="Circulations" name="circulations" + oils_persist:virtual="true" reporter:datatype="link"/> + </fields> + <links> + <link field="owning_lib" reltype="has_a" key="id" + map="" class="aou"/> + <link field="circulations" reltype="has_many" key="workstation" + map="" class="circ"/> + <link field="circulation_checkins" reltype="has_many" + key="checkin_workstation" map="" class="circ"/> + </links> +</class> + + + + + This field includes an oils_persist:virtual attribute with the value of + true, meaning that the linked class circ is a virtual class. + + + + + The <links> element contains 0 or more <link> elements. + + + + + Each <link> element defines the field (field) that links to a different + class (class), the relationship (rel_type) between this field and the target + field (key). If the field in this class links to a virtual class, the (map) + attribute defines the field in the target class that returns a list of matching + objects for each object in this class. + + + + +
+
+ <literal>open-ils.cstore</literal> data access interfaces + cstore + For each class documented in the IDL, the open-ils.cstore service + automatically generates a set of data access methods, based on the + oils_persist:tablename class attribute. + For example, for the class hint clm, cstore generates the following + methods with the config.language_map qualifer: + + + + open-ils.cstore.direct.config.language_map.id_list {"code" { "like": "e%" } } + + Retrieves a list composed only of the IDs that match the query. + + + + open-ils.cstore.direct.config.language_map.retrieve "eng" + + Retrieves the object that matches a specific ID. + + + + open-ils.cstore.direct.config.language_map.search {"code" : "eng"} + + Retrieves a list of objects that match the query. + + + + open-ils.cstore.direct.config.language_map.create <_object_> + + Creates a new object from the passed in object. + + + + open-ils.cstore.direct.config.language_map.update <_object_> + + Updates the object that has been passed in. + + + + open-ils.cstore.direct.config.language_map.delete "eng" + + Deletes the object that matches the query. + + +
+
+ open-ils.pcrud data access interfaces + pcrud + For each class documented in the IDL, the open-ils.pcrud service + automatically generates a set of data access methods, based on the + oils_persist:tablename class attribute. + For example, for the class hint clm, open-ils.pcrud generates the following + methods that parallel the open-ils.cstore interface: + + + + open-ils.pcrud.id_list.clm <_authtoken_>, { "code": { "like": "e%" } } + + + + + open-ils.pcrud.retrieve.clm <_authtoken_>, "eng" + + + + + open-ils.pcrud.search.clm <_authtoken_>, { "code": "eng" } + + + + + open-ils.pcrud.create.clm <_authtoken_>, <_object_> + + + + + open-ils.pcrud.update.clm <_authtoken_>, <_object_> + + + + + open-ils.pcrud.delete.clm <_authtoken_>, "eng" + + + +
+
+ Transaction and savepoint control + Both open-ils.cstore and open-ils.pcrud enable you to control database transactions + to ensure that a set of operations either all succeed, or all fail, + atomically: + + + + open-ils.cstore.transaction.begin + + + + + open-ils.cstore.transaction.commit + + + + + open-ils.cstore.transaction.rollback + + + + + open-ils.pcrud.transaction.begin + + + + + open-ils.pcrud.transaction.commit + + + + + open-ils.pcrud.transaction.rollback + + + + At a more granular level, open-ils.cstore and open-ils.pcrud enable you to set database + savepoints to ensure that a set of operations either all succeed, or all + fail, atomically, within a given transaction: + + + + open-ils.cstore.savepoint.begin + + + + + open-ils.cstore.savepoint.commit + + + + + open-ils.cstore.savepoint.rollback + + + + + open-ils.pcrud.savepoint.begin + + + + + open-ils.pcrud.savepoint.commit + + + + + open-ils.pcrud.savepoint.rollback + + + + Transactions and savepoints must be performed within a stateful + connection to the open-ils.cstore and open-ils.pcrud services. + In srfsh, you can open a stateful connection using the open + command, and then close the stateful connection using the close + command - for example: + srfsh# open open-ils.cstore + ... perform various transaction-related work + srfsh# close open-ils.cstore + + JSON Queries + JSON + Beyond simply retrieving objects by their ID using the \*.retrieve + methods, you can issue queries against the \*.delete and \*.search + methods using JSON to filter results with simple or complex search + conditions. + For example, to generate a list of barcodes that are held in a + copy location that allows holds and is visible in the OPAC: + +srfsh# request open-ils.cstore open-ils.cstore.json_query + {"select": {"acp":["barcode"], "acpl":["name"]}, + "from": {"acp":"acpl"}, + "where": [ + {"+acpl": "holdable"}, + {"+acpl": "opac_visible"} + ]} + +Received Data: { + "barcode":"BARCODE1", + "name":"Stacks" +} + +Received Data: { + "barcode":"BARCODE2", + "name":"Stacks" +} + + + + + Invoke the json_query service. + + + + + Select the barcode field from the acp class and the name + field from the acpl class. + + + + + Join the acp class to the acpl class based on the linked field + defined in the IDL. + + + + + Add a where clause to filter the results. We have more than one + condition beginning with the same key, so we wrap the conditions inside + an array. + + + + + The first condition tests whether the boolean value of the holdable + field on the acpl class is true. + + + + + The second condition tests whether the boolean value of the + opac_visible field on the acpl class is true. + + + + For thorough coverage of the breadth of support offered by JSON + query syntax, see JSON Queries: A Tutorial. + + + Fleshing linked objects + A simplistic approach to retrieving a set of objects that are linked to + an object that you are retrieving - for example, a set of call numbers + linked to the barcodes that a given user has borrowed - would be to: + 1. Retrieve the list of circulation objects (circ class) + for a given user (usr class). + 2. For each circulation object, look up the target copy (target_copy + field, linked to the acp class). + 3. For each copy, look up the call number for that copy (call_number + field, linked to the acn class). + However, this would result in potentially hundreds of round-trip + queries from the client to the server. Even with low-latency connections, + the network overhead would be considerable. So, built into the open-ils.cstore and + open-ils.pcrud access methods is the ability to flesh linked fields - + that is, rather than return an identifier to a given linked field, + the method can return the entire object as part of the initial response. + Most of the interfaces that return class instances from the IDL offer the + ability to flesh returned fields. For example, the + open-ils.cstore.direct.\*.retrieve methods allow you to specify a + JSON structure defining the fields you wish to flesh in the returned object. + Fleshing fields in objects returned by <literal>open-ils.cstore</literal> + +srfsh# request open-ils.cstore open-ils.cstore.direct.asset.copy.retrieve 1, \ + { + "flesh": 1, + "flesh_fields": { + "acp": ["location"] + } + } + + + + + + The flesh argument is the depth at which objects should be fleshed. + For example, to flesh out a field that links to another object that includes + a field that links to another object, you would specify a depth of 2. + + + + + The flesh_fields argument contains a list of objects with the fields + to flesh for each object. + + + + Let’s flesh things a little deeper. In addition to the copy location, + let’s also flesh the call number attached to the copy, and then flesh + the bibliographic record attached to the call number. + Fleshing fields in fields of objects returned by <literal>open-ils.cstore</literal> + +request open-ils.cstore open-ils.cstore.direct.asset.copy.retrieve 1, \ + { + "flesh": 2, + "flesh_fields": { + "acp": ["location", "call_number"], + "acn": ["record"] + } + } + + + +
+
+ Adding an IDL entry for ResolverResolver + Most OpenSRF methods in Evergreen define their object interface in the + IDL. Without an entry in the IDL, the prospective caller of a given + method is forced to either call the method and inspect the returned + contents, or read the source to work out the structure of the JSON + payload. At this stage of the tutorial, we have not defined an entry + in the IDL to represent the object returned by the + open-ils.resolver.resolve_holdings method. It is time to complete + that task. + The open-ils.resolver service is unlike many of the other classes + defined in the IDL because its data is not stored in the Evergreen + database. Instead, the data is requested from an external Web service + and only temporarily cached in memcached. Fortunately, the IDL + enables us to represent this kind of class by setting the + oils_persist:virtual class attribute to true. + So, let’s add an entry to the IDL for the open-ils.resolver.resolve_holdings + service: + + And let’s make ResolverResolver.pm return an array composed of our new + rhr classes rather than raw JSON objects: + + Once we add the new entry to the IDL and copy the revised ResolverResolver.pm + Perl module to /openils/lib/perl5/OpenILS/Application/, we need to: + + + + Copy the updated IDL to both the /openils/conf/ and + /openils/var/web/reports/ directories. The Dojo approach to + parsing the IDL uses the IDL stored in the reports directory. + + + + + Restart the Perl services to make the new IDL visible to the services + and refresh the open-ils.resolver implementation + + + + + Rerun /openils/bin/autogen.sh to regenerate the JavaScript versionsautogen + of the IDL required by the HTTP translator and gateway. + + + + We also need to adjust our JavaScript client to use the nifty newJavaScript + objects that open-ils.resolver.resolve_holdings now returns. + The best approach is to use the support in Evergreen’s Dojo extensionsDojo toolkit + to generate the JavaScript classes directly from the IDL XML file. + Accessing classes defined in the IDL via Fieldmapper + + + + + + Load the Dojo core. + + + + + fieldmapper.AutoIDL reads /openils/var/reports/fm_IDL.xml to + generate a list of class properties. + + + + + fieldmapper.dojoData seems to provide a store for Evergreen data + accessed via Dojo. + + + + + fieldmapper.Fieldmapper converts the list of class properties into + actual classes. + + + + + fieldmapper.standardRequest invokes an OpenSRF method and returns + an array of objects. + + + + + The first argument to fieldmapper.standardRequest is an array + containing the OpenSRF service name and method name. + + + + + The second argument to fieldmapper.standardRequest is an array + containing the arguments to pass to the OpenSRF method. + + + + + As Fieldmapper has instantiated the returned objects based on their + class hints, we can invoke getter/setter methods on the objects. + + + +
+ +
diff --git a/development/development_intro.xml b/development/development_intro.xml new file mode 100644 index 0000000000..e227c2d55a --- /dev/null +++ b/development/development_intro.xml @@ -0,0 +1,3 @@ + +This part will allow you to customize the Evergreen OPAC, develop useful SQL queries and help you learn the skills necessary for developing new Evergreen applications. It is intended for experienced Evergreen administrators and Evergreen developers who wish to customize Evergreen or enhance their knowledge of the database structure and code. Some of these chapters are introductory in nature, but others assume some level of web development, programming, or database administration experience. + diff --git a/development/directoriesandFiles.xml b/development/directoriesandFiles.xml new file mode 100644 index 0000000000..eae71b7bb0 --- /dev/null +++ b/development/directoriesandFiles.xml @@ -0,0 +1,140 @@ + + + + Evergreen File Structure and Configuration Files + This section will describe the basic file structure and cover key configuration files. Understanding the directory and file structure of Evergreen will allow you + to be able to customize your Evergreen software and take full advantage of many features. + + +
+ Evergreen Directory Structure + This is the top level directory structure of Evergreen located in the default installation directory /openils: + + Evergreen Directory Structure + + + + + + Directory + Description + + + + + bin + Contains many critical Perl and shell scripts such as autogen.sh and + oils.ctl. + + + conf + Contains the configuration scripts including the two most important base configuration files opensrf_core.xml and opensrf.xml. + + + include + Contains the header files used by the scripts written in C. + + + lib + Contains the core code of Evergreen including the C code and perl modules. In particular, the perl modules in the + subdirectoryperl5/OpenILS + are of particular interest to developers. + + + var + Largest directory and includes the web directories (web), lock pid fies + (run), circ setting files (circ) templates + (templates) and log (templates and + data) files. + + + +
+
+ Evergreen Configuration Files + + + Key Evergreen Configuration Files + + + + + + File + Description + + + + + /openils/conf/opensrf_core.xmlconfiguration files + opensrf_core.xml + + Files which controls which Evergreen services are run on the public and private routers. For a service to run, it must be registered in this file. This file also controls the loglevel and points to the log file for the services. An Evergreen restart is required for changes to take effect. + + + /openils/conf/opensrf.xmlconfiguration filesopensrf.xml + Use this file to set directory locations, the default locale, default notice settings and settings for all Evergreen services. + It is critical for any administrator to understand the settings in this file. An Evergreen restart is required for changes to take effect. + + + /openils/conf/fm_IDL.xml configuration filesfm_IDL.xml + + Used for linking the OpenSRF/Evergreen services to the Evergreen database tables. An Evergreen restart is required for changes to take + effect. Running autogen.sh is also required. + + + /etc/apache2/eg_vhost.confconfiguration filesApache + Controls the Evergreen virtual site. Allows to configure the skin for the OPAC or configure various directories within the Apache web server. + An Apache restart is required for changes to this file to take effect. + + + +
+ + Useful Evergreen Scripts + + + + + + File + Description + + + + + /openils/bin/autogen.shautogen + Used to update changes to org units and the fm_IDL.xml file. Will generate web and staff client pages based on contents of files and + Evergreen database entries. + + + /openils/bin/clark-kent.plreportsstarting + + Perl script for starting the reporter. + + + /openils/bin/action_trigger_runner.plaction triggers + runner + Perl script used to trigger the actions set up in the action trigger tool in the staff client. + + + /openils/bin/osrf_ctl.sh + The start up script for OpenSRF and Evergreen. + + + /openils/bin/reshelving_ complete.srfsh + Change status from reshelving to available for items which have been in reshelving for a certain amount of time. + + + /openils/bin/srfshsrfsh + + Used to start the OpenSRF shell. + + + + +
+
+
+
diff --git a/development/installchecklist.xml b/development/installchecklist.xml new file mode 100644 index 0000000000..f4af92280a --- /dev/null +++ b/development/installchecklist.xml @@ -0,0 +1,84 @@ + + + + Evergreen Installation Checklist + + This appendix is a checklist of things to do to istall and configure Evergreen. It will refer to the necessary chapter with the specific instructions for each item. + + + + + Install OpenSRFOpenSRF + + + Install Evergreen server software + + + Install Evergreen staff clientstaff client + + + Establish a back up strategy for Evergreen data and files + + + Configure PostgreSQL for better performancePostgreSQL + + + Configure Evergreen error logginglogs + + + Set up organizational unit typesorganizational unit types + + + Set up organizational unitsorganizational units + + + Customize localization and languages (optional)localization and languages + + + Add circ modifierscirculation modifiers + + + Configure copy statusescopy status + + + Add cataloguing templatescataloguing templates + + + Add user groups and assign permissionspermissions + + + Adjust various Local Administration Settings + + + Adjust circulation policies and penalty threshholds for groupspenalty threshholds + + + Add staff users + + + Customize OPAC as neededOPACcustomizing + + + Import datamigratingimporting data + + + Start the reporter service and set up reportsreportsstarting + + + Set up email notifications for holds and overdue itemsnotifications + + + Set up action triggersaction triggers + + + Set up Z39.50 server (optional)Z39.50 + + + Adjust search relevancy settings if required (optional)search relevancy + + + Install SIP server (optional) - for communications with automated devices such as self check stations, autmated sorters and other devices using SIPSIP + + + diff --git a/development/introduction_to_sql.xml b/development/introduction_to_sql.xml new file mode 100644 index 0000000000..a6080d304d --- /dev/null +++ b/development/introduction_to_sql.xml @@ -0,0 +1,2126 @@ + + + + Introduction to SQL for Evergreen Administrators + + + This chapter was taken from Dan Scott's Introduction to SQL for Evergreen Administrators, February 2010. + +
+ Introduction to SQL Databases + sql + + Introduction + Over time, the SQL database has become the standard method of storing, + retrieving, and processing raw data for applications. Ranging from embedded + databases such as SQLite and Apache Derby, to enterprise databases such as + Oracle and IBM DB2, any SQL database offers basic advantages to application + developers such as standard interfaces (Structured Query Language (SQL), Java + Database Connectivity (JDBC), Open Database Connectivity (ODBC), Perl Database + Independent Interface (DBI)), a standard conceptual model of data (tables, + fields, relationships, constraints, etc), performance in storing and retrieving + data, concurrent access, etc. + Evergreen is built on PostgreSQL, an open source SQL database that began as + POSTGRES at the University of California at Berkeley in 1986 as a research + project led by Professor Michael Stonebraker. A SQL interface was added to a + fork of the original POSTGRES Berkelely code in 1994, and in 1996 the project + was renamed PostgreSQL. + + + Tables + sqltables + The table is the cornerstone of a SQL database. Conceptually, a database table + is similar to a single sheet in a spreadsheet: every table has one or more + columns, with each row in the table containing values for each column. Each + column in a table defines an attribute corresponding to a particular data type. + We’ll insert a row into a table, then display the resulting contents. Don’t + worry if the INSERT statement is completely unfamiliar, we’ll talk more about + the syntax of the insert statement later. + <literal>actor.usr_note</literal> database table + +evergreen=# INSERT INTO actor.usr_note (usr, creator, pub, title, value) + VALUES (1, 1, TRUE, 'Who is this guy?', 'He''s the administrator!'); + +evergreen=# select id, usr, creator, pub, title, value from actor.usr_note; + id | usr | creator | pub | title | value +----+-----+---------+-----+------------------+------------------------- + 1 | 1 | 1 | t | Who is this guy? | He's the administrator! +(1 rows) + + + PostgreSQL supports table inheritance, which lets you define tables that + inherit the column definitions of a given parent table. A search of the data in + the parent table includes the data in the child tables. Evergreen uses table + inheritance: for example, the action.circulation table is a child of the + money.billable_xact table, and the money.*_payment tables all inherit from + the money.payment parent table. + + + Schemas + PostgreSQL, like most SQL databases, supports the use of schema names to group + collections of tables and other database objects together. You might think of + schemas as namespaces if you’re a programmer; or you might think of the schema + / table / column relationship like the area code / exchange / local number + structure of a telephone number. + + Examples: database object names + + + + + + + + + + Full name + Schema name + Table name + Field name + + + + + actor.usr_note.title + actor + usr_note + title + + + biblio.record_entry.marc + biblio + record_entry + marc + + + +
+ The default schema name in PostgreSQL is public, so if you do not specify a + schema name when creating or accessing a database object, PostgreSQL will use + the public schema. As a result, you might not find the object that you’re + looking for if you don’t use the appropriate schema. + Example: Creating a table without a specific schema + +evergreen=# CREATE TABLE foobar (foo TEXT, bar TEXT); +CREATE TABLE +evergreen=# \d foobar + Table "public.foobar" + Column | Type | Modifiers +--------+------+----------- + foo | text | + bar | text | + + + Example: Trying to access a unqualified table outside of the public schema + evergreen=# SELECT * FROM usr_note; + ERROR: relation "usr_note" does not exist + LINE 1: SELECT * FROM usr_note; + ^ + + Evergreen uses schemas to organize all of its tables with mostly intuitive, + if short, schema names. Here’s the current (as of 2010-01-03) list of schemas + used by Evergreen: + + Evergreen schema names + + + + + + + + Schema name + Description + + + + + acq + Acquisitions + + + action + Circulation actions + + + action_trigger + Event mechanisms + + + actor + Evergreen users and organization units + + + asset + Call numbers and copies + + + auditor + Track history of changes to selected tables + + + authority + Authority records + + + biblio + Bibliographic records + + + booking + Resource bookings + + + config + Evergreen configurable options + + + container + Buckets for records, call numbers, copies, and users + + + extend_reporter + Extra views for report definitions + + + metabib + Metadata about bibliographic records + + + money + Fines and bills + + + offline + Offline transactions + + + permission + User permissions + + + query + Stored SQL statements + + + reporter + Report definitions + + + search + Search functions + + + serial + Serial MFHD records + + + stats + Convenient views of circulation and asset statistics + + + vandelay + MARC batch importer and exporter + + + +
+ The term schema has two meanings in the world of SQL databases. We have + discussed the schema as a conceptual grouping of tables and other database + objects within a given namespace; for example, "the actor schema contains the + tables and functions related to users and organizational units". Another common + usage of schema is to refer to the entire data model for a given database; + for example, "the Evergreen database schema". +
+ + Columns + Each column definition consists of: + + + + a data type + + + + + (optionally) a default value to be used whenever a row is inserted that + does not contain a specific value + + + + + (optionally) one or more constraints on the values beyond data type + + + + Although PostgreSQL supports dozens of data types, Evergreen makes our life + easier by only using a handful. + + PostgreSQL data types used by Evergreen + + + + + + + + + Type name + Description + Limits + + + + + INTEGER + Medium integer + -2147483648 to +2147483647 + + + BIGINT + Large integer + -9223372036854775808 to 9223372036854775807 + + + SERIAL + Sequential integer + 1 to 2147483647 + + + BIGSERIAL + Large sequential integer + 1 to 9223372036854775807 + + + TEXT + Variable length character data + Unlimited length + + + BOOL + Boolean + TRUE or FALSE + + + TIMESTAMP WITH TIME ZONE + Timestamp + 4713 BC to 294276 AD + + + TIME + Time + Expressed in HH:MM:SS + + + NUMERIC(precision, scale) + Decimal + Up to 1000 digits of precision. In Evergreen mostly used for money + values, with a precision of 6 and a scale of 2 (####.##). + + + +
+ Full details about these data types are available from the + data types section of + the PostgreSQL manual. +
+ + Constraints + + Prevent NULL values + A column definition may include the constraint NOT NULL to prevent NULL + values. In PostgreSQL, a NULL value is not the equivalent of zero or false or + an empty string; it is an explicit non-value with special properties. We’ll + talk more about how to work with NULL values when we get to queries. + + + Primary key + Every table can have at most one primary key. A primary key consists of one or + more columns which together uniquely identify each row in a table. If you + attempt to insert a row into a table that would create a duplicate or NULL + primary key entry, the database rejects the row and returns an error. + Natural primary keys are drawn from the intrinsic properties of the data being + modelled. For example, some potential natural primary keys for a table that + contains people would be: + + Example: Some potential natural primary keys for a table of people + + + + + + + + + Natural key + Pros + Cons + + + + + First name, last name, address + No two people with the same name would ever live at the same address, right? + Lots of columns force data duplication in referencing tables + + + SSN or driver’s license + These are guaranteed to be unique + Lots of people don’t have an SSN or a driver’s license + + + +
+ To avoid problems with natural keys, many applications instead define surrogate + primary keys. A surrogate primary keys is a column with an autoincrementing + integer value added to a table definition that ensures uniqueness. + Evergreen uses surrogate keys (a column named id with a SERIAL data type) + for most of its tables. +
+ + Foreign keys + Every table can contain zero or more foreign keys: one or more columns that + refer to the primary key of another table. + For example, let’s consider Evergreen’s modelling of the basic relationship + between copies, call numbers, and bibliographic records. Bibliographic records + contained in the biblio.record_entry table can have call numbers attached to + them. Call numbers are contained in the asset.call_number table, and they can + have copies attached to them. Copies are contained in the asset.copy table. + + Example: Evergreen’s copy / call number / bibliographic record relationships + + + + + + + + + + Table + Primary key + Column with a foreign key + Points to + + + + + asset.copy + asset.copy.id + asset.copy.call_number + asset.call_number.id + + + asset.call_number + asset.call_number.id + asset.call_number.record + biblio.record_entry.id + + + biblio.record_entry + biblio.record_entry.id + + + + + +
+
+ + Check constraints + PostgreSQL enables you to define rules to ensure that the value to be inserted + or updated meets certain conditions. For example, you can ensure that an + incoming integer value is within a specific range, or that a ZIP code matches a + particular pattern. + +
+ + Deconstructing a table definition statement + The actor.org_address table is a simple table in the Evergreen schema that + we can use as a concrete example of many of the properties of databases that + we have discussed so far. + +CREATE TABLE actor.org_address ( + id SERIAL PRIMARY KEY, + valid BOOL NOT NULL DEFAULT TRUE, + address_type TEXT NOT NULL DEFAULT 'MAILING', + org_unit INT NOT NULL REFERENCES actor.org_unit (id) + DEFERRABLE INITIALLY DEFERRED, + street1 TEXT NOT NULL, + street2 TEXT, + city TEXT NOT NULL, + county TEXT, + state TEXT NOT NULL, + country TEXT NOT NULL, + post_code TEXT NOT NULL +); + + + + + The column named id is defined with a special data type of SERIAL; if + given no value when a row is inserted into a table, the database automatically + generates the next sequential integer value for the column. SERIAL is a + popular data type for a primary key because it is guaranteed to be unique - and + indeed, the constraint for this column identifies it as the PRIMARY KEY. + + + + + The data type BOOL defines a boolean value: TRUE or FALSE are the only + acceptable values for the column. The constraint NOT NULL instructs the + database to prevent the column from ever containing a NULL value. The column + property DEFAULT TRUE instructs the database to automatically set the value + of the column to TRUE if no value is provided. + + + + + The data type TEXT defines a text column of practically unlimited length. + As with the previous column, there is a NOT NULL constraint, and a default + value of 'MAILING' will result if no other value is supplied. + + + + + The REFERENCES actor.org_unit (id) clause indicates that this column has a + foreign key relationship to the actor.org_unit table, and that the value of + this column in every row in this table must have a corresponding value in the + id column in the referenced table (actor.org_unit). + + + + + The column named street2 demonstrates that not all columns have constraints + beyond data type. In this case, the column is allowed to be NULL or to contain a + TEXT value. + + + + + + Displaying a table definition using <literal>psql</literal> + The psql command-line interface is the preferred method for accessing + PostgreSQL databases. It offers features like tab-completion, readline support + for recalling previous commands, flexible input and output formats, and + is accessible via a standard SSH session. + If you press the Tab key once after typing one or more characters of the + database object name, psql automatically completes the name if there are no + other matches. If there are other matches for your current input, nothing + happens until you press the Tab key a second time, at which point psql + displays all of the matches for your current input. + To display the definition of a database object such as a table, issue the + command \d _object-name_. For example, to display the definition of the + actor.usr_note table: + +$ psql evergreen +psql (8.4.1) +Type "help" for help. + +evergreen=# \d actor.usr_note + Table "actor.usr_note" + Column | Type | Modifiers +-------------+--------------------------+------------------------------------------------------------- + id | bigint | not null default nextval('actor.usr_note_id_seq'::regclass) + usr | bigint | not null + creator | bigint | not null + create_date | timestamp with time zone | default now() + pub | boolean | not null default false + title | text | not null + value | text | not null +Indexes: + "usr_note_pkey" PRIMARY KEY, btree (id) + "actor_usr_note_creator_idx" btree (creator) + "actor_usr_note_usr_idx" btree (usr) +Foreign-key constraints: + "usr_note_creator_fkey" FOREIGN KEY (creator) REFERENCES actor.usr(id) ON ... + "usr_note_usr_fkey" FOREIGN KEY (usr) REFERENCES actor.usr(id) ON DELETE .... + +evergreen=# \q +$ + + + + + This is the most basic connection to a PostgreSQL database. You can use a + number of other flags to specify user name, hostname, port, and other options. + + + + + The \d command displays the definition of a database object. + + + + + The \q command quits the psql session and returns you to the shell prompt. + + + + +
+
+ Basic SQL queries + + The SELECT statement + The SELECT statement is the basic tool for retrieving information from a + database. The syntax for most SELECT statements is: +
+ SELECT [columns(s)] + FROM [table(s)] + [WHERE condition(s)] + [GROUP BY columns(s)] + [HAVING grouping-condition(s)] + [ORDER BY column(s)] + [LIMIT maximum-results] + [OFFSET start-at-result-#] + ; +
+ For example, to select all of the columns for each row in the + actor.usr_address table, issue the following query: + SELECT * + FROM actor.usr_address + ; +
+ + Selecting particular columns from a table + SELECT * returns all columns from all of the tables included in your query. + However, quite often you will want to return only a subset of the possible + columns. You can retrieve specific columns by listing the names of the columns + you want after the SELECT keyword. Separate each column name with a comma. + For example, to select just the city, county, and state from the + actor.usr_address table, issue the following query: + SELECT city, county, state + FROM actor.usr_address + ; + + + Sorting results with the ORDER BY clause + By default, a SELECT statement returns rows matching your query with no + guarantee of any particular order in which they are returned. To force + the rows to be returned in a particular order, use the ORDER BY clause + to specify one or more columns to determine the sorting priority of the + rows. + For example, to sort the rows returned from your actor.usr_address query by + city, with county and then zip code as the tie breakers, issue the + following query: + +SELECT city, county, state + FROM actor.usr_address + ORDER BY city, county, post_code +; + + + + Filtering results with the WHERE clause + Thus far, your results have been returning all of the rows in the table. + Normally, however, you would want to restrict the rows that are returned to the + subset of rows that match one or more conditions of your search. The WHERE + clause enables you to specify a set of conditions that filter your query + results. Each condition in the WHERE clause is an SQL expression that returns + a boolean (true or false) value. + For example, to restrict the results returned from your actor.usr_address + query to only those rows containing a state value of Connecticut, issue the + following query: + +SELECT city, county, state + FROM actor.usr_address + WHERE state = 'Connecticut' + ORDER BY city, county, post_code +; + + You can include more conditions in the WHERE clause with the OR and AND + operators. For example, to further restrict the results returned from your + actor.usr_address query to only those rows where the state column contains a + value of Connecticut and the city column contains a value of Hartford, + issue the following query: + +SELECT city, county, state + FROM actor.usr_address + WHERE state = 'Connecticut' + AND city = 'Hartford' + ORDER BY city, county, post_code +; + + To return rows where the state is Connecticut and the city is Hartford or + New Haven, you must use parentheses to explicitly group the city value + conditions together, or else the database will evaluate the OR city = 'New + Haven' clause entirely on its own and match all rows where the city column is + New Haven, even though the state might not be Connecticut. + Trouble with OR + +SELECT city, county, state + FROM actor.usr_address + WHERE state = 'Connecticut' + AND city = 'Hartford' OR city = 'New Haven' + ORDER BY city, county, post_code +; + +-- Can return unwanted rows because the OR is not grouped! + + + Grouped OR’ed conditions + +SELECT city, county, state + FROM actor.usr_address + WHERE state = 'Connecticut' + AND (city = 'Hartford' OR city = 'New Haven') + ORDER BY city, county, post_code +; + +-- The parentheses ensure that the OR is applied to the cities, and the +-- state in either case must be 'Connecticut' + + + + Comparison operators + Here is a partial list of comparison operators that are commonly used in + WHERE clauses: + + Comparing two scalar values + + + + x = y (equal to) + + + + + x != y (not equal to) + + + + + x < y (less than) + + + + + x > y (greater than) + + + + + x LIKE y (TEXT value x matches a subset of TEXT y, where y is a string that + can contain % as a wildcard for 0 or more characters, and _ as a wildcard + for a single character. For example, WHERE 'all you can eat fish and chips + and a big stick' LIKE '%fish%stick' would return TRUE) + + + + + x ILIKE y (like LIKE, but the comparison ignores upper-case / lower-case) + + + + + x IN y (x is in the list of values y, where y can be a list or a SELECT + statement that returns a list) + + + + + + + + NULL values + SQL databases have a special way of representing the value of a column that has + no value: NULL. A NULL value is not equal to zero, and is not an empty + string; it is equal to nothing, not even another NULL, because it has no value + that can be compared. + To return rows from a table where a given column is not NULL, use the + IS NOT NULL comparison operator. + Retrieving rows where a column is not <literal>NULL</literal> + +SELECT id, first_given_name, family_name + FROM actor.usr + WHERE second_given_name IS NOT NULL +; + + + Similarly, to return rows from a table where a given column is NULL, use + the IS NULL comparison operator. + Retrieving rows where a column is <literal>NULL</literal> + +SELECT id, first_given_name, second_given_name, family_name + FROM actor.usr + WHERE second_given_name IS NULL +; + + id | first_given_name | second_given_name | family_name +----+------------------+-------------------+---------------- + 1 | Administrator | | System Account +(1 row) + + + Notice that the NULL value in the output is displayed as empty space, + indistinguishable from an empty string; this is the default display method in + psql. You can change the behaviour of psql using the pset command: + Changing the way <literal>NULL</literal> values are displayed in <literal>psql</literal> + +evergreen=# \pset null '(null)' +Null display is '(null)'. + +SELECT id, first_given_name, second_given_name, family_name + FROM actor.usr + WHERE second_given_name IS NULL +; + + id | first_given_name | second_given_name | family_name +----+------------------+-------------------+---------------- + 1 | Administrator | (null) | System Account +(1 row) + + + Database queries within programming languages such as Perl and C have + special methods of checking for NULL values in returned results. + + + Text delimiter: ' + You might have noticed that we have been using the ' character to delimit + TEXT values and values such as dates and times that are TEXT values. Sometimes, + however, your TEXT value itself contains a ' character, such as the word + you’re. To prevent the database from prematurely ending the TEXT value at the + first ' character and returning a syntax error, use another ' character to + escape the following ' character. + For example, to change the last name of a user in the actor.usr table to + L’estat, issue the following SQL: + Escaping <literal>'</literal> in TEXT values + +UPDATE actor.usr + SET family_name = 'L''estat' + WHERE profile IN ( + SELECT id + FROM permission.grp_tree + WHERE name = 'Vampire' + ) + ; + + When you retrieve the row from the database, the value is displayed with just + a single ' character: + +SELECT id, family_name + FROM actor.usr + WHERE family_name = 'L''estat' +; + + id | family_name +----+------------- + 1 | L'estat +(1 row) + + + + Grouping and eliminating results with the GROUP BY and HAVING clauses + The GROUP BY clause returns a unique set of results for the desired columns. + This is most often used in conjunction with an aggregate function to present + results for a range of values in a single query, rather than requiring you to + issue one query per target value. + Returning unique results of a single column with <literal>GROUP BY</literal> + +SELECT grp + FROM permission.grp_perm_map + GROUP BY grp + ORDER BY grp; + + grp +-----+ + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 10 +(8 rows) + + + While GROUP BY can be useful for a single column, it is more often used + to return the distinct results across multiple columns. For example, the + following query shows us which groups have permissions at each depth in + the library hierarchy: + Returning unique results of multiple columns with <literal>GROUP BY</literal> + +SELECT grp, depth + FROM permission.grp_perm_map + GROUP BY grp, depth + ORDER BY depth, grp; + + grp | depth +-----+------- + 1 | 0 + 2 | 0 + 3 | 0 + 4 | 0 + 5 | 0 + 10 | 0 + 3 | 1 + 4 | 1 + 5 | 1 + 6 | 1 + 7 | 1 + 10 | 1 + 3 | 2 + 4 | 2 + 10 | 2 +(15 rows) + + + Extending this further, you can use the COUNT() aggregate function to + also return the number of times each unique combination of grp and depth + appears in the table. Yes, this is a sneak peek at the use of aggregate + functions! Keeners. + Counting unique column combinations with <literal>GROUP BY</literal> + +SELECT grp, depth, COUNT(grp) + FROM permission.grp_perm_map + GROUP BY grp, depth + ORDER BY depth, grp; + + grp | depth | count +-----+-------+------- + 1 | 0 | 6 + 2 | 0 | 2 + 3 | 0 | 45 + 4 | 0 | 3 + 5 | 0 | 5 + 10 | 0 | 1 + 3 | 1 | 3 + 4 | 1 | 4 + 5 | 1 | 1 + 6 | 1 | 9 + 7 | 1 | 5 + 10 | 1 | 10 + 3 | 2 | 24 + 4 | 2 | 8 + 10 | 2 | 7 +(15 rows) + + + You can use the WHERE clause to restrict the returned results before grouping + is applied to the results. The following query restricts the results to those + rows that have a depth of 0. + Using the <literal>WHERE</literal> clause with <literal>GROUP BY</literal> + +SELECT grp, COUNT(grp) + FROM permission.grp_perm_map + WHERE depth = 0 + GROUP BY grp + ORDER BY 2 DESC +; + + grp | count +-----+------- + 3 | 45 + 1 | 6 + 5 | 5 + 4 | 3 + 2 | 2 + 10 | 1 +(6 rows) + + + To restrict results after grouping has been applied to the rows, use the + HAVING clause; this is typically used to restrict results based on + a comparison to the value returned by an aggregate function. For example, + the following query restricts the returned rows to those that have more than + 5 occurrences of the same value for grp in the table. + <literal>GROUP BY</literal> restricted by a <literal>HAVING</literal> clause + +SELECT grp, COUNT(grp) + FROM permission.grp_perm_map + GROUP BY grp + HAVING COUNT(grp) > 5 +; + + grp | count +-----+------- + 6 | 9 + 4 | 15 + 5 | 6 + 1 | 6 + 3 | 72 + 10 | 18 +(6 rows) + + + + + Eliminating duplicate results with the DISTINCT keyword + GROUP BY is one way of eliminating duplicate results from the rows returned + by your query. The purpose of the DISTINCT keyword is to remove duplicate + rows from the results of your query. However, it works, and it is easy - so if + you just want a quick list of the unique set of values for a column or set of + columns, the DISTINCT keyword might be appropriate. + On the other hand, if you are getting duplicate rows back when you don’t expect + them, then applying the DISTINCT keyword might be a sign that you are + papering over a real problem. + Returning unique results of multiple columns with <literal>DISTINCT</literal> + +SELECT DISTINCT grp, depth + FROM permission.grp_perm_map + ORDER BY depth, grp +; + + grp | depth +-----+------- + 1 | 0 + 2 | 0 + 3 | 0 + 4 | 0 + 5 | 0 + 10 | 0 + 3 | 1 + 4 | 1 + 5 | 1 + 6 | 1 + 7 | 1 + 10 | 1 + 3 | 2 + 4 | 2 + 10 | 2 +(15 rows) + + + + + Paging through results with the LIMIT and OFFSET clauses + The LIMIT clause restricts the total number of rows returned from your query + and is useful if you just want to list a subset of a large number of rows. For + example, in the following query we list the five most frequently used + circulation modifiers: + Using the <literal>LIMIT</literal> clause to restrict results + +SELECT circ_modifier, COUNT(circ_modifier) + FROM asset.copy + GROUP BY circ_modifier + ORDER BY 2 DESC + LIMIT 5 +; + + circ_modifier | count +---------------+-------- + CIRC | 741995 + BOOK | 636199 + SER | 265906 + DOC | 191598 + LAW MONO | 126627 +(5 rows) + + + When you use the LIMIT clause to restrict the total number of rows returned + by your query, you can also use the OFFSET clause to determine which subset + of the rows will be returned. The use of the OFFSET clause assumes that + you’ve used the ORDER BY clause to impose order on the results. + In the following example, we use the OFFSET clause to get results 6 through + 10 from the same query that we prevously executed. + Using the <literal>OFFSET</literal> clause to return a specific subset of rows + +SELECT circ_modifier, COUNT(circ_modifier) + FROM asset.copy + GROUP BY circ_modifier + ORDER BY 2 DESC + LIMIT 5 + OFFSET 5 +; + + circ_modifier | count +---------------+-------- + LAW SERIAL | 102758 + DOCUMENTS | 86215 + BOOK_WEB | 63786 + MFORM SER | 39917 + REF | 34380 +(5 rows) + + + +
+
+ Advanced SQL queries + + Transforming column values with functions + PostgreSQL includes many built-in functions for manipulating column data. + You can also create your own functions (and Evergreen does make use of + many custom functions). There are two types of functions used in + databases: scalar functions and aggregate functions. + + Scalar functions + Scalar functions transform each value of the target column. If your query + would return 50 values for a column in a given query, and you modify your + query to apply a scalar function to the values returned for that column, + it will still return 50 values. For example, the UPPER() function, + used to convert text values to upper-case, modifies the results in the + following set of queries: + Using the UPPER() scalar function to convert text values to upper-case + +-- First, without the UPPER() function for comparison +SELECT shortname, name + FROM actor.org_unit + WHERE id < 4 +; + + shortname | name +-----------+----------------------- + CONS | Example Consortium + SYS1 | Example System 1 + SYS2 | Example System 2 +(3 rows) + +-- Now apply the UPPER() function to the name column +SELECT shortname, UPPER(name) + FROM actor.org_unit + WHERE id < 4 +; + + shortname | upper +-----------+-------------------- + CONS | EXAMPLE CONSORTIUM + SYS1 | EXAMPLE SYSTEM 1 + SYS2 | EXAMPLE SYSTEM 2 +(3 rows) + + + There are so many scalar functions in PostgreSQL that we cannot cover them + all here, but we can list some of the most commonly used functions: + + + + || - concatenates two text values together + + + + + COALESCE() - returns the first non-NULL value from the list of arguments + + + + + LOWER() - returns a text value converted to lower-case + + + + + REPLACE() - returns a text value after replacing all occurrences of a given text value with a different text value + + + + + REGEXP_REPLACE() - returns a text value after being transformed by a regular expression + + + + + UPPER() - returns a text value converted to upper-case + + + + For a complete list of scalar functions, see + the PostgreSQL function documentation. + + + Aggregate functions + Aggregate functions return a single value computed from the the complete set of + values returned for the specified column. + + + + AVG() + + + + + COUNT() + + + + + MAX() + + + + + MIN() + + + + + SUM() + + + + + + + Sub-selects + A sub-select is the technique of using the results of one query to feed + into another query. You can, for example, return a set of values from + one column in a SELECT statement to be used to satisfy the IN() condition + of another SELECT statement; or you could return the MAX() value of a + column in a SELECT statement to match the = condition of another SELECT + statement. + For example, in the following query we use a sub-select to restrict the copies + returned by the main SELECT statement to only those locations that have an + opac_visible value of TRUE: + Sub-select example + +SELECT call_number + FROM asset.copy + WHERE deleted IS FALSE + AND location IN ( + SELECT id + FROM asset.copy_location + WHERE opac_visible IS TRUE + ) +; + + + Sub-selects can be an approachable way to breaking down a problem that + requires matching values between different tables, and often result in + a clearly expressed solution to a problem. However, if you start writing + sub-selects within sub-selects, you should consider tackling the problem + with joins instead. + + + Joins + Joins enable you to access the values from multiple tables in your query + results and comparison operators. For example, joins are what enable you to + relate a bibliographic record to a barcoded copy via the biblio.record_entry, + asset.call_number, and asset.copy tables. In this section, we discuss the + most common kind of join—the inner join—as well as the less common outer join + and some set operations which can compare and contrast the values returned by + separate queries. + When we talk about joins, we are going to talk about the left-hand table and + the right-hand table that participate in the join. Every join brings together + just two tables - but you can use an unlimited (for our purposes) number + of joins in a single SQL statement. Each time you use a join, you effectively + create a new table, so when you add a second join clause to a statement, + table 1 and table 2 (which were the left-hand table and the right-hand table + for the first join) now act as a merged left-hand table and the new table + in the second join clause is the right-hand table. + Clear as mud? Okay, let’s look at some examples. + + Inner joins + An inner join returns all of the columns from the left-hand table in the join + with all of the columns from the right-hand table in the joins that match a + condition in the ON clause. Typically, you use the = operator to match the + foreign key of the left-hand table with the primary key of the right-hand + table to follow the natural relationship between the tables. + In the following example, we return all of columns from the actor.usr and + actor.org_unit tables, joined on the relationship between the user’s home + library and the library’s ID. Notice in the results that some columns, like + id and mailing_address, appear twice; this is because both the actor.usr + and actor.org_unit tables include columns with these names. This is also why + we have to fully qualify the column names in our queries with the schema and + table names. + A simple inner join + +SELECT * + FROM actor.usr + INNER JOIN actor.org_unit ON actor.usr.home_ou = actor.org_unit.id + WHERE actor.org_unit.shortname = 'CONS' +; + +-[ RECORD 1 ]------------------+--------------------------------- +id | 1 +card | 1 +profile | 1 +usrname | admin +email | +... +mailing_address | +billing_address | +home_ou | 1 +... +claims_never_checked_out_count | 0 +id | 1 +parent_ou | +ou_type | 1 +ill_address | 1 +holds_address | 1 +mailing_address | 1 +billing_address | 1 +shortname | CONS +name | Example Consortium +email | +phone | +opac_visible | t +fiscal_calendar | 1 + + + Of course, you do not have to return every column from the joined tables; + you can (and should) continue to specify only the columns that you want to + return. In the following example, we count the number of borrowers for + every user profile in a given library by joining the permission.grp_tree + table where profiles are defined against the actor.usr table, and then + joining the actor.org_unit table to give us access to the user’s home + library: + Borrower Count by Profile (Adult, Child, etc)/Library + +SELECT permission.grp_tree.name, actor.org_unit.name, COUNT(permission.grp_tree.name) + FROM actor.usr + INNER JOIN permission.grp_tree + ON actor.usr.profile = permission.grp_tree.id + INNER JOIN actor.org_unit + ON actor.org_unit.id = actor.usr.home_ou + WHERE actor.usr.deleted IS FALSE + GROUP BY permission.grp_tree.name, actor.org_unit.name + ORDER BY actor.org_unit.name, permission.grp_tree.name +; + + name | name | count +-------+--------------------+------- + Users | Example Consortium | 1 +(1 row) + + + + + Aliases + So far we have been fully-qualifying all of our table names and column names to + prevent any confusion. This quickly gets tiring with lengthy qualified + table names like permission.grp_tree, so the SQL syntax enables us to assign + aliases to table names and column names. When you define an alias for a table + name, you can access its column throughout the rest of the statement by simply + appending the column name to the alias with a period; for example, if you assign + the alias au to the actor.usr table, you can access the actor.usr.id + column through the alias as au.id. + The formal syntax for declaring an alias for a column is to follow the column + name in the result columns clause with AS alias. To declare an alias for a table name, + follow the table name in the FROM clause (including any JOIN statements) with + AS alias. However, the AS keyword is optional for tables (and columns as + of PostgreSQL 8.4), and in practice most SQL statements leave it out. For + example, we can write the previous INNER JOIN statement example using aliases + instead of fully-qualified identifiers: + Borrower Count by Profile (using aliases) + +SELECT pgt.name AS "Profile", aou.name AS "Library", COUNT(pgt.name) AS "Count" + FROM actor.usr au + INNER JOIN permission.grp_tree pgt + ON au.profile = pgt.id + INNER JOIN actor.org_unit aou + ON aou.id = au.home_ou + WHERE au.deleted IS FALSE + GROUP BY pgt.name, aou.name + ORDER BY aou.name, pgt.name +; + + Profile | Library | Count +---------+--------------------+------- + Users | Example Consortium | 1 +(1 row) + + + A nice side effect of declaring an alias for your columns is that the alias + is used as the column header in the results table. The previous version of + the query, which didn’t use aliased column names, had two columns named + name; this version of the query with aliases results in a clearer + categorization. + + + Outer joins + An outer join returns all of the rows from one or both of the tables + participating in the join. + + + + For a LEFT OUTER JOIN, the join returns all of the rows from the left-hand + table and the rows matching the join condition from the right-hand table, with + NULL values for the rows with no match in the right-hand table. + + + + + A RIGHT OUTER JOIN behaves in the same way as a LEFT OUTER JOIN, with the + exception that all rows are returned from the right-hand table participating in + the join. + + + + + For a FULL OUTER JOIN, the join returns all the rows from both the left-hand + and right-hand tables, with NULL values for the rows with no match in either + the left-hand or right-hand table. + + + + Base tables for the OUTER JOIN examples + +SELECT * FROM aaa; + + id | stuff +----+------- + 1 | one + 2 | two + 3 | three + 4 | four + 5 | five +(5 rows) + +SELECT * FROM bbb; + + id | stuff | foo +----+-------+---------- + 1 | one | oneone + 2 | two | twotwo + 5 | five | fivefive + 6 | six | sixsix +(4 rows) + + + Example of a LEFT OUTER JOIN + +SELECT * FROM aaa + LEFT OUTER JOIN bbb ON aaa.id = bbb.id +; + id | stuff | id | stuff | foo +----+-------+----+-------+---------- + 1 | one | 1 | one | oneone + 2 | two | 2 | two | twotwo + 3 | three | | | + 4 | four | | | + 5 | five | 5 | five | fivefive +(5 rows) + + + Example of a RIGHT OUTER JOIN + +SELECT * FROM aaa + RIGHT OUTER JOIN bbb ON aaa.id = bbb.id +; + id | stuff | id | stuff | foo +----+-------+----+-------+---------- + 1 | one | 1 | one | oneone + 2 | two | 2 | two | twotwo + 5 | five | 5 | five | fivefive + | | 6 | six | sixsix +(4 rows) + + + Example of a FULL OUTER JOIN + +SELECT * FROM aaa + FULL OUTER JOIN bbb ON aaa.id = bbb.id +; + id | stuff | id | stuff | foo +----+-------+----+-------+---------- + 1 | one | 1 | one | oneone + 2 | two | 2 | two | twotwo + 3 | three | | | + 4 | four | | | + 5 | five | 5 | five | fivefive + | | 6 | six | sixsix +(6 rows) + + + + + Self joins + It is possible to join a table to itself. You can, in fact you must, use + aliases to disambiguate the references to the table. + + + + Set operations + Relational databases are effectively just an efficient mechanism for + manipulating sets of values; they are implementations of set theory. There are + three operators for sets (tables) in which each set must have the same number + of columns with compatible data types: the union, intersection, and difference + operators. + Base tables for the set operation examples + +SELECT * FROM aaa; + + id | stuff + ----+------- + 1 | one + 2 | two + 3 | three + 4 | four + 5 | five + (5 rows) + +SELECT * FROM bbb; + + id | stuff | foo + ----+-------+---------- + 1 | one | oneone + 2 | two | twotwo + 5 | five | fivefive + 6 | six | sixsix +(4 rows) + + + + Union + The UNION operator returns the distinct set of rows that are members of + either or both of the left-hand and right-hand tables. The UNION operator + does not return any duplicate rows. To return duplicate rows, use the + UNION ALL operator. + Example of a UNION set operation + +-- The parentheses are not required, but are intended to help +-- illustrate the sets participating in the set operation +( + SELECT id, stuff + FROM aaa +) +UNION +( + SELECT id, stuff + FROM bbb +) +ORDER BY 1 +; + + id | stuff +----+------- + 1 | one + 2 | two + 3 | three + 4 | four + 5 | five + 6 | six +(6 rows) + + + + + Intersection + The INTERSECT operator returns the distinct set of rows that are common to + both the left-hand and right-hand tables. To return duplicate rows, use the + INTERSECT ALL operator. + Example of an INTERSECT set operation + +( + SELECT id, stuff + FROM aaa +) +INTERSECT +( + SELECT id, stuff + FROM bbb +) +ORDER BY 1 +; + + id | stuff +----+------- + 1 | one + 2 | two + 5 | five +(3 rows) + + + + + Difference + The EXCEPT operator returns the rows in the left-hand table that do not + exist in the right-hand table. You are effectively subtracting the common + rows from the left-hand table. + Example of an EXCEPT set operation + +( + SELECT id, stuff + FROM aaa +) +EXCEPT +( + SELECT id, stuff + FROM bbb +) +ORDER BY 1 +; + + id | stuff +----+------- + 3 | three + 4 | four +(2 rows) + +-- Order matters: switch the left-hand and right-hand tables +-- and you get a different result +( + SELECT id, stuff + FROM bbb +) +EXCEPT +( + SELECT id, stuff + FROM aaa +) +ORDER BY 1 +; + + id | stuff +----+------- + 6 | six +(1 row) + + + + + + Views + A view is a persistent SELECT statement that acts like a read-only table. + To create a view, issue the CREATE VIEW statement, giving the view a name + and a SELECT statement on which the view is built. + The following example creates a view based on our borrower profile count: + Creating a view + +CREATE VIEW actor.borrower_profile_count AS + SELECT pgt.name AS "Profile", aou.name AS "Library", COUNT(pgt.name) AS "Count" + FROM actor.usr au + INNER JOIN permission.grp_tree pgt + ON au.profile = pgt.id + INNER JOIN actor.org_unit aou + ON aou.id = au.home_ou + WHERE au.deleted IS FALSE + GROUP BY pgt.name, aou.name + ORDER BY aou.name, pgt.name +; + + + When you subsequently select results from the view, you can apply additional + WHERE clauses to filter the results, or ORDER BY clauses to change the + order of the returned rows. In the following examples, we issue a simple + SELECT * statement to show that the default results are returned in the + same order from the view as the equivalent SELECT statement would be returned. + Then we issue a SELECT statement with a WHERE clause to further filter the + results. + Selecting results from a view + +SELECT * FROM actor.borrower_profile_count; + + Profile | Library | Count +----------------------------+----------------------------+------- + Faculty | University Library | 208 + Graduate | University Library | 16 + Patrons | University Library | 62 +... + +-- You can still filter your results with WHERE clauses +SELECT * + FROM actor.borrower_profile_count + WHERE "Profile" = 'Faculty'; + + Profile | Library | Count +---------+----------------------------+------- + Faculty | University Library | 208 + Faculty | College Library | 64 + Faculty | College Library 2 | 102 + Faculty | University Library 2 | 776 +(4 rows) + + + + + Inheritance + PostgreSQL supports table inheritance: that is, a child table inherits its + base definition from a parent table, but can add additional columns to its + own definition. The data from any child tables is visible in queries against + the parent table. + Evergreen uses table inheritance in several areas: + * In the Vandelay MARC batch importer / exporter, Evergreen defines base + tables for generic queues and queued records for which authority record and + bibliographic record child tables + * Billable transactions are based on the money.billable_xact table; + child tables include action.circulation for circulation transactions + and money.grocery for general bills. + * Payments are based on the money.payment table; its child table is + money.bnm_payment (for brick-and-mortar payments), which in turn has child + tables of money.forgive_payment, money.work_payment, money.credit_payment, + money.goods_payment, and money.bnm_desk_payment. The + money.bnm_desk_payment table in turn has child tables of money.cash_payment, + money.check_payment, and money.credit_card_payment. + * Transits are based on the action.transit_copy table, which has a child + table of action.hold_transit_copy for transits initiated by holds. + * Generic acquisition line items are defined by the + acq.lineitem_attr_definition table, which in turn has a number of child + tables to define MARC attributes, generated attributes, user attributes, and + provider attributes. + +
+
+ Understanding query performance with EXPLAIN + Some queries run for a long, long time. This can be the result of a poorly + written query—a query with a join condition that joins every + row in the biblio.record_entry table with every row in the metabib.full_rec + view would consume a massive amount of memory and disk space and CPU time—or + a symptom of a schema that needs some additional indexes. PostgreSQL provides + the EXPLAIN tool to estimate how long it will take to run a given query and + show you the query plan (how it plans to retrieve the results from the + database). + To generate the query plan without actually running the statement, simply + prepend the EXPLAIN keyword to your query. In the following example, we + generate the query plan for the poorly written query that would join every + row in the biblio.record_entry table with every row in the metabib.full_rec + view: + Query plan for a terrible query + +EXPLAIN SELECT * + FROM biblio.record_entry + FULL OUTER JOIN metabib.full_rec ON 1=1 +; + + QUERY PLAN +-------------------------------------------------------------------------------// + Merge Full Join (cost=0.00..4959156437783.60 rows=132415734100864 width=1379) + -> Seq Scan on record_entry (cost=0.00..400634.16 rows=2013416 width=1292) + -> Seq Scan on real_full_rec (cost=0.00..1640972.04 rows=65766704 width=87) +(3 rows) + + + This query plan shows that the query would return 132415734100864 rows, and it + plans to accomplish what you asked for by sequentially scanning (Seq Scan) + every row in each of the tables participating in the join. + In the following example, we have realized our mistake in joining every row of + the left-hand table with every row in the right-hand table and take the saner + approach of using an INNER JOIN where the join condition is on the record ID. + Query plan for a less terrible query + +EXPLAIN SELECT * + FROM biblio.record_entry bre + INNER JOIN metabib.full_rec mfr ON mfr.record = bre.id; + QUERY PLAN +----------------------------------------------------------------------------------------// + Hash Join (cost=750229.86..5829273.98 rows=65766704 width=1379) + Hash Cond: (real_full_rec.record = bre.id) + -> Seq Scan on real_full_rec (cost=0.00..1640972.04 rows=65766704 width=87) + -> Hash (cost=400634.16..400634.16 rows=2013416 width=1292) + -> Seq Scan on record_entry bre (cost=0.00..400634.16 rows=2013416 width=1292) +(5 rows) + + + This time, we will return 65766704 rows - still way too many rows. We forgot + to include a WHERE clause to limit the results to something meaningful. In + the following example, we will limit the results to deleted records that were + modified in the last month. + Query plan for a realistic query + +EXPLAIN SELECT * + FROM biblio.record_entry bre + INNER JOIN metabib.full_rec mfr ON mfr.record = bre.id + WHERE bre.deleted IS TRUE + AND DATE_TRUNC('MONTH', bre.edit_date) > + DATE_TRUNC ('MONTH', NOW() - '1 MONTH'::INTERVAL) +; + + QUERY PLAN +----------------------------------------------------------------------------------------// + Hash Join (cost=5058.86..2306218.81 rows=201669 width=1379) + Hash Cond: (real_full_rec.record = bre.id) + -> Seq Scan on real_full_rec (cost=0.00..1640972.04 rows=65766704 width=87) + -> Hash (cost=4981.69..4981.69 rows=6174 width=1292) + -> Index Scan using biblio_record_entry_deleted on record_entry bre + (cost=0.00..4981.69 rows=6174 width=1292) + Index Cond: (deleted = true) + Filter: ((deleted IS TRUE) AND (date_trunc('MONTH'::text, edit_date) + > date_trunc('MONTH'::text, (now() - '1 mon'::interval)))) +(7 rows) + + + We can see that the number of rows returned is now only 201669; that’s + something we can work with. Also, the overall cost of the query is 2306218, + compared to 4959156437783 in the original query. The Index Scan tells us + that the query planner will use the index that was defined on the deleted + column to avoid having to check every row in the biblio.record_entry table. + However, we are still running a sequential scan over the + metabib.real_full_rec table (the table on which the metabib.full_rec + view is based). Given that linking from the bibliographic records to the + flattened MARC subfields is a fairly common operation, we could create a + new index and see if that speeds up our query plan. + Query plan with optimized access via a new index + +-- This index will take a long time to create on a large database +-- of bibliographic records +CREATE INDEX bib_record_idx ON metabib.real_full_rec (record); + +EXPLAIN SELECT * + FROM biblio.record_entry bre + INNER JOIN metabib.full_rec mfr ON mfr.record = bre.id + WHERE bre.deleted IS TRUE + AND DATE_TRUNC('MONTH', bre.edit_date) > + DATE_TRUNC ('MONTH', NOW() - '1 MONTH'::INTERVAL) +; + + QUERY PLAN +----------------------------------------------------------------------------------------// + Nested Loop (cost=0.00..1558330.46 rows=201669 width=1379) + -> Index Scan using biblio_record_entry_deleted on record_entry bre + (cost=0.00..4981.69 rows=6174 width=1292) + Index Cond: (deleted = true) + Filter: ((deleted IS TRUE) AND (date_trunc('MONTH'::text, edit_date) > + date_trunc('MONTH'::text, (now() - '1 mon'::interval)))) + -> Index Scan using bib_record_idx on real_full_rec + (cost=0.00..240.89 rows=850 width=87) + Index Cond: (real_full_rec.record = bre.id) +(6 rows) + + + We can see that the resulting number of rows is still the same (201669), but + the execution estimate has dropped to 1558330 because the query planner can + use the new index (bib_record_idx) rather than scanning the entire table. + Success! + While indexes can significantly speed up read access to tables for common + filtering conditions, every time a row is created or updated the corresponding + indexes also need to be maintained - which can decrease the performance of + writes to the database. Be careful to keep the balance of read performance + versus write performance in mind if you plan to create custom indexes in your + Evergreen database. +
+
+ Inserting, updating, and deleting data + + Inserting data + To insert one or more rows into a table, use the INSERT statement to identify + the target table and list the columns in the table for which you are going to + provide values for each row. If you do not list one or more columns contained + in the table, the database will automatically supply a NULL value for those + columns. The values for each row follow the VALUES clause and are grouped in + parentheses and delimited by commas. Each row, in turn, is delimited by commas + (this multiple row syntax requires PostgreSQL 8.2 or higher). + For example, to insert two rows into the permission.usr_grp_map table: + Inserting rows into the <literal>permission.usr_grp_map</literal> table + INSERT INTO permission.usr_grp_map (usr, grp) + VALUES (2, 10), (2, 4) + ; + + Of course, as with the rest of SQL, you can replace individual column values + with one or more use sub-selects: + Inserting rows using sub-selects instead of integers + +INSERT INTO permission.usr_grp_map (usr, grp) + VALUES ( + (SELECT id FROM actor.usr + WHERE family_name = 'Scott' AND first_given_name = 'Daniel'), + (SELECT id FROM permission.grp_tree + WHERE name = 'Local System Administrator') + ), ( + (SELECT id FROM actor.usr + WHERE family_name = 'Scott' AND first_given_name = 'Daniel'), + (SELECT id FROM permission.grp_tree + WHERE name = 'Circulator') + ) +; + + + + + Inserting data using a SELECT statement + Sometimes you want to insert a bulk set of data into a new table based on + a query result. Rather than a VALUES clause, you can use a SELECT + statement to insert one or more rows matching the column definitions. This + is a good time to point out that you can include explicit values, instead + of just column identifiers, in the return columns of the SELECT statement. + The explicit values are returned in every row of the result set. + In the following example, we insert 6 rows into the permission.usr_grp_map + table; each row will have a usr column value of 1, with varying values for + the grp column value based on the id column values returned from + permission.grp_tree: + Inserting rows via a <literal>SELECT</literal> statement + +INSERT INTO permission.usr_grp_map (usr, grp) + SELECT 1, id + FROM permission.grp_tree + WHERE id > 2 +; + +INSERT 0 6 + + + + + Deleting rows + Deleting data from a table is normally fairly easy. To delete rows from a table, + issue a DELETE statement identifying the table from which you want to delete + rows and a WHERE clause identifying the row or rows that should be deleted. + In the following example, we delete all of the rows from the + permission.grp_perm_map table where the permission maps to + UPDATE_ORG_UNIT_CLOSING and the group is anything other than administrators: + Deleting rows from a table + +DELETE FROM permission.grp_perm_map + WHERE grp IN ( + SELECT id + FROM permission.grp_tree + WHERE name != 'Local System Administrator' + ) AND perm = ( + SELECT id + FROM permission.perm_list + WHERE code = 'UPDATE_ORG_UNIT_CLOSING' + ) +; + + + There are two main reasons that a DELETE statement may not actually + delete rows from a table, even when the rows meet the conditional clause. + + + + If the row contains a value that is the target of a relational constraint, + for example, if another table has a foreign key pointing at your target + table, you will be prevented from deleting a row with a value corresponding + to a row in the dependent table. + + + + + If the table has a rule that substitutes a different action for a DELETE + statement, the deletion will not take place. In Evergreen it is common for a + table to have a rule that substitutes the action of setting a deleted column + to TRUE. For example, if a book is discarded, deleting the row representing + the copy from the asset.copy table would severely affect circulation statistics, + bills, borrowing histories, and their corresponding tables in the database that + have foreign keys pointing at the asset.copy table (action.circulation and + money.billing and its children respectively). Instead, the deleted column + value is set to TRUE and Evergreen’s application logic skips over these rows + in most cases. + + + + + + Updating rows + To update rows in a table, issue an UPDATE statement identifying the table + you want to update, the column or columns that you want to set with their + respective new values, and (optionally) a WHERE clause identifying the row or + rows that should be updated. + Following is the syntax for the UPDATE statement: +
+ UPDATE [table-name] + SET [column] TO [new-value] + WHERE [condition] + ; +
+
+
+
+ Query requests + The following queries were requested by Bibliomation, but might be reusable + by other libraries. + + Monthly circulation stats by collection code / library + Monthly Circulation Stats by Collection Code/Library + +SELECT COUNT(acirc.id) AS "COUNT", aou.name AS "Library", acl.name AS "Copy Location" + FROM asset.copy ac + INNER JOIN asset.copy_location acl ON ac.location = acl.id + INNER JOIN action.circulation acirc ON acirc.target_copy = ac.id + INNER JOIN actor.org_unit aou ON acirc.circ_lib = aou.id + WHERE DATE_TRUNC('MONTH', acirc.create_time) = DATE_TRUNC('MONTH', NOW() - INTERVAL '3 month') + AND acirc.desk_renewal IS FALSE + AND acirc.opac_renewal IS FALSE + AND acirc.phone_renewal IS FALSE + GROUP BY aou.name, acl.name + ORDER BY aou.name, acl.name, 1 +; + + + + + Monthly circulation stats by borrower stat / library + Monthly Circulation Stats by Borrower Stat/Library + +SELECT COUNT(acirc.id) AS "COUNT", aou.name AS "Library", asceum.stat_cat_entry AS "Borrower Stat" + FROM action.circulation acirc + INNER JOIN actor.org_unit aou ON acirc.circ_lib = aou.id + INNER JOIN actor.stat_cat_entry_usr_map asceum ON asceum.target_usr = acirc.usr + INNER JOIN actor.stat_cat astat ON asceum.stat_cat = astat.id + WHERE DATE_TRUNC('MONTH', acirc.create_time) = DATE_TRUNC('MONTH', NOW() - INTERVAL '3 month') + AND astat.name = 'Preferred language' + AND acirc.desk_renewal IS FALSE + AND acirc.opac_renewal IS FALSE + AND acirc.phone_renewal IS FALSE + GROUP BY aou.name, asceum.stat_cat_entry + ORDER BY aou.name, asceum.stat_cat_entry, 1 +; + + + + + Monthly intralibrary loan stats by library + Monthly Intralibrary Loan Stats by Library + +SELECT aou.name AS "Library", COUNT(acirc.id) + FROM action.circulation acirc + INNER JOIN actor.org_unit aou ON acirc.circ_lib = aou.id + INNER JOIN asset.copy ac ON acirc.target_copy = ac.id + INNER JOIN asset.call_number acn ON ac.call_number = acn.id + WHERE acirc.circ_lib != acn.owning_lib + AND DATE_TRUNC('MONTH', acirc.create_time) = DATE_TRUNC('MONTH', NOW() - INTERVAL '3 month') + AND acirc.desk_renewal IS FALSE + AND acirc.opac_renewal IS FALSE + AND acirc.phone_renewal IS FALSE + GROUP by aou.name + ORDER BY aou.name, 2 +; + + + + + Monthly borrowers added by profile (adult, child, etc) / library + Monthly Borrowers Added by Profile (Adult, Child, etc)/Library + +SELECT pgt.name AS "Profile", aou.name AS "Library", COUNT(pgt.name) AS "Count" + FROM actor.usr au + INNER JOIN permission.grp_tree pgt + ON au.profile = pgt.id + INNER JOIN actor.org_unit aou + ON aou.id = au.home_ou + WHERE au.deleted IS FALSE + AND DATE_TRUNC('MONTH', au.create_date) = DATE_TRUNC('MONTH', NOW() - '3 months'::interval) + GROUP BY pgt.name, aou.name + ORDER BY aou.name, pgt.name +; + + + + + Borrower count by profile (adult, child, etc) / library + Borrower Count by Profile (Adult, Child, etc)/Library + +SELECT pgt.name AS "Profile", aou.name AS "Library", COUNT(pgt.name) AS "Count" + FROM actor.usr au + INNER JOIN permission.grp_tree pgt + ON au.profile = pgt.id + INNER JOIN actor.org_unit aou + ON aou.id = au.home_ou + WHERE au.deleted IS FALSE + GROUP BY pgt.name, aou.name + ORDER BY aou.name, pgt.name +; + + + + + Monthly items added by collection / library + We define a collection as a shelving location in Evergreen. + Monthly Items Added by Collection/Library + +SELECT aou.name AS "Library", acl.name, COUNT(ac.barcode) + FROM actor.org_unit aou + INNER JOIN asset.call_number acn ON acn.owning_lib = aou.id + INNER JOIN asset.copy ac ON ac.call_number = acn.id + INNER JOIN asset.copy_location acl ON ac.location = acl.id + WHERE ac.deleted IS FALSE + AND acn.deleted IS FALSE + AND DATE_TRUNC('MONTH', ac.create_date) = DATE_TRUNC('MONTH', NOW() - '1 month'::interval) + GROUP BY aou.name, acl.name + ORDER BY aou.name, acl.name +; + + + + + Hold purchase alert by library + in the following set of queries, we bring together the active title, volume, + and copy holds and display those that have more than a certain number of holds + per title. The goal is to UNION ALL the three queries, then group by the + bibliographic record ID and display the title / author information for those + records that have more than a given threshold of holds. + Hold Purchase Alert by Library + +-- Title holds +SELECT all_holds.bib_id, aou.name, rmsr.title, rmsr.author, COUNT(all_holds.bib_id) + FROM + ( + ( + SELECT target, request_lib + FROM action.hold_request + WHERE hold_type = 'T' + AND fulfillment_time IS NULL + AND cancel_time IS NULL + ) + UNION ALL + -- Volume holds + ( + SELECT bre.id, request_lib + FROM action.hold_request ahr + INNER JOIN asset.call_number acn ON ahr.target = acn.id + INNER JOIN biblio.record_entry bre ON acn.record = bre.id + WHERE ahr.hold_type = 'V' + AND ahr.fulfillment_time IS NULL + AND ahr.cancel_time IS NULL + ) + UNION ALL + -- Copy holds + ( + SELECT bre.id, request_lib + FROM action.hold_request ahr + INNER JOIN asset.copy ac ON ahr.target = ac.id + INNER JOIN asset.call_number acn ON ac.call_number = acn.id + INNER JOIN biblio.record_entry bre ON acn.record = bre.id + WHERE ahr.hold_type = 'C' + AND ahr.fulfillment_time IS NULL + AND ahr.cancel_time IS NULL + ) + ) AS all_holds(bib_id, request_lib) + INNER JOIN reporter.materialized_simple_record rmsr + INNER JOIN actor.org_unit aou ON aou.id = all_holds.request_lib + ON rmsr.id = all_holds.bib_id + GROUP BY all_holds.bib_id, aou.name, rmsr.id, rmsr.title, rmsr.author + HAVING COUNT(all_holds.bib_id) > 2 + ORDER BY aou.name +; + + + + + Update borrower records with a different home library + In this example, the library has opened a new branch in a growing area, + and wants to reassign the home library for the patrons in the vicinity of + the new branch to the new branch. To accomplish this, we create a staging table + that holds a set of city names and the corresponding branch shortname for the home + library for each city. + Then we issue an UPDATE statement to set the home library for patrons with a + physical address with a city that matches the city names in our staging table. + Update borrower records with a different home library + +CREATE SCHEMA staging; +CREATE TABLE staging.city_home_ou_map (city TEXT, ou_shortname TEXT, + FOREIGN KEY (ou_shortname) REFERENCES actor.org_unit (shortname)); +INSERT INTO staging.city_home_ou_map (city, ou_shortname) + VALUES ('Southbury', 'BR1'), ('Middlebury', 'BR2'), ('Hartford', 'BR3'); +BEGIN; + +UPDATE actor.usr au SET home_ou = COALESCE( + ( + SELECT aou.id + FROM actor.org_unit aou + INNER JOIN staging.city_home_ou_map schom ON schom.ou_shortname = aou.shortname + INNER JOIN actor.usr_address aua ON aua.city = schom.city + WHERE au.id = aua.usr + GROUP BY aou.id + ), home_ou) +WHERE ( + SELECT aou.id + FROM actor.org_unit aou + INNER JOIN staging.city_home_ou_map schom ON schom.ou_shortname = aou.shortname + INNER JOIN actor.usr_address aua ON aua.city = schom.city + WHERE au.id = aua.usr + GROUP BY aou.id +) IS NOT NULL; + + + +
+ +
diff --git a/development/json.xml b/development/json.xml new file mode 100644 index 0000000000..3036c1e92f --- /dev/null +++ b/development/json.xml @@ -0,0 +1,1863 @@ + + + + JSON Queries + JSON + + The json_query facility provides a way for client applications to query the database over the network. Instead of constructing its own SQL, the application encodes a query in the + form of a JSON string and passes it to the json_query service. Then the json_query service parses the JSON, constructs and executes the corresponding SQL, and returns the results to + the client application. + This arrangement enables the json_query service to act as a gatekeeper, protecting the database from potentially damaging SQL commands. In particular, the generated SQL is + confined to SELECT statements, which will not change the contents of the database. + + In addition, the json_query service sometimes uses its knowledge of the database structure to supply column names and join conditions so that the client application doesn't + have to. + + Nevertheless, the need to encode a query in a JSON string adds complications, because the client needs to know how to build the right JSON. JSON queries are also somewhat + limiting -- they can't do all of the things that you can do with raw SQL. + + The IDL + + A JSON query does not refer to tables and columns. Instead, it refers to classes and fields, which the IDL maps to the corresponding database entities. + + The IDL (Interface Definition Language) is an XML file, typically /openils/conf/fm_IDL.xml. It maps each class to a table, view, or subquery, and + each field to a column. It also includes information about foreign key relationships. + + (The IDL also defines virtual classes and virtual fields, which don't correspond to database entities. We won't discuss them here, because json_query ignores them.) + + When it first starts up, json_query loads a relevant subset of the IDL into memory. Thereafter, it consults its copy of the IDL whenever it needs to know about the database + structure. It uses the IDL to validate the JSON queries, and to translate classes and fields to the corresponding tables and columns. In some cases it uses the IDL to supply information + that the queries don't provide. + Definitions + + You should also be familiar with JSON. However it is worth defining a couple of terms that have other meanings in other contexts: + + + An "object" is a JSON object, i.e. a comma-separated list of name:value pairs, enclosed in curly braces, like this: + { "a":"frobozz", "b":24, "c":null } + + An "array" is a JSON array, i.e. a comma-separated list of values, enclosed in square brackets, like this: + [ "Goober", 629, null, false, "glub" ] + + + + + The Examples + The test_json_query utility generated the SQL for all of the sample queries in this tutorial. Newlines and indentation were then inserted manually for readability. + All examples involve the actor.org_unit table, sometimes in combination with a few related tables. The queries themselves are designed to illustrate the syntax, not + to do anything useful at the application level. For example, it's not meaningful to take the square root of an org_unit id, except to illustrate how to code a function call. + The examples are like department store mannequins -- they have no brains, they're only for display. + The simplest kind of query defines nothing but a FROM clause. For example: + + { + "from":"aou" + } + + In this minimal example we select from only one table. Later we will see how to join multiple tables. + Since we don't supply a WHERE clause, json_query constructs a default WHERE clause for us, including all the available columns. The resulting SQL looks like this: + +SELECT + "aou".billing_address AS "billing_address", + "aou".holds_address AS "holds_address", + "aou".id AS "id", + "aou".ill_address AS "ill_address", + "aou".mailing_address AS "mailing_address", + "aou".name AS "name", + "aou".ou_type AS "ou_type", + "aou".parent_ou AS "parent_ou", + "aou".shortname AS "shortname", + "aou".email AS "email", + "aou".phone AS "phone", + "aou".opac_visible AS "opac_visible" +FROM + actor.org_unit AS "aou" ; + + + + Default SELECT Clauses + JSONSELECT clauses + The default SELECT clause includes every column that the IDL defines it as a non-virtual field for the class in question. If a column is present in the database but + not defined in the IDL, json_query doesn't know about it. In the case of the example shown above, all the columns are defined in the IDL, so they all show up in the default + SELECT clause. + If the FROM clause joins two or more tables, the default SELECT clause includes columns only from the core table, not from any of the joined tables. + The default SELECT clause has almost the same effect as "SELECT *", but not exactly. If you were to "SELECT * from actor.org_unit_type in psql, the output would + include all the same columns as in the example above, but not in the same order. A default SELECT clause includes the columns in the order in which the IDL defines them, + which may be different from the order in which the database defines them. + In practice, the sequencing of columns in the SELECT clause is not significant. The result set is returned to the client program in the form of a data structure, which + the client program can navigate however it chooses. + + + Other Lessons + There are other ways to get a default SELECT clause. However, default SELECT clauses are a distraction at this point, because most of the time you'll specify your + own SELECT clause explicitly, as we will discuss later. + Let's consider some more important aspects of this simple example -- more important because they apply to more complex queries as well. + + + The entire JSON query is an object. In this simple case the object includes only one entry, for the FROM clause. Typically you'll also have entries + for the SELECT clause and the WHERE clause, and possibly for HAVING, ORDER BY, LIMIT, or OFFSET clauses. There is no separate entry for a GROUP BY clause, which you + can specify by other means. + + + Although all the other entries are optional, you must include an entry for the FROM clause. You cannot, for example, do a SELECT USER the way + you can in psql. + + + Every column is qualified by an alias for the table. This alias is always the class name for the table, as defined in the IDL. + + + Every column is aliased with the column name. There is a way to choose a different column alias (not shown here). + + + + + The SELECT Clause + The following variation also produces a default SELECT clause: + +{ + "from":"aou", + "select": { + "aou":"*" + } +} + + ...and so does this one: + +{ + "select": { + "aou":null + }, + "from":"aou" +} + + While this syntax may not be terribly useful, it does illustrate the minimal structure of a SELECT clause in a JSON query: an entry in the outermost JSON object, + with a key of select. The value associated with this key is another JSON object, whose keys are class names. + (These two examples also illustrate another point: unlike SQL, a JSON query doesn't care whether the FROM clause or the SELECT clause comes first.) + Usually you don't want the default SELECT clause. Here's how to select only some of the columns: + +{ + "from":"aou", + "select": { + "aou":[ "id", "name" ] + } +} + + The value associated with the class name is an array of column names. If you select columns from multiple tables (not shown here), you'll need a separate entry for each table, + and a separate column list for each entry. + The previous example results in the following SQL: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" ; + + + + Fancier SELECT Clauses + The previous example featured an array of column names. More generally, it featured an array of field specifications, and one kind of field specification is a column name. + The other kind is a JSON object, with some combination of the following keys: + + + column -- the column name (required). + + + alias -- used to define a column alias, which otherwise defaults to the column name. + + + aggregate -- takes a value of true or false. Don't worry about this one yet. It concerns the use of GROUP BY clauses, which we will examine + later. + + + transform -- the name of an SQL function to be called. + + + result_field -- used with "transform"; specifies an output column of a function that returns multiple columns at a time. + + + params -- used with "transform"; provides a list of parameters for the function. They may be strings, numbers, or nulls. + + + This example assigns a different column alias: + +{ + "from":"aou", + "select": { + "aou": [ + "id", + { "column":"name", "alias":"org_name" } + ] + } +} + +SELECT + "aou".id AS "id", + "aou".name AS "org_name" +FROM + actor.org_unit AS "aou" ; + + In this case, changing the column alias doesn't accomplish much. But if we were joining to the actor.org_unit_type table, which also has a "name" column, we could + use different aliases to distinguish them. + The following example uses a function to raise a column to upper case: + +{ + "from":"aou", + "select": { + "aou": [ + "id", + { "column":"name", "transform":"upper" } + ] + } +} + +SELECT + "aou".id AS "id", + upper("aou".name ) AS "name" +FROM + actor.org_unit AS "aou" ; + + Here we take a substring of the name, using the params element to pass parameters: + + { + "from":"aou", + "select": { + "aou": [ + "id", { + "column":"name", + "transform":"substr", + "params":[ 3, 5 ] + } + ] + } + } + + SELECT + "aou".id AS "id", + substr("aou".name,'3','5' ) AS "name" + FROM + actor.org_unit AS "aou" ; + + The parameters specified with params are inserted after the applicable column (name in this case), + which is always the first parameter. They are always passed as strings, i.e. enclosed in quotes, even if the JSON expresses them as numbers. PostgreSQL will ordinarily + coerce them to the right type. However if the function name is overloaded to accept different types, PostgreSQL may invoke a function other than the one intended. + Finally we call a fictitious function "frobozz" that returns multiple columns, where we want only one of them: + +{ + "from":"aou", + "select": { + "aou": [ + "id", { + "column":"name", + "transform":"frobozz", + "result_field":"zamzam" + } + ] + } +} + +SELECT + "aou".id AS "id", + (frobozz("aou".name ))."zamzam" AS "name" +FROM + actor.org_unit AS "aou" ; + + The frobozz function doesn't actually exist, but json_query doesn't know that. The query won't fail until json_query tries to execute it in + the database. + + + Things You Can't Do + You can do some things in a SELECT clause with raw SQL (with psql, for example) that you can't do with a JSON query. Some of them matter and some of them don't. + When you do a JOIN, you can't arrange the selected columns in any arbitrary sequence, because all of the columns from a given table must be grouped together. + This limitation doesn't matter. The results are returned in the form of a data structure, which the client program can navigate however it likes. + You can't select an arbitrary expression, such as "percentage / 100" or "last_name || ', ' || first_name". Most of the time this limitation doesn't matter either, because + the client program can do these kinds of manipulations for itself. However, function calls may be a problem. You can't nest them, and you can't pass more than one column value + to them (and it has to be the first parameter). + You can't use a CASE expression. Instead, the client application can do the equivalent branching for itself. + You can't select a subquery. In raw SQL you can do something like the following: + +SELECT + id, + name, + ( + SELECT name + FROM actor.org_unit_type AS aout + WHERE aout.id = aou.ou_type + ) AS type_name +FROM + actor.org_unit AS aou; + + This contrived example is not very realistic. Normally you would use a JOIN in this case, and that's what you should do in a JSON query. Other cases may not be so + easy to solve. + + + The WHERE Clause + Most queries need a WHERE clause, as in this simple example: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "parent_ou":"3" + } +} + + Like the SELECT clause, the WHERE clause gets its own entry in the top-level object of a JSON query. The key is where, and the associated value is either + an object (as shown here) or an array (to be discussed a bit later). Each entry in the object is a separate condition. + In this case, we use a special shortcut for expressing an equality condition. The column name is on the left of the colon, and the value to which we are equating it is on + the right. + Here's the resulting SQL: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + "aou".parent_ou = 3; + + Like the SELECT clause, the generated WHERE clause qualifies each column name with the alias of the relevant table. + If you want to compare a column to NULL, put null (without quotation marks) to the right of the colon instead of a literal value. The + resulting SQL will include IS NULL instead of an equals sign. + + + Other Kinds of Comparisons + Here's the same query (which generates the same SQL) without the special shortcut: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "parent_ou":{ "=":3 } + } +} + + We still have an entry whose key is the column name, but this time the associated value is another JSON object. It must contain exactly one entry, + with the comparison operator on the left of the colon, and the value to be compared on the right. + The same syntax works for other kinds of comparison operators. For example: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "parent_ou":{ ">":3 } + } +} + + ...turns into: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + "aou".parent_ou > 3 ; + + The condition '=:null' turns into IS NULL. Any other operator used with null turns into IS NOT NULL. + You can use most of the comparison operators recognized by PostgreSQL: + + = <> != + < > <= >= + ~ ~* !~ !~* + like ilike + similar to + + The only ones you can't use are is distinct from and is not distinct from. + + + Custom Comparisons + Here's a dirty little secret: json_query doesn't really pay much attention to the operator you supply. It merely checks to make sure that the operator doesn't contain + any semicolons or white space, in order to prevent certain kinds of SQL injection. It also allows "similar to" as a special exception. + As a result, you can slip an operator of your own devising into the SQL, so long as it doesn't contain any semicolons or white space, and doesn't create invalid syntax. + Here's a contrived and rather silly example: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "parent_ou":{ "<2+":3 } + } +} + + ...which results in the following SQL: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + "aou".parent_ou <2+ 3; + + It's hard to come up with a realistic case where this hack would be useful, but it could happen. + + + Comparing One Column to Another + Here's how to put another column on the right hand side of a comparison: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "id": { ">": { "+aou":"parent_ou" } } + } +}; + + This syntax is similar to the previous examples, except that instead of comparing to a literal value, we compare to an object. This object has only a single entry, + whose key is a table alias preceded by a leading plus sign. The associated value is the name of the column. + Here's the resulting SQL: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE +( + "aou".id > ( "aou".parent_ou ) +); + + The table alias must correspond to the appropriate table. Since json_query doesn't validate the choice of alias, it won't detect an invalid alias until it tries to + execute the query. In this simple example there's only one table to choose from. The choice of alias is more important in a subquery or join. + The leading plus sign, combined with a table alias, can be used in other situations to designate the table to which a column belongs. We shall defer a discussion of + this usage to the section on joins. + + + Testing Boolean Columns + In SQL, there are several ways to test a boolean column such as actor.org_unit.opac_visible. The most obvious way is to compare it to true or false: + +SELECT + id +FROM + actor.org_unit +WHERE + opac_visible = true; + + In a JSON query this approach doesn't work. If you try it, the "= true" test will turn into IS NULL. Don't do that. Instead, use a leading plus sign, as described in + the preceding section, to treat the boolean column as a stand-alone condition: + +{ + "from":"aou", + "select": { "aou":[ "id" ] }, + "where": { + "+aou":"opac_visible" + } +} + + Result: + +SELECT + "aou".id AS "id" +FROM + actor.org_unit AS "aou" +WHERE + "aou".opac_visible ; + + If you need to test for falsity, then write a test for truth and negate it with the "-not" operator. We will discuss the "-not" operator later, but here's a preview: + +{ + "from":"aou", + "select": { "aou":[ "id" ] }, + "where": { + "-not": { + "+aou":"opac_visible" + } + } +} + +SELECT + "aou".id AS "id" +FROM + actor.org_unit AS "aou" +WHERE + NOT ( "aou".opac_visible ); + + You can also compare a boolean column directly to a more complex condition: + +{ + "from":"aou", + "select": { "aou":[ "id" ] }, + "where": { + "opac_visible": { + "=": { "parent_ou":{ ">":3 } } + } + } +} + + Here we compare a boolean column, not to a literal value, but to a boolean expression. The resulting SQL looks a little goofy, but it works: + +SELECT + "aou".id AS "id" +FROM + actor.org_unit AS "aou" +WHERE + ( + "aou".opac_visible = ( "aou".parent_ou > 3 ) + ); + + In this case we compare the boolean column to a single simple condition. However you can include additional complications -- multiple conditions, IN lists, + BETWEEN clauses, and other features as described below. + + + Multiple Conditions + If you need multiple conditions, just add them to the "where" object, separated by commas: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "parent_ou":{ ">":3 }, + "id":{ "<>":7 } + } +} + + The generated SQL connects the conditions with AND: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + "aou".parent_ou g 3 + AND "aou".id <> 7; + + Later we will see how to use OR instead of AND. + + + Using Arrays + Here's a puzzler. Suppose you need two conditions for the same column. How do you code them in the same WHERE clause? For example, suppose you want something like this: + +SELECT + id, + name +FROM + actor.org_unit +WHERE + parent_ou > 3 + AND parent_ou <> 7; + + You might try a WHERE clause like this: + +"where": { + "parent_ou":{ ">":3 }, + "parent_ou":{ "<>":7 } + } + + Nope. Won't work. According to JSON rules, two entries in the same object can't have the same key. + After slapping yourself in the forehead, you try something a little smarter: + +"where": { + "parent_ou": { + ">":3, + "<>":7 + } +} + + Nice try, but that doesn't work either. Maybe it ought to work -- at least it's legal JSON -- but, no. + Here's what works: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": [ + { "parent_ou":{ ">":3 } }, + { "parent_ou":{ "<>":7 } } + ] +} + + We wrapped the two conditions into two separate JSON objects, and then wrapped those objects together into a JSON array. The resulting SQL looks like this: + +SELECT + "aou".id AS "id", + "aou".name AS "name +FROM + actor.org_unit AS "aou" +WHERE + ( "aou".parent_ou > 3 ) +AND + ( "aou".parent_ou <> 7 ); + + That's not quite what we were hoping for, because the extra parentheses are so ugly. But they're harmless. This will do. + If you're in the mood, you can use arrays to as many parentheses as you like, even if there is only one condition inside: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": + [[[[[[ + { + "parent_ou":{ ">":3 } + }, + ]]]]]] +} + + ...yields: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + ( ( ( ( ( ( "aou".parent_ou > 3 ) ) ) ) ) ); + + + + How to OR + By default, json_query combines conditions with AND. When you need OR, here's how to do it: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "-or": { + "id":2, + "parent_ou":3 + } + } +} + + We use -or as the key, with the conditions to be ORed in an associated object. The leading minus sign is there to make sure that the operator isn't confused with a + column name. Later we'll see some other operators with leading minus signs. In a couple of spots we even use plus signs. + Here are the results from the above example: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + ( + "aou".id = 2 + OR "aou".parent_ou = 3 + ); + + The conditions paired with -or are linked by OR and enclosed in parentheses. + Here's how to do the same thing using an array, except that it produces an extra layer of parentheses: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "-or": [ + { "id":2 }, + { "parent_ou":3 } + ] + } +} +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + ( + ( "aou".id = 2 ) + OR ( "aou".parent_ou = 3 ) + ); + + It's possible, though not very useful, to have only a single condition subject to the -or operator. In that case, the condition appears by itself, since there's nothing + to OR it to. This trick is another way to add an extraneous layer of parentheses. + + + Another way to AND + You can also use the -and operator. It works just like -or, except that it combines conditions with AND instead of OR. Since AND is the default, we don't usually + need a separate operator for it, but it's available. + In rare cases, nothing else will do -- you can't include two conditions in the same list because of the duplicate key problem, but you can't combine them with + arrays either. In particular, you might need to combine them within an expression that you're comparing to a boolean column (see the subsection above on Testing Boolean Columns). + + + Negation with NOT + The -not operator negates a condition or set of conditions. For example: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "-not": { + "id":{ ">":2 }, + "parent_ou":3 + } + } +} + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + NOT + ( + "aou".id > 2 + AND "aou".parent_ou = 3 + ); + + In this example we merely negate a combination of two comparisons. However the condition to be negated may be as complicated as it needs to be. Anything that can be + subject to where can be subject to -not. + In most cases you can achieve the same result by other means. However the -not operator is the only way to represent NOT BETWEEN + (to be discussed later). + + + EXISTS with Subqueries + Two other operators carry a leading minus sign: -exists and its negation -not-exists. These operators apply to subqueries, which have the + same format as a full query. For example: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "-exists": { + "from":"asv", + "select":{ "asv":[ "id" ] }, + "where": { + "owner":7 + } + } + } +} + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE +EXISTS + ( + SELECT "asv".id AS "id" + FROM action.survey AS "asv" + WHERE "asv".owner = 7 + ); + + This kind of subquery is of limited use, because its WHERE clause doesn't have anything to do with the main query. It just shuts down the main query altogether + if it isn't satisfied. + More typical is a correlated subquery, whose WHERE clause refers to a row from the main query. For example: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "-exists": { + "from":"asv", + "select":{ "asv":[ "id" ] }, + "where": { + "owner":{ "=":{ "+aou":"id" }} + } + } + } +} + + Note the use of +aou to qualify the id column in the inner WHERE clause. + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + EXISTS + ( + SELECT "asv".id AS "id" + FROM action.survey AS "asv" + WHERE ("asv".owner = ( "aou".id )) + ); + + This latter example illustrates the syntax, but in practice, it would probably be more natural to use an IN clause with a subquery (to be discussed later). + + + BETWEEN Clauses + Here's how to express a BETWEEN clause: + +{ + "from":"aou", + "select": { "aou":[ "id" ] }, + "where": { + "parent_ou": { "between":[ 3, 7 ] } + } +} + + The value associated with the column name is an object with a single entry, whose key is "between". The corresponding value is an array with exactly two values, defining the + range to be tested. + The range bounds must be either numbers or string literals. Although SQL allows them to be null, a null doesn't make sense in this context, because a null never matches + anything. Consequently json_query doesn't allow them. + The resulting SQL is just what you would expect: + +SELECT + "aou".id AS "id" +FROM + actor.org_unit AS "aou" +WHERE + parent_ou BETWEEN '3' AND '7'; + + + + IN and NOT IN Lists + There are two ways to code an IN list. One way is simply to include the list of values in an array: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "parent_ou": [ 3, 5, 7 ] + } +} + + As with a BETWEEN clause, the values in the array must be numbers or string literals. Nulls aren't allowed. Here's the resulting SQL, which again is just what + you would expect: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + "aou".parent_ou IN (3, 5, 7); + + The other way is similar to the syntax shown above for a BETWEEN clause, except that the array may include any non-zero number of values: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "parent_ou": { "in": [ 3, 5, 7 ] } + } +} + + This version results in the same SQL as the first one. + For a NOT IN list, you can use the latter format, using the not in operator instead of in. Alternatively, you can use either format together with + the -not operator. + + + IN and NOT IN Clauses with Subqueries + For an IN clause with a subquery, the syntax is similar to the second of the two formats for an IN list (see the previous subsection). The "in" or "not in" operator + is paired, not with an array of values, but with an object representing the subquery. For example: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "id": { + "in": { + "from":"asv", + "select":{ "asv":[ "owner" ] }, + "where":{ "name":"Voter Registration" } + } + } + } +} + + The results: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + "aou".id IN + ( + SELECT + "asv".owner AS "owner" + FROM + action.survey AS "asv" + WHERE + "asv".name = 'Voter Registration' + ); + + In SQL the subquery may select multiple columns, but in a JSON query it can select only a single column. + For a NOT IN clause with a subquery, use the not in operator instead of in. + + + Comparing to a Function + Here's how to compare a column to a function call: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "id":{ ">":[ "sqrt", 16 ] } + } +} + + A comparison operator (> in this case) is paired with an array. The first entry in the array must be a string giving the name of the function. The remaining parameters, + if any, are the parameters. They may be strings, numbers, or nulls. The resulting SQL for this example: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + "aou".id > sqrt( '16' ); + + All parameters are passed as quoted strings -- even if, as in this case, they are really numbers. + This syntax is somewhat limited in that the function parameters must be constants (hence the use of a silly example). + + + Putting a Function Call on the Left + In the discussion of the SELECT clause, we saw how you could transform the value of a selected column by passing it to a function. In the WHERE clause, you can + use similar syntax to transform the value of a column before comparing it to something else. + For example: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "name": { + "=": { + "transform":"upper", + "value":"CARTER BRANCH" + } + } + } +} + + The "transform" entry gives the name of the function that we will use on the left side of the comparison. The "value" entry designates the value on the right side + of the comparison. + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + upper("aou".name ) = 'CARTER BRANCH' ; + + As in the SELECT clause, you can pass literal values or nulls to the function as additional parameters by using an array tagged as params: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "name": { + "=": { + "transform":"substr", + "params":[ 1, 6 ], + "value":"CARTER" + } + } + } +} + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + substr("aou".name,'1','6' ) = 'CARTER' ; + + The first parameter is always the column name, qualified by the class name, followed by any additional parameters (which are always enclosed in quotes even if they + are numeric). + As in the SELECT clause: if the function returns multiple columns, you can specify the one you want by using a "result_field" entry (not shown here). + If you leave out the "transform" entry (or misspell it), the column name will appear on the left without any function call. This syntax works, but it's more + complicated than it needs to be. + + + + Putting Function Calls on Both Sides + If you want to compare one function call to another, you can use the same syntax shown in the previous subsection -- except that the value entry carries an + array instead of a literal value. For example: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "id": { + ">": { + "transform":"factorial", + "value":[ "sqrt", 1000 ] + } + } + } +} +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE + factorial("aou".id ) > sqrt( '1000' ) ; + + The format for the right side function is similar to what we saw earlier, in the subsection Comparing to a Function. Note that there are two different formats + for defining function calls: + + + For a function call to the left of the comparison, the function name is tagged as transform. The first parameter is always the relevant + column name; additional parameters, if any, are in an array tagged as "params". The entry for result_field, if present, specifies a subcolumn. + + + For a function call to the right of the comparison, the function name is the first entry in an array, together with any parameters. + There's no way to specify a subcolumn. + + + + + Comparing a Function to a Condition + So far we have seen two kinds of data for the value tag. A string or number translates to a literal value, and an array translates to a function call. + The third possibility is a JSON object, which translates to a condition. For example: + +{ + "from":"aou", + "select": { "aou":[ "id", "name" ] }, + "where": { + "id": { + "=": { + "value":{ "parent_ou":{ ">":3 } }, + "transform":"is_prime" + } + } + } +} + + The function tagged as transform must return boolean, or else json_query will generate invalid SQL. The function used here, is_prime, + is fictitious. + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +WHERE +( + is_prime("aou".id ) = ( "aou".parent_ou > 3 ) +); + + If we left out the transform entry, json_query would compare the column on the left (which would to be boolean) to the condition on the right. The results are similar + to those for a simpler format described earlier (see the subsection Testing Boolean Columns). + In the example above we compared the boolean to a simple condition. However the expression on the right may include multiple conditions, IN lists, subqueries, + and whatever other complications are necessary. + + + Things You Can't Do + The WHERE clause is subject to some of the same limitations as the SELECT clause. However, in the WHERE clause these limitations are more limiting, because + the client program can't compensate by doing some of the work for itself. + You can't use arbitrary expressions in a WHERE condition, such as "WHERE id > parent_ou -- 3". In some cases you may be able to contrive a custom operator in order to + fake such an expression. However this mechanism is neither very general nor very aesthetic. + To the right of a comparison operator, all function parameters must be literals or null. You can't pass a column value, nor can you nest function calls. + Likewise you can't include column values or arbitrary expressions in an IN list or a BETWEEN clause. + You can't include null values in an IN list or a BETWEEN list, not that you should ever want to. + As noted earlier: you can't use the comparison operators is distinct from or is not distinct from. + Also as noted earlier: a subquery in an IN clause cannot select more than one column. + + + JOIN clauses + Until now, our examples have selected from only one table at a time. As a result, the FROM clause has been very simple -- just a single string containing + the class name of the relevant table. + When the FROM clause joins multiple tables, the corresponding JSON naturally gets more complicated. + SQL provides two ways to define a join. One way is to list both tables in the FROM clause, and put the join conditions in the WHERE clause: + +SELECT + aou.id, + aout.name +FROM + actor.org_unit aou, + actor.org_unit_type aout +WHERE + aout.id = aou.ou_type; + + The other way is to use an explicit JOIN clause: + +SELECT + aou.id, + aout.name +FROM + actor.org_unit aou + JOIN actor.org_unit_type aout + ON ( aout.id = aou.ou_type ); + + JSON queries use only the second of these methods. The following example expresses the same query in JSON: + +{ + "select": { "aou":[ "id" ], "aout":[ "name" ] }, + "from": { + "aou":"aout" + } +} + + First, let's review the SELECT clause. Since it selects rows from two different tables, the data for select includes two entries, one for each table. + As for the FROM clause, it's no longer just a string. It's a JSON object, with exactly one entry. The key of this entry is the class name of the core table, i.e. + the table named immediately after the FROM keyword. The data associated with this key contains the rest of the information about the join. In this simple example, + that information consists entirely of a string containing the class name of the other table. + So where is the join condition? + It's in the IDL. Upon reading the IDL, json_query knows that actor.org_unit has a foreign key pointing to actor.org_unit_type, and builds a join condition accordingly: + +SELECT + "aou".id AS "id", + "aout".name AS "name" +FROM + actor.org_unit AS "aou" + INNER JOIN actor.org_unit_type AS "aout" + ON ( "aout".id = "aou".ou_type ) ; + + In this case the core table is the child table, and the joined table is the parent table. We could just as well have written it the other way around: + +{ + "select": { "aou":[ "id" ], "aout":[ "name" ] }, + "from": { + "aout":"aou" + } +} + +SELECT + "aou".id AS "id", + "aout".name AS "name" +FROM + actor.org_unit_type AS "aout" + INNER JOIN actor.org_unit AS "aou" + ON ( "aou".ou_type = "aout".id ) ; + + + + Specifying The Join Columns Explicitly + While it's convenient to let json_query pick the join columns, it doesn't always work. + For example, the actor.org_unit table has four different address ids, for four different kinds of addresses. Each of them is a foreign key to the actor.org_address table. + Json_query can't guess which one you want if you don't tell it. + (Actually it will try to guess. It will pick the first matching link that it finds in the IDL, which may or may not be the one you want.) + Here's how to define exactly which columns you want for the join: + +{ + "select": { "aou":[ "id" ], "aoa":[ "street1" ] }, + "from": { + "aou": { + "aoa": { + "fkey":"holds_address", + "field":"id" + } + } + } +} + + Before, the table we were joining was represented merely by its class name. Now it's represented by an entry in a JSON object. The key of that entry is the + class name, and the associated data is another layer of JSON object containing the attributes of the join. + Later we'll encounter other kinds of join attributes. For now, the only attributes that we're looking at are the ones that identify the join columns: + fkey and field. The hard part is remembering which is which: + + + fkey identifies the join column from the left table; + + + field identifies the join column from the right table. + + + When there are only two tables involved, the core table is on the left, and the non-core table is on the right. In more complex queries neither table may be the + core table. + Here is the result of the preceding JSON: + +SELECT + "aou".id AS "id", + "aoa".street1 AS "street1" +FROM + actor.org_unit AS "aou" + INNER JOIN actor.org_address AS "aoa" + ON ( "aoa".id = "aou".holds_address ) ; + + In this example the child table is on the left and the parent table is on the right. We can swap the tables if we swap the join columns as well: + +{ + "select": { "aou":[ "id" ], "aoa":[ "street1" ] }, + "from": { + "aoa": { + "aou": { + "fkey":"id", + "field":"holds_address" + } + } + } +} + +SELECT + "aou".id AS "id", + "aoa".street1 AS "street1" +FROM + actor.org_address AS "aoa" + INNER JOIN actor.org_unit AS "aou" + ON ( "aou".holds_address = "aoa".id ) ; + + When you specify both of the join columns, json_query assumes that you know what you're doing. It doesn't check the IDL to confirm that the join makes sense. + The burden is on you to avoid absurdities. + + + Specifying Only One Join Column + We just saw how to specify both ends of a join. It turns out that there's a shortcut -- most of the time you only need to specify one end. Consider + the following variation on the previous example: + +{ + "select": { "aou":[ "id" ], "aoa":[ "street1" ] }, + "from": { + "aoa": { + "aou": { + "field":"holds_address" + } + } + } +} + + ..which results in exactly the same SQL as before. + Here we specified the join column from the child table, the column that is a foreign key pointing to another table. As long as that linkage is defined in the IDL, + json_query can look it up and figure out what the corresponding column is in the parent table. + However this shortcut doesn't work if you specify only the column in the parent table, because it would lead to ambiguities. Suppose we had specified the id + column of actor.org_address. As noted earlier, there are four different foreign keys from actor.org_unit to actor.org_address, and json_query would have no way to guess + which one we wanted. + + + Joining to Multiple Tables + So far we have joined only two tables at a time. What if we need to join one table to two different tables? + Here's an example: + +{ + "select": { "aou":[ "id" ], "aout":[ "depth" ], "aoa":[ "street1" ] }, + "from": { + "aou": { + "aout":{}, + "aoa": { + "fkey":"holds_address" + } + } + } +} + + The first join, to actor.org_unit_type, is simple. We could have specified join columns, but we don't have to, because json_query will construct that join on the basis of + what it finds in the IDL. Having no join attributes to specify, we leave that object empty. + For the second join, to actor.org_address, we have to specify at least the join column in the child table, as discussed earlier. We could also have specified the join + column from the parent table, but we don't have to, so we didn't. + Here is the resulting SQL: + +SELECT + "aou".id AS "id", + "aout".depth AS "depth", + "aoa".street1 AS "street1" +FROM + actor.org_unit AS "aou" + INNER JOIN actor.org_unit_type AS "aout" + ON ( "aout".id = "aou".ou_type ) + INNER JOIN actor.org_address AS "aoa" + ON ( "aoa".id = "aou".holds_address ) ; + + Since there can be only one core table, the outermost object in the FROM clause can have only one entry, whose key is the class name of the core table. The next + level has one entry for every table that's joined to the core table. + + + Nested Joins + Let's look at that last query again. It joins three tables, and the core table is the one in the middle. Can we make one of the end tables the core table instead? + Yes, we can: + +{ + "select": { "aou":[ "id" ], "aout":[ "depth" ], "aoa":[ "street1" ] }, + "from": { + "aoa": { + "aou": { + "field":"holds_address", + "join": { + "aout":{ "fkey":"ou_type" } + } + } + } + } +} + + The join attribute introduces another level of join. In this case "aou" is the left table for the nested join, and the right table for the original join. + Here are the results: + +SELECT + "aou".id AS "id", + "aout".depth AS "depth", + "aoa".street1 AS "street1" +FROM + actor.org_address AS "aoa" + INNER JOIN actor.org_unit AS "aou" + ON ( "aou".holds_address = "aoa".id ) + INNER JOIN actor.org_unit_type AS "aout" + ON ( "aout".id = "aou".ou_type ) ; + + + + Outer Joins + By default, json_query constructs an inner join. If you need an outer join, you can add the join type as an attribute of the join: + Yes, we can: + +{ + "select": { "aou":[ "id" ], "aoa":[ "street1" ] }, + "from": { + "aoa": { + "aou": { + "field":"mailing_address", + "type":"left" + } + } + } +} + + Here is the resulting SQL for this example: + +SELECT + "aou".id AS "id", + "aoa".street1 AS "street1" +FROM + actor.org_address AS "aoa" + LEFT JOIN actor.org_unit AS "aou" + ON ( "aou".mailing_address = "aoa".id ) ; + + + + Referring to Joined Tables in the WHERE Clause + In the WHERE clause of the generated SQL, every column name is qualified by a table alias, which is always the corresponding class name. + If a column belongs to the core table, this qualification happens by default. If it belongs to a joined table, the JSON must specify what class name + to use for an alias. For example: + +{ + "select": { "aou":[ "id" ], "aout":[ "name" ] }, + "from": { + "aout":"aou" + }, + "where": { + "+aou":{ "parent_ou":2 } + } +} + + Note the peculiar operator +aou -- a plus sign followed by the relevant class name. This operator tells json_query to apply the specified class to the condition that + follows. The result: + +SELECT + "aou".id AS "id", + "aout".name AS "name" +FROM + actor.org_unit_type AS "aout" + INNER JOIN actor.org_unit AS "aou" + ON ( "aou".ou_type = "aout".id ) +WHERE + ( "aou".parent_ou = 2 ); + + The plus-class operator may apply to multiple conditions: + +{ + "select": { "aou":[ "id" ], "aout":[ "name" ] }, + "from": { + "aout":"aou" + }, + "where": { + "+aou":{ + "parent_ou":2, + "id":{ "<":42 } + } + } +} + +SELECT + "aou".id AS "id", + "aout".name AS "name" +FROM + actor.org_unit_type AS "aout" + INNER JOIN actor.org_unit AS "aou" + ON ( "aou".ou_type = "aout".id ) +WHERE + ( + "aou".parent_ou = 2 + AND "aou".id < 42 + ); + + For these artificial examples, it would have been simpler to swap the tables, so that actor.org_unit is the core table. Then you wouldn't need to go through any + special gyrations to apply the right table alias. In a more realistic case, however, you might need to apply conditions to both tables. Just swapping the tables + wouldn't solve the problem. + You can also use a plus-class operator to compare columns from two different tables: + +{ + "select": { "aou":[ "id" ], "aout":[ "name" ] }, + "from": { + "aout":"aou" + }, + "where": { + "depth": { ">": { "+aou":"parent_ou" } } + } +} + + +SELECT + "aou".id AS "id", + "aout".name AS "name" +FROM + actor.org_unit_type AS "aout" + INNER JOIN actor.org_unit AS "aou" + ON ( "aou".ou_type = "aout".id ) +WHERE + ( + "aout".depth > ( "aou".parent_ou ) + ); + + Please don't expect that query to make any sense. It doesn't. But it illustrates the syntax. + + + Join Filters + While the above approach certainly works, the special syntax needed is goofy and awkward. A somewhat cleaner solution is to include a condition in the JOIN clause: + +{ + "select": { "aou":[ "id" ], "aout":[ "name" ] }, + "from": { + "aout": { + "aou": { + "filter": { + "parent_ou":2 + } + } + } + } +} + +SELECT + "aou".id AS "id", "aout".name AS "name" +FROM + actor.org_unit_type AS "aout" + INNER JOIN actor.org_unit AS "aou" + ON ( "aou".ou_type = "aout".id + AND "aou".parent_ou = 2 ) ; + + By default, json_query uses AND to combine the filter condition with the original join condition. If you need OR, you can use the filter_op attribute to + say so: + +{ + "select": { "aou":[ "id" ], "aout":[ "name" ] }, + "from": { + "aout": { + "aou": { + "filter": { + "parent_ou":2 + }, + "filter_op":"or" + } + } + } +} + +SELECT + "aou".id AS "id", + "aout".name AS "name" +FROM + actor.org_unit_type AS "aout" + INNER JOIN actor.org_unit AS "aou" + ON ( "aou".ou_type = "aout".id + OR "aou".parent_ou = 2 ) ; + + If the data tagged by filter_op is anything but or (in upper, lower, or mixed case), json_query uses AND instead of OR. + The condition tagged by filter may be much more complicated. In fact it accepts all the same syntax as the WHERE clause. + Remember, though, that it all gets combined with the the original join condition with an AND, or with an OR if you so specify. If + you're not careful, the result may be a confusing mixture of AND and OR at the same level. + + + Joining to a Subquery + In SQL you can put a subquery in a FROM clause, and select from it as if it were a table. A JSON query has no way to do that directly. The IDL, however, + can define a class as a subquery instead of as a table. When you SELECT from it, json_query inserts the corresponding subquery into the FROM clause. For example: + +{ + "select":{ "iatc":[ "id", "dest", "copy_status" ] }, + "from": "iatc" +} + + There's nothing special-looking about this JSON, but json_query expands it as follows: + +SELECT + "iatc".id AS "id", + "iatc".dest AS "dest", + "iatc".copy_status AS "copy_status" +FROM + ( + SELECT t.* + FROM + action.transit_copy t + JOIN actor.org_unit AS s + ON (t.source = s.id) + JOIN actor.org_unit AS d + ON (t.dest = d.id) + WHERE + s.parent_ou <> d.parent_ou + ) AS "iatc" ; + + The iatc class is like a view, except that it's defined in the IDL instead of the database. In this case it provides a way to do a join that would otherwise be + impossible through a JSON query, because it joins the same table in two different ways (see the next subsection). + + + Things You Can't Do + In a JOIN, as with other SQL constructs, there are some things that you can't do with a JSON query. + In particular, you can't specify a table alias, because the table alias is always the class name. As a result: + + + You can't join a table to itself. For example, you can't join actor.org_unit to itself in order to select the name of the parent for every org_unit. + + + You can't join to the same table in more than one way. For example, you can't join actor.org_unit to actor.org_address through four different foreign + keys, to get four kinds of addresses in a single query. + + + The only workaround is to perform the join in a view, or in a subquery defined in the IDL as described in the previous subsection. + Some other things, while not impossible, require some ingenuity in the use of join filters. + For example: by default, json_query constructs a join condition using only a single pair of corresponding columns. As long as the database is designed accordingly, + a single pair of columns will normally suffice. If you ever need to join on more than one pair of columns, you can use join filters for the extras. + Likewise, join conditions are normally equalities. In raw SQL it is possible (though rarely useful) to base a join on an inequality, or to use a function call in a join + condition, or to omit any join condition in order to obtain a Cartesian product. If necessary, you can devise such unconventional joins by combining the normal join + conditions with join filters. + For example, here's how to get a Cartesian product: + +{ + "select": { "aou":[ "id" ], "aout":[ "name" ] }, + "from": { + "aout": { + "aou": { + "filter": { + "ou_type":{ "<>": { "+aout":"id" } } + }, + "filter_op":"or" + } + } + } +} + + +SELECT + "aou".id AS "id", + "aout".name AS "name" +FROM + actor.org_unit_type AS "aout" + INNER JOIN actor.org_unit AS "aou" + ON + ( + "aou".ou_type = "aout".id + OR ("aou".ou_type <> ( "aout".id )) + ) ; + + Yes, it's ugly, but at least you're not likely to do it by accident. + + + Selecting from Functions + In SQL, you can put a function call in the FROM clause. The function may return multiple columns and multiple rows. Within the query, the function behaves like a table. + A JSON query can also select from a function: + +{ + "from": [ "actor.org_unit_ancestors", 5 ] +} + + The data associated with from is an array instead of a string or an object. The first element in the array specifies the name of the function. Subsequent elements, + if any, supply the parameters of the function; they must be literal values or nulls. + Here is the resulting query: + +SELECT * +FROM + actor.org_unit_ancestors( '5' ) AS "actor.org_unit_ancestors" ; + + In a JSON query this format is very limited, largely because the IDL knows nothing about the available functions. You can't join the function to a table or to + another function. If you try to supply a SELECT list or a WHERE clause, json_query will ignore it. The generated query will always select every column, via a wild card asterisk, + from every row. + + + The ORDER BY Clause + In most cases you can encode an ORDER BY clause as either an array or an object. Let's take a simple example and try it both ways. First the array: + +{ + "select":{ "aou":[ "name" ] }, + "from": "aou", + "order_by": [ + { "class":"aou", "field":"name" } + ] +} + + Now the object: + +{ + "select":{ "aou":[ "name" ] }, + "from": "aou", + "order_by": { + "aou":{ "name":{} } + } +} + + The results are identical from either version: + +SELECT + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +ORDER BY + "aou".name; + + The array format is more verbose, but as we shall see, it is also more flexible. It can do anything the object format can do, plus some things that the object + format can't do. + + + ORDER BY as an Array + In the array format, each element of the array is an object defining one of the sort fields. Each such object must include at least two tags: + + + The class tag provides the name of the class, which must be either the core class or a joined class. + + + The field tag provides the field name, corresponding to one of the columns of the class. + + + If you want to sort by multiple fields, just include a separate object for each field. + If you want to sort a field in descending order, add a direction tag: + +{ + "select":{ "aou":[ "name" ] }, + "from": "aou", + "order_by": [ + { + "class":"aou", + "field":"name", + "transform":"upper" + } + ] +} + + +SELECT + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +ORDER BY + upper("aou".name ); + + If you need additional parameters for the function, you can use the params tag to pass them: + +{ + "select":{ "aou":[ "name" ] }, + "from": "aou", + "order_by": [ + { + "class":"aou", + "field":"name", + "transform":"substr", + "params":[ 1, 8 ] + } + ] +} + + The additional parameters appear as elements in an array. They may be numbers, strings, or nulls. + +SELECT + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +ORDER BY + substr("aou".name,'1','8' ); + + As we have seen elsewhere, all literal values are passed as quoted strings, even if they are numbers. + If the function returns multiple columns, you can use the result_field tag to indicate which one you want (not shown). + + + + ORDER BY as an Object + When you encode the ORDER BY clause as an object, the keys of the object are class names. Each class must be either the core class or a joined class. The data for + each class can be either an array or another layer of object. Here's an example with one of each: + +{ + "select":{ "aout":"id", "aou":[ "name" ] }, + "from": { "aou":"aout" }, + "order_by": { + "aout":[ "id" ], + "aou":{ "name":{ "direction":"desc" } } + } +} + + For the aout class, the associated array is simply a list of field names (in this case, just one). Naturally, each field must reside in the class with which + it is associated. + However, a list of field names provides no way to specify the direction of sorting, or a transforming function. You can add those details only if the class + name is paired with an object, as in the example for the "aou" class. The keys for such an object are field names, and the associated tags define other details. + In this example, we use the direction" tag to specify that the name field be sorted in descending order. This tag works the same way here as described earlier. + If the associated string starts with "D" or "d", the sort will be descending; otherwise it will be ascending. + Here is the resulting SQL: + +SELECT + "aou".name AS "name" +FROM + actor.org_unit AS "aou" + INNER JOIN actor.org_unit_type AS "aout" + ON ( "aout".id = "aou".ou_type ) +ORDER BY + "aout".id, + "aou".name DESC; + + +{ + "select":{ "aou":[ "name", "id" ] }, + "from": "aou", + "order_by": { + "aou":{ + "name":{ "transform":"substr", "params":[ 1, 8 ] } + } + } +} + +SELECT + "aou".name AS "name", + "aou".id AS "id" +FROM + actor.org_unit AS "aou" +ORDER BY + substr("aou".name,'1','8' ); + + + + Things You Can't Do + If you encode the ORDER BY clause as an object, you may encounter a couple of restrictions. + Because the key of such an object is the class name, all the fields from a given class must be grouped together. You can't sort by a column from one table, followed by + a column from another table, followed by a column from the first table. If you need such a sort, you must encode the ORDER BY clause in the array format, which suffers + from no such restrictions. + For similar reasons, with an ORDER BY clause encoded as an object, you can't reference the same column more than once. Although such a sort may seem perverse, + there are situations where it can be useful, provided that the column is passed to a transforming function. + For example, you might want a case-insensitive sort, except that for any given letter you want lower case to sort first. For example, you want diBona to sort + before Dibona. Here's a way to do that, coding the ORDER BY clause as an array: + +{ + "select":{ "au":[ "family_name", "id" ] }, + "from": "au", + "order_by": [ + { "class":"au", "field":"family_name", "transform":"upper" }, + { "class":"au", "field":"family_name" } + ] +} +SELECT + "au".family_name AS "family_name", + "au".id AS "id" +FROM + actor.usr AS "au" +ORDER BY + upper("au".family_name ), + "au".family_name; + + Such a sort is not possible where the ORDER BY clause is coded as an object. + + + The GROUP BY Clause + A JSON query has no separate construct to define a GROUP BY clause. Instead, the necessary information is distributed across the SELECT clause. However, + the way it works is a bit backwards from what you might expect, so pay attention. + Here's an example: + +{ + "select": { + "aou": [ + { "column":"parent_ou" }, + { "column":"name", "transform":"max", "aggregate":true } + ] + }, + "from": "aou" +} + + The transform tag is there just to give us an excuse to do a GROUP BY. What's important to notice is the aggregate tag. + Here's the resulting SQL: + +SELECT + "aou".parent_ou AS "parent_ou", + max("aou".name ) AS "name" +FROM + actor.org_unit AS "aou" +GROUP BY + 1; + + The GROUP BY clause references fields from the SELECT clause by numerical reference, instead of by repeating them. Notice that the field it references, + parent_ou, is the one that doesn't carry the aggregate tag in the JSON. + Let's state that more generally. The GROUP BY clause includes only the fields that do not carry the aggregate tag (or that carry it with a value of false). + However, that logic applies only when some field somewhere does carry the aggregate tag, with a value of true. If there is no aggregate tag, or + it appears only with a value of false, then there is no GROUP BY clause. + If you really want to include every field in the GROUP BY clause, don't use aggregate. Use the distinct tag, as described in the next section. + + + The DISTINCT Clause + JSON queries don't generate DISTINCT clauses. However, they can generate GROUP BY clauses that include every item from the SELECT clause. The effect is the same as + applying DISTINCT to the entire SELECT clause. + For example: + +{ + "select": { + "aou": [ + "parent_ou", + "ou_type" + ] + }, + "from":"aou", + "distinct":"true" +} + + Note the distinct entry at the top level of the query object, with a value of true. + +SELECT + "aou".parent_ou AS "parent_ou", + "aou".ou_type AS "ou_type" +FROM + actor.org_unit AS "aou" +GROUP BY + 1, 2; + + The generated GROUP BY clause references every column in the SELECT clause by number. + + + The HAVING Clause + For a HAVING clause, add a having entry at the top level of the query object. For the associated data, you can use all the same syntax + that you can use for a WHERE clause. + Here's a simple example: + +{ + "select": { + "aou": [ + "parent_ou", { + "column":"id", + "transform":"count", + "alias":"id_count", + "aggregate":"true" + } + ] + }, + "from":"aou", + "having": { + "id": { + ">" : { + "transform":"count", + "value":6 + } + } + } +} + + We use the aggregate tag in the SELECT clause to give us a GROUP BY to go with the HAVING. Results: + +SELECT + "aou".parent_ou AS "parent_ou", + count("aou".id ) AS "id_count" +FROM + actor.org_unit AS "aou" +GROUP BY + 1 +HAVING + count("aou".id ) > 6 ; + + In raw SQL we could have referred to count( 1 ). But since JSON queries cannot encode arbitrary expressions, we applied the count function to a column that + cannot be null. + + + The LIMIT and OFFSET Clauses + To add an LIMIT or OFFSET clause, add an entry to the top level of a query object. For example: + +{ + "select": { + "aou": [ "id", "name" ] + }, + "from":"aou", + "order_by": { "aou":[ "id" ] }, + "offset": 7, + "limit": 42 +} + + The data associated with offset and limit may be either a number or a string, but if it's a string, it should have a number inside. + Result: + +SELECT + "aou".id AS "id", + "aou".name AS "name" +FROM + actor.org_unit AS "aou" +ORDER BY + "aou".id +LIMIT 42 +OFFSET 7; + + + diff --git a/development/supercat.xml b/development/supercat.xml new file mode 100644 index 0000000000..484651ba32 --- /dev/null +++ b/development/supercat.xml @@ -0,0 +1,163 @@ + + + + SuperCat + +
> + Using SuperCat + SuperCat + SuperCat allows Evergreen record and information retrieval from a web browser using a based on a number of open web standards and formats. The following record types are + supported: + + isbn + metarecord + record + + + Return a list of ISBNs for related records + SuperCatISBNs + Similar to the OCLC xISBN service, Evergreen can return a list of related records based on its oISBN algorithm: + http://<hostname>/opac/extras/osibn/<ISBN> + For example, http://dev.gapines.org/opac/extras/oisbn/0439136350 returns: + +<idlist metarecord="302670"> +<isbn record="250060">0790783525</isbn> +<isbn record="20717">0736691316</isbn> +<isbn record="250045">0790783517</isbn> +<isbn record="199060">9500421151</isbn> +<isbn record="250061">0790783495</isbn> +<isbn record="154477">0807286028</isbn> +<isbn record="227297">1594130027</isbn> +<isbn record="26682">0786222743</isbn> +<isbn record="17179">0807282316</isbn> +<isbn record="34885">0807282316</isbn> +<isbn record="118019">8478885196</isbn> +<isbn record="1231">0738301477</isbn> +</idlist> + + + + Return records + SuperCatrecords + SuperCat can return records and metarecords in many different formats (see + http://<hostname>/opac/extras/supercat/retrieve/<format>/<record-type>/<bib-ID> + For example, http://dev.gapines.org/opac/extras/supercat/retrieve/mods/record/555 returns: + +<mods:modsCollection version="3.0"> + <mods:mods xsi:schemaLocation="http://www.loc.gov/mods/ http://www.loc.gov/standards/mods/mods.xsd"> + <titleInfo> + <title>More Brer Rabbit stories /</title> + </titleInfo> + <typeOfResource>text</typeOfResource> + <originInfo> + <place> + <code authority="marc">xx</c0de> + </place> + <publisher>Award Publications</publisher> + <dateIssued>c1982, 1983</dateIssued> + <dateIssued encoding="marc" point="start">1983</dateIssued> + <dateIssued encoding="marc" point="end">1982</dateIssued> + <issuance>monographic</issuance> + </originInfo> + <language authority="iso639-2b">eng</language> + <physicalDescription> + <form authority="marcform">print</form> + <extent>unp. : col. ill.</extent> + </physicalDescription> + <note type="statement of responsibility">ill. by Rene Cloke.</note> + <subject authority="lcsh"> + <topic>Animals</topic> + <topic>Fiction</topic> + </subject> + <subject authority="lcsh"> + <topic>Fables</topic> + </subject> + <recordInfo> + <recordContentSource>(BRO)</recordContentSource> + <recordCreationDate encoding="marc">930903</recordCreationDate> + <recordChangeDate encoding="iso8601">19990703024637.0</recordChangeDate> + <recordIdentifier>PIN60000007 </recordIdentifier> + </recordInfo> + </mods:mods> +</mods:modsCollection> + + + + Return a feed of recently edited or created records + SuperCatrecent records + SuperCat can return feeds of recently edited or created authority and bibliographic records: + http://<hostname>/opac/extras/feed/freshmeat/<feed-type>/[authority|biblio]/[import|edit]/<limit>/<date> + The limit records imported or edited following the supplied date will be returned. If you do not supply a date, then the most recent limit records will be returned. + If you do not supply a limit, then up to 10 records will be returned. + Feed-type can be one of atom, html, htmlholdings, marcxml, mods, mods3, or rss2. + For example, http://dev.gapines.org/opac/extras/feed/freshmeat/atom/biblio/import/10/2008-01-01 + + + Browse records + SuperCat can browse records in HTML and XML formats: + http://<hostname>/opac/extras/supercat/browse/<format>/call_number/<org_unit>/<call_number> + For example, http://dev.gapines.org/opac/extras/browse/xml/call_number/-/GV returns: + +<hold:volumes xmlns:hold='http://open-ils.org/spec/holdings/v1'> + <hold:volume id="tag:open-ils.org,2008:asset-call_number/130607" lib="FRRLS-FA" label="GUTCHEON BETH"> + <act:owning_lib id="tag:open-ils.org,2008:actor-org_unit/111" name="Fayette County Public Library"/> + <record xsi:schemaLocation="http://www.loc.gov/MARC21/slim http://www.loc.gov/ + standards/marcxml/schema/MARC21slim.xsd" + id="tag:open-ils.org,2008:biblio-record_entry/21669/FRRLS-FA"> + <leader>09319pam a2200961 a 4500</leader> + <controlfield tag="001"/> + <controlfield tag="005">20000302124754.0</controlfield> + <controlfield tag="008">990817s2000 nyu 000 1 eng </controlfield> + <datafield tag="010" ind1=" " ind2=" "> + <subfield code="a"> 99045936</subfield> + </datafield> + .. + </record> + <record> + .. + </record> + </hold:volume> +</hold:volumes> + + + + Supported formats + SuperCatformats + SuperCat maintains a list of supported formats for records and metarecords: + http://<hostname>/opac/extras/supercat/formats/<record-type> + For example, http://dev.gapines.org/opac/extras/supercat/formats/record returns: + +<formats> + <format> + <name>opac</name> + <type>text/html</type> + </format> + <format> + <name>htmlholdings</name> + <type>text/html</type> + </format> +... + + +
+
+ Adding new SuperCat Formats + SuperCatformatsadding + Adding SuperCat formats requires experience editing XSL files and familiarity with XML and Perl. + SuperCat web services are based on the OpenSRF service, >open-ils.supercat. + Developers are able to add new formats by adding the xsl stylesheet for the format. By default, the location of the stylesheets is /openils/var/xsl/. You must also add the feed to the perl + modules openils/lib/perl5/OpenILS/WWW/SuperCat/feed.pm and openils/lib/perl5/OpenILS/WWW/SuperCat.pm. An Evergreen restart is + required for the feed to be activated. + Use an existing xsl stylesheet and Perl module entry as a template for your new format. +
+
+ Customizing SuperCat Formats + SuperCatformatscustomizing + Editing SuperCat formats requires experience editing XSL files and familiarity with XML.. + It is possible to customize existing supercat formats using XSL stylesheets. You are able to change the content to be displayed and the design of the pages. + In order to change the display of a specific format, edit the corresponding XSL file(s) for the particular format. The default location for the XSL stylesheets is + /openils/var/xsl/. +
+
+ diff --git a/integration/intro.xml b/integration/intro.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/intro/about_evergreen.xml b/intro/about_evergreen.xml new file mode 100644 index 0000000000..3e692b8844 --- /dev/null +++ b/intro/about_evergreen.xml @@ -0,0 +1,18 @@ + + + + About Evergreen + + Evergreen is an open source library automation software designed to meet the needs of the very smallest to the very largest libraries and consortia. Through its staff interface, it facilitates the management, cataloging, and circulation of library materials, and through its online public access interface it helps patrons find those materials. + The Evergreen software is freely licensed under the GNU General Public License,GNU General Public License meaning that it is free to download, use, view, modify, and share. It has an active development and user community, as well as several companies offering migration, support, hosting, and development services. + The community’s development requirements state that Evergreen must be: + + Stable, even under extreme load. + Robust, and capable of handling a high volume of transactions and simultaneous users. + Flexible, to accommodate the varied needs of libraries. + Secure, to protect our patrons’ privacy and data. + User-friendly, to facilitate patron and staff use of the system. + + Evergreen, which first launched in 2006 now powers over 544 libraries of every type – public, academic, special, school, and even tribal and home libraries – in over a dozen countries worldwide. + \ No newline at end of file diff --git a/intro/intro_intro.xml b/intro/intro_intro.xml new file mode 100644 index 0000000000..6fe0bf5a83 --- /dev/null +++ b/intro/intro_intro.xml @@ -0,0 +1,5 @@ + + The book you’re holding in your hands or viewing on a screen is The Book of Evergreen, the official guide to the 1.6.x version of the Evergreen open source library automation software. This guide was produced by the Evergreen Documentation Interest Group (DIG), consisting of numerous volunteers from many different organizations. The DIG has drawn together, edited, and supplemented pre-existing documentation contributed by libraries and consortia running Evergreen that were kind enough to release their documentation into the creative commons. For a full list of authors and contributing organizations, see . Just like the software it describes, this guide is a work in progress, continually revised to meet the needs of its users, so if you find errors or omissions, please let us know, by contacting the DIG facilitators at docs@evergreen-ils.org. + This guide to Evergreen is intended to meet the needs of front-line library staff, catalogers, library administrators, system administrators, and software developers. It is organized into Parts, Chapters, and Sections addressing key aspects of the software, beginning with the topics of broadest interest to the largest groups of users and progressing to some of the more specialized and technical topics of interest to smaller numbers of users. + Copies of this guide can be accessed in PDF and HTML formats from the Documentation section of http://evergreen-ils.org/ and are included in DocBook XML format along with the Evergreen source code, available for download from the same Web site. + \ No newline at end of file diff --git a/intro/releasenotes.xml b/intro/releasenotes.xml new file mode 100644 index 0000000000..e7ab40a72f --- /dev/null +++ b/intro/releasenotes.xml @@ -0,0 +1,358 @@ + + + + Release Notes + + + + + 1.6.0.8 + + New features + + Added index for case insensitive barcode searching (1.6.0.7) for speed. + Move to BibTemplateBibTemplate for general title detail display, not just overlay of MVR-based display. + + + + Bug fixes + + Offline transaction timestamp and export fixes. + More configuration interface improvements. + Printing improvements to avoid the dreaded inner print_tree errors. + Fix Google BooksGoogle Books full-text functionality. + User Editor improvements (addresses, appropriate required fields). + + + + + 1.6.0.7 + + New features + + Made barcode searching from the general user search interface case insensitive + + + + Bug fixes + + FIFO Holds OrgholdsFIFO Setting name in the Library Settings Editor did not match that used by the SQL – repaired. + Repaired Authority Record ingest.authority record ingest + Backdating timestamp format bug fixed – patch from James Fournie at SITKA. + Configuration interface bugs addressed (ongoing improvement from 1.6.0.4). + Action/Trigger (notifications, etc) bugs addressed.action triggers + In-Database record merging In-Databaserecord merging bug fixes (indicators, Located URIs) + In-Database hold testing stored procedure bug fixed – patch from John Craig.In-Databasehold testing + + + + + + 1.6.0.6 + + Security + + Address a security vulnerability in open-ils.pcrud that allows retrieval of information beyond the bounds of the permissions for + the targeted objects. + + + + Bug fixes + + Remove a call to a non-existent method. + Add debugging messages to the action-trigger script and server code + action triggers + + + + 1.6.0.5 + + New features + + Patch from James Fournie to add a setting for first-in, first-out (FIFO) holds resolution so that items checked in will be assigned to holds + by request date first, rather than proximity.holdsFIFO + + + + Bug fixes + + Patch from Dan Wells to enable the bookbag menu to show up in Craftsman skin. + Patch from Bill Ott to add missing apostrophe in rdetail.js. + Fix for report editor parameters not consistently showing up. + Log bib search timeouts. + + + + + + 1.6.0.4 + + New features + + Patch from Dan Wells to add an org-unit setting to restrict renewals when the item in question is needed to fulfill a hold. + + + + Bug fixes + + Patch from Jason Stephenson to allow the EVERYTHING permission in permission.usr_has_perm_at_nd. + Patch from Warren Layton to remove a debugging alert in the permission creation interface. + Patch from Warren Layton to sort Z39.50 servers in Z39.50 import interface.Z39.50 + Patch from Galen Charlton to prevent legacy 852 fields from being exported during bib+holdings export. + Patch from Galen Charlton to prevent one bad MARC record from spoiling the rest of the export. + Patch from Galen Charlton to remove empty XML elements and control fields when ingesting a bib record. + Patch from Galen Charlton. This patch adds additional calls to escape_xml to handle cases where patron or library data could contain + ampersand or other characters that need to be converted to entities. Issue discovered by Bibliomation; patch includes contributions by Ben Ostrowsky. + Enable display of barcodes in brief circulation interface even when patron has no middle name (problem diagnosed by + Bill Ott). + Correct the calculation of patron bills. + Fix parsing of colons in search phrases. + Fix handling of horizontal patron summary setting. + Various fixes for server administration interfaces. + Correct date handling in My Account interface. + Prevent an exception from being thrown when a standing penalty is removed. + Fix ISSN quicksearch (bug reported by Dan Wells). + Prevent colons from being incorrectly inserted into titles in search results display. + Fix survey interface in patron editor to enable it to save results correctly. + Corrections in in-database circulation: enable check-out and renewal of pre-cataloged items, process non-cataloged items.in-databasecirculation + Correct Unicode handling in SRU/Z39.50 server. + Z39.50Unicode + + + + + 1.6.0.3 + + Bug fixes + + Patch from Dan Wells to address a regression in the Reshelving-to-Available method call. + Patch from Warren Layton of NRCAN to address a regression in date calculation code. + Fix for offline identification requirement (relaxed to match on-line patron registration). + + + + + 1.6.0.2 + + New features + + Support indexing normalization and search of ratio-like strings. + Support specific-index searching via the basic search dropdown. + + + + Bug fixes + + Fix for search bug introduced in 1.6.0.1 which primarily effected Z39.50 searches against Evergreen.Z39.50 + Fix for offline patron blocked list generation (Patch from Joe Atzberger). + General translation and internationalization improvements. + Force at least one non-system billing type to exist (Identified by Dan Wells). + + + + + 1.6.0.1 + + Bug fixes + + Overdue notice XML normalization and encoding fixes.noticesoverdue + Remove cosmetic issues with Offline Mode.offline mode + Backport compatibility-improved triggers for summary data collection. + + (fixed super-simple record extract view issues for isbn and issn) + + + Interface fixes for Self Check.self checkoverdue + + (prevent login of patrons who are marked as invalid) + + + General grid-related interface cleanups. + + + (fixed pixel and alignment issues in table views accessible from admin settings) + + + String translation interface fix – translated strings can be removed. + + (the translation windows now perform removals correctly) + + + Command-line data extraction script fixes (Galen Charlton). + + (improved batch export) + + + Fixed billing time stamp calculation. + + (e.g. a book that circulates for whole days that is technically due at 3pm doesn't accrue fines until after the library is + closed) + + + Fix for searches containing colons but no command tag. + + (the : is no longer assumed to be an index specification so title searches for Homeward Bound: the Incredible Journey + will return results) + + + Fix for Z39.50 searches containing diacritical marks (Dan Scott).Z39.50 + + (the SRU is now better at detecting incoming encoding) + + + Horizontal user summary display fix in the Checkout entry point. + Return of Shadowed Record styling in the staff client for records with no items or no items at this location (Bill Ott). + Holdings import fixes (Dan Wells) (see changeset 15353). + + (Found and fixed the Vandelay bug that manifested based on log in type.) + + + Holdings import fixes (Dan Wells) (see changeset 15353). + Fixed an error that occurred when renewing multiple items at once in Items Out + + + + New features (front end) + + French translation updates. + Several new translations: + + Russian (from Tigran Zargaryan) + Czech (forward-ported from 1.4) + British English (submitted via Launchpad) + Spanish (submitted via Launchpad) + Brazilian Portuguese (submitted via Launchpad) + languages + + More places to access Record Buckets in the staff clientrecord buckets + Virtual due date for non-cataloged circulations honors closed dates + Differentiated messages for inactive vs. non-existent users. + + (error messages in patron OPAC log in are now different for inactive patrons versus bad log in (typo)/non-existent user) + + + + + + New features (server/administration) + + Action/Trigger initiator script.action triggers + + (1.6.0.1 includes the default script to initiate system scheduling for action/trigger events - for use in cron jobs) + + + Improved MFHD (serials) import script. + + (improved instructions in the read me files and relaxed database constraints) + + + SIP2 configurable encoding support.SIP + SIP1 renew-or-checkout support for some 3M equipment which support older SIP protocols. + Updated Linux distribution support. + Automatic update of OpenSRF support files when OpenSRF is upgraded. + OpenSRF + + + + Features from 1.6.0.0 + + + New features (front end) + + Added insert copy above (CTRL up) and insert + copy below (CTRL down) functionality in the MARC Editor. + Summary editing in MARC Format for Holdings Data + BibTemplate OPAC templating – Any field from any version of a record that Evergreen can deliver, with or without embedded holdings,BibTemplate + is now available for display using a simple template language which is further extended with basic JavaScript. + + Template customization is now supported that allows specific data fields to be pulled from the MARC and displayed in the OPAC. + Examples would be: added author, alternate title, subject links, and URI data. + + + BibTemplate OPAC templating – Any field from any version of a record that Evergreen can deliver, with or without embedded holdings, + is now available for display using a simple template language which is further extended with basic JavaScript. + + Template customization is now supported that allows specific data fields to be pulled from the MARC and displayed in the OPAC. + Examples would be: added author, alternate title, subject links, and URI data. + + + Located URIs – Adding an 856$9 containing the short name of a location will restrict search and display of entirely electronic records + (those with no physical copies) to the location named. + + In other words, the ability to restrict record visibility to a specific location or set of + locations in the same way as copies but without creating dummies. + Since there is no physical location, however, this does affect advanced searches wherein the shelving location limiter is used. + (improved instructions in the read me files and relaxed database constraints) + + + SRU(search/retrieval via url) and Z39.50 searches can now be scoped to specific locations.Z39.50 + + As of Evergreen 1.6, you can append an optional organization unit shortname for search scoping purposes, and you + can also append /holdings if you want to expose the holdings for any returned records. So your zurl could be + http://dev.gapines.org/opac/extras/sru/BR1/holdings to limit the search scope to BR1 and its children, and to expose its holdings. + + + As a benefit of the URI work, Z39.50 now supports a holdings record format. + Improvements in Fixed Field handling within the MARC Editor. + Staff-placed holds for patrons follow patron settings more closely (no longer pull notification preferences from staff settings) – + Patch from Jeff Godin of TADL. + Improved default configuration for LoC Z39.50 target - added support for required truncation specific to LoC. + Added a new default indexing definition for all subjects which will return more results when subject searching in the OPAC. + Many new server configuration interfaces for functions such as circulation policies, hold policies, and notifications. + Added time granularity display to Patron Items Out screen in the Staff Client. Due time now displays along with due date. + Added RefWorks (online bibliographic management program) export capability.RefWorks + Zotero compatability improvements (MODS namespacing). + Zotero + For more information on MODS, see this page. + MODS + + Ability to import holdings via the standard Record Importer (Vandelay).Vandelay + Google Book Preview support as added-content + Improvements made to cloned patron search; fixing issues with records not returning due to cloned fields. + Acquisitions Preview includes a sneak peek at the preliminary work for manual funding management, PO creation, cataloging and receiving processes. + These are functional but are not intended for insertion into current workflows. This feature was specifically included to solicit feedback from + the community on this important feature. + + + + + New features (server/administration) + + Event Triggers – An entirely new subsystem for automatically running arbitrary, user-defined reaction code when presented with an ILS event + defined by the user. Notifications, delayed actions, acquisitions, and many other systems will make use of this new infrastructure. + + Ability to set pre-due and overdue e-mail notices from the Staff Client. + Auto-marking items as lost after specific overdue period. + Makes it easier to add new data to notices. + Can be used for generating and creating delays for the sending of hold pickup notices. + These settings are configurable from the Staff Client per branch or globally. + + + Formal support for Postgresql 8.3. + Dojo profile build specific to Evergreen, increasing load speed dramatically for the OPAC and Staff Clients. + Staff Client interfaces for defining circulation and hold policies from the Admin menu. + + Please note that this represents a change from previous versions of Evergreen and for new clients it is recommended to + use this interface, for. + + + Formal support for IE8, including a bug fix where titles with the “@” symbol would display as a http link. + Spaces in user names are being deprecated as they can cause authentication failure -CamelCase will be supported from this point forward. + Supercat: added support for returning records in Federal Geographic Data Committee (FGDC) Content Standard for + Digital Geospatial Metadata (CSDGM) format.Digital Geospatial Metadata (CSDGM) + Increased the re-shelving-complete process speed; making the flipping process from re-shelving to available much faster – + on suggestion from Bill Ott of GRPL. + Reporter fix to the display of ISBN and ISSN in some reports, and in some environments (environments which had newer versions + of Perl database drivers that affected some reports). + Bug fixes for Server Administration interfaces such as hours of operation, and generally improving speed of all the SA interfaces. + Removed Spanish translation set from the build environment as no Spanish translation has been contributed to date. + Internationalization improvements in the default skin; there are less English-only strings. + Improved output handling for unAPI services; important for popular add-ons like Zotero. + Improved handling of day-granular circulations, and their interaction with penalties – i.e. For a 7 day + circulating item that is checked out at 9am on Sunday, it is not due until closing on the following Saturday.. + Evergreen will notify that printer setups need to be checked at Staff Client upgrade time. + + + + diff --git a/media/1.png b/media/1.png new file mode 100755 index 0000000000..7d473430b7 Binary files /dev/null and b/media/1.png differ diff --git a/media/10.png b/media/10.png new file mode 100755 index 0000000000..997bbc8246 Binary files /dev/null and b/media/10.png differ diff --git a/media/11.png b/media/11.png new file mode 100755 index 0000000000..ce47dac3f5 Binary files /dev/null and b/media/11.png differ diff --git a/media/12.png b/media/12.png new file mode 100755 index 0000000000..31daf4e2f2 Binary files /dev/null and b/media/12.png differ diff --git a/media/13.png b/media/13.png new file mode 100755 index 0000000000..14021a89c2 Binary files /dev/null and b/media/13.png differ diff --git a/media/14.png b/media/14.png new file mode 100755 index 0000000000..64014b75fe Binary files /dev/null and b/media/14.png differ diff --git a/media/15.png b/media/15.png new file mode 100755 index 0000000000..0d65765fcf Binary files /dev/null and b/media/15.png differ diff --git a/media/2.png b/media/2.png new file mode 100755 index 0000000000..5d09341b2f Binary files /dev/null and b/media/2.png differ diff --git a/media/3.png b/media/3.png new file mode 100755 index 0000000000..ef7b700471 Binary files /dev/null and b/media/3.png differ diff --git a/media/4.png b/media/4.png new file mode 100755 index 0000000000..adb8364eb5 Binary files /dev/null and b/media/4.png differ diff --git a/media/5.png b/media/5.png new file mode 100755 index 0000000000..4d7eb46002 Binary files /dev/null and b/media/5.png differ diff --git a/media/6.png b/media/6.png new file mode 100755 index 0000000000..0ba694af6c Binary files /dev/null and b/media/6.png differ diff --git a/media/7.png b/media/7.png new file mode 100755 index 0000000000..472e96f8ac Binary files /dev/null and b/media/7.png differ diff --git a/media/8.png b/media/8.png new file mode 100755 index 0000000000..5e60973c21 Binary files /dev/null and b/media/8.png differ diff --git a/media/9.png b/media/9.png new file mode 100755 index 0000000000..a0676d26cc Binary files /dev/null and b/media/9.png differ diff --git a/media/add_holdings-1.png b/media/add_holdings-1.png new file mode 100755 index 0000000000..07baaa0192 Binary files /dev/null and b/media/add_holdings-1.png differ diff --git a/media/add_holdings-2.png b/media/add_holdings-2.png new file mode 100755 index 0000000000..4176df14ef Binary files /dev/null and b/media/add_holdings-2.png differ diff --git a/media/add_holdings-3.png b/media/add_holdings-3.png new file mode 100755 index 0000000000..a847eb6afc Binary files /dev/null and b/media/add_holdings-3.png differ diff --git a/media/add_holdings-4.png b/media/add_holdings-4.png new file mode 100755 index 0000000000..6359f1d0f1 Binary files /dev/null and b/media/add_holdings-4.png differ diff --git a/media/add_holdings-5.png b/media/add_holdings-5.png new file mode 100755 index 0000000000..3a25250aec Binary files /dev/null and b/media/add_holdings-5.png differ diff --git a/media/bills-1.png b/media/bills-1.png new file mode 100755 index 0000000000..aca68919ed Binary files /dev/null and b/media/bills-1.png differ diff --git a/media/bills-10.png b/media/bills-10.png new file mode 100755 index 0000000000..1a9b1353e3 Binary files /dev/null and b/media/bills-10.png differ diff --git a/media/bills-11.png b/media/bills-11.png new file mode 100755 index 0000000000..5e6eec9df9 Binary files /dev/null and b/media/bills-11.png differ diff --git a/media/bills-12.png b/media/bills-12.png new file mode 100755 index 0000000000..2671a2a279 Binary files /dev/null and b/media/bills-12.png differ diff --git a/media/bills-13.png b/media/bills-13.png new file mode 100755 index 0000000000..c6043204b2 Binary files /dev/null and b/media/bills-13.png differ diff --git a/media/bills-14.png b/media/bills-14.png new file mode 100755 index 0000000000..9ef43d2657 Binary files /dev/null and b/media/bills-14.png differ diff --git a/media/bills-15.png b/media/bills-15.png new file mode 100755 index 0000000000..e176d43ddf Binary files /dev/null and b/media/bills-15.png differ diff --git a/media/bills-16.png b/media/bills-16.png new file mode 100755 index 0000000000..2b4b29f901 Binary files /dev/null and b/media/bills-16.png differ diff --git a/media/bills-17.png b/media/bills-17.png new file mode 100755 index 0000000000..fff134b035 Binary files /dev/null and b/media/bills-17.png differ diff --git a/media/bills-18.png b/media/bills-18.png new file mode 100755 index 0000000000..f38bec473e Binary files /dev/null and b/media/bills-18.png differ diff --git a/media/bills-19.png b/media/bills-19.png new file mode 100755 index 0000000000..cf455f2b92 Binary files /dev/null and b/media/bills-19.png differ diff --git a/media/bills-2.png b/media/bills-2.png new file mode 100755 index 0000000000..242ff2db11 Binary files /dev/null and b/media/bills-2.png differ diff --git a/media/bills-20.png b/media/bills-20.png new file mode 100755 index 0000000000..ca4b84c3d0 Binary files /dev/null and b/media/bills-20.png differ diff --git a/media/bills-3.png b/media/bills-3.png new file mode 100755 index 0000000000..ac194f860f Binary files /dev/null and b/media/bills-3.png differ diff --git a/media/bills-4.png b/media/bills-4.png new file mode 100755 index 0000000000..74e2d7250b Binary files /dev/null and b/media/bills-4.png differ diff --git a/media/bills-5.png b/media/bills-5.png new file mode 100755 index 0000000000..ac4c9917b2 Binary files /dev/null and b/media/bills-5.png differ diff --git a/media/bills-6.png b/media/bills-6.png new file mode 100755 index 0000000000..4be2f89a69 Binary files /dev/null and b/media/bills-6.png differ diff --git a/media/bills-7.png b/media/bills-7.png new file mode 100755 index 0000000000..2d7b5b0d11 Binary files /dev/null and b/media/bills-7.png differ diff --git a/media/bills-8.png b/media/bills-8.png new file mode 100755 index 0000000000..bbcb905e7a Binary files /dev/null and b/media/bills-8.png differ diff --git a/media/bills-9.png b/media/bills-9.png new file mode 100755 index 0000000000..edbb56605b Binary files /dev/null and b/media/bills-9.png differ diff --git a/media/catalogue-10.png b/media/catalogue-10.png new file mode 100755 index 0000000000..41c3be1a64 Binary files /dev/null and b/media/catalogue-10.png differ diff --git a/media/catalogue-11.png b/media/catalogue-11.png new file mode 100755 index 0000000000..d51f45bf70 Binary files /dev/null and b/media/catalogue-11.png differ diff --git a/media/catalogue-3.png b/media/catalogue-3.png new file mode 100755 index 0000000000..f8080a9085 Binary files /dev/null and b/media/catalogue-3.png differ diff --git a/media/catalogue-4.png b/media/catalogue-4.png new file mode 100755 index 0000000000..17352789eb Binary files /dev/null and b/media/catalogue-4.png differ diff --git a/media/catalogue-5.png b/media/catalogue-5.png new file mode 100755 index 0000000000..2f5e5ea562 Binary files /dev/null and b/media/catalogue-5.png differ diff --git a/media/catalogue-6.png b/media/catalogue-6.png new file mode 100755 index 0000000000..9ed436228d Binary files /dev/null and b/media/catalogue-6.png differ diff --git a/media/catalogue-7.png b/media/catalogue-7.png new file mode 100755 index 0000000000..4aaa0c27e6 Binary files /dev/null and b/media/catalogue-7.png differ diff --git a/media/catalogue-8.png b/media/catalogue-8.png new file mode 100755 index 0000000000..1a952ebb33 Binary files /dev/null and b/media/catalogue-8.png differ diff --git a/media/catalogue-9.png b/media/catalogue-9.png new file mode 100755 index 0000000000..a32192628b Binary files /dev/null and b/media/catalogue-9.png differ diff --git a/media/caution.png b/media/caution.png new file mode 100755 index 0000000000..cdc6568091 Binary files /dev/null and b/media/caution.png differ diff --git a/media/circulation-1.png b/media/circulation-1.png new file mode 100755 index 0000000000..01d1b0748f Binary files /dev/null and b/media/circulation-1.png differ diff --git a/media/circulation-10.png b/media/circulation-10.png new file mode 100755 index 0000000000..bc15935fc1 Binary files /dev/null and b/media/circulation-10.png differ diff --git a/media/circulation-11.png b/media/circulation-11.png new file mode 100755 index 0000000000..9fad77c5a6 Binary files /dev/null and b/media/circulation-11.png differ diff --git a/media/circulation-12.png b/media/circulation-12.png new file mode 100755 index 0000000000..d43881fca8 Binary files /dev/null and b/media/circulation-12.png differ diff --git a/media/circulation-13.png b/media/circulation-13.png new file mode 100755 index 0000000000..ba6edf5a1d Binary files /dev/null and b/media/circulation-13.png differ diff --git a/media/circulation-14.png b/media/circulation-14.png new file mode 100755 index 0000000000..1af7e6acf8 Binary files /dev/null and b/media/circulation-14.png differ diff --git a/media/circulation-15.png b/media/circulation-15.png new file mode 100755 index 0000000000..35484a3768 Binary files /dev/null and b/media/circulation-15.png differ diff --git a/media/circulation-16.png b/media/circulation-16.png new file mode 100755 index 0000000000..a95c5117ba Binary files /dev/null and b/media/circulation-16.png differ diff --git a/media/circulation-17.png b/media/circulation-17.png new file mode 100755 index 0000000000..bb66c3c2aa Binary files /dev/null and b/media/circulation-17.png differ diff --git a/media/circulation-18.png b/media/circulation-18.png new file mode 100755 index 0000000000..78b474565d Binary files /dev/null and b/media/circulation-18.png differ diff --git a/media/circulation-19.png b/media/circulation-19.png new file mode 100755 index 0000000000..0118b0076b Binary files /dev/null and b/media/circulation-19.png differ diff --git a/media/circulation-2.png b/media/circulation-2.png new file mode 100755 index 0000000000..077835dc64 Binary files /dev/null and b/media/circulation-2.png differ diff --git a/media/circulation-20.png b/media/circulation-20.png new file mode 100755 index 0000000000..d1ed93616c Binary files /dev/null and b/media/circulation-20.png differ diff --git a/media/circulation-21.png b/media/circulation-21.png new file mode 100755 index 0000000000..029c48b26d Binary files /dev/null and b/media/circulation-21.png differ diff --git a/media/circulation-22.png b/media/circulation-22.png new file mode 100755 index 0000000000..0463348da7 Binary files /dev/null and b/media/circulation-22.png differ diff --git a/media/circulation-23.png b/media/circulation-23.png new file mode 100755 index 0000000000..0a6f10cae3 Binary files /dev/null and b/media/circulation-23.png differ diff --git a/media/circulation-24.png b/media/circulation-24.png new file mode 100755 index 0000000000..315125220b Binary files /dev/null and b/media/circulation-24.png differ diff --git a/media/circulation-25.png b/media/circulation-25.png new file mode 100755 index 0000000000..afd49ff7ec Binary files /dev/null and b/media/circulation-25.png differ diff --git a/media/circulation-26.png b/media/circulation-26.png new file mode 100755 index 0000000000..b116445602 Binary files /dev/null and b/media/circulation-26.png differ diff --git a/media/circulation-27.png b/media/circulation-27.png new file mode 100755 index 0000000000..2f0455ad06 Binary files /dev/null and b/media/circulation-27.png differ diff --git a/media/circulation-28.png b/media/circulation-28.png new file mode 100755 index 0000000000..ddac7ec62d Binary files /dev/null and b/media/circulation-28.png differ diff --git a/media/circulation-29.png b/media/circulation-29.png new file mode 100755 index 0000000000..af3d586af1 Binary files /dev/null and b/media/circulation-29.png differ diff --git a/media/circulation-3.png b/media/circulation-3.png new file mode 100755 index 0000000000..0a75f0a7ee Binary files /dev/null and b/media/circulation-3.png differ diff --git a/media/circulation-30.png b/media/circulation-30.png new file mode 100755 index 0000000000..13830c8d6e Binary files /dev/null and b/media/circulation-30.png differ diff --git a/media/circulation-31.png b/media/circulation-31.png new file mode 100755 index 0000000000..b2f1f1328a Binary files /dev/null and b/media/circulation-31.png differ diff --git a/media/circulation-32.png b/media/circulation-32.png new file mode 100755 index 0000000000..1dffe813ff Binary files /dev/null and b/media/circulation-32.png differ diff --git a/media/circulation-33.png b/media/circulation-33.png new file mode 100755 index 0000000000..367adfbfc2 Binary files /dev/null and b/media/circulation-33.png differ diff --git a/media/circulation-34.png b/media/circulation-34.png new file mode 100755 index 0000000000..5be2e2da9d Binary files /dev/null and b/media/circulation-34.png differ diff --git a/media/circulation-35.png b/media/circulation-35.png new file mode 100755 index 0000000000..b3b918b964 Binary files /dev/null and b/media/circulation-35.png differ diff --git a/media/circulation-36.png b/media/circulation-36.png new file mode 100755 index 0000000000..35b1e606c1 Binary files /dev/null and b/media/circulation-36.png differ diff --git a/media/circulation-4.png b/media/circulation-4.png new file mode 100755 index 0000000000..b92ecbcbf8 Binary files /dev/null and b/media/circulation-4.png differ diff --git a/media/circulation-5.png b/media/circulation-5.png new file mode 100755 index 0000000000..898c871a41 Binary files /dev/null and b/media/circulation-5.png differ diff --git a/media/circulation-6.png b/media/circulation-6.png new file mode 100755 index 0000000000..6df9eb98b4 Binary files /dev/null and b/media/circulation-6.png differ diff --git a/media/circulation-7.png b/media/circulation-7.png new file mode 100755 index 0000000000..79987dfb7d Binary files /dev/null and b/media/circulation-7.png differ diff --git a/media/circulation-8.png b/media/circulation-8.png new file mode 100755 index 0000000000..7c624e271d Binary files /dev/null and b/media/circulation-8.png differ diff --git a/media/circulation-9.png b/media/circulation-9.png new file mode 100755 index 0000000000..49eae35b4e Binary files /dev/null and b/media/circulation-9.png differ diff --git a/media/create-template-1.png b/media/create-template-1.png new file mode 100755 index 0000000000..0358768eb8 Binary files /dev/null and b/media/create-template-1.png differ diff --git a/media/create-template-10.png b/media/create-template-10.png new file mode 100755 index 0000000000..12deb5ce9b Binary files /dev/null and b/media/create-template-10.png differ diff --git a/media/create-template-11.png b/media/create-template-11.png new file mode 100755 index 0000000000..003b05bc8d Binary files /dev/null and b/media/create-template-11.png differ diff --git a/media/create-template-12.png b/media/create-template-12.png new file mode 100755 index 0000000000..fe4d999663 Binary files /dev/null and b/media/create-template-12.png differ diff --git a/media/create-template-13.png b/media/create-template-13.png new file mode 100755 index 0000000000..0831126d09 Binary files /dev/null and b/media/create-template-13.png differ diff --git a/media/create-template-15.png b/media/create-template-15.png new file mode 100755 index 0000000000..19734c337a Binary files /dev/null and b/media/create-template-15.png differ diff --git a/media/create-template-16.png b/media/create-template-16.png new file mode 100755 index 0000000000..71665a0ffb Binary files /dev/null and b/media/create-template-16.png differ diff --git a/media/create-template-17.png b/media/create-template-17.png new file mode 100755 index 0000000000..0a6308483d Binary files /dev/null and b/media/create-template-17.png differ diff --git a/media/create-template-19.png b/media/create-template-19.png new file mode 100755 index 0000000000..a62b2825f8 Binary files /dev/null and b/media/create-template-19.png differ diff --git a/media/create-template-2.png b/media/create-template-2.png new file mode 100755 index 0000000000..20466a6723 Binary files /dev/null and b/media/create-template-2.png differ diff --git a/media/create-template-20.png b/media/create-template-20.png new file mode 100755 index 0000000000..d4beb2bd28 Binary files /dev/null and b/media/create-template-20.png differ diff --git a/media/create-template-21.png b/media/create-template-21.png new file mode 100755 index 0000000000..e2cb2f9ade Binary files /dev/null and b/media/create-template-21.png differ diff --git a/media/create-template-22.png b/media/create-template-22.png new file mode 100755 index 0000000000..b7f8532bf7 Binary files /dev/null and b/media/create-template-22.png differ diff --git a/media/create-template-23.png b/media/create-template-23.png new file mode 100755 index 0000000000..03de846b1a Binary files /dev/null and b/media/create-template-23.png differ diff --git a/media/create-template-24.png b/media/create-template-24.png new file mode 100755 index 0000000000..ef381f6934 Binary files /dev/null and b/media/create-template-24.png differ diff --git a/media/create-template-25.png b/media/create-template-25.png new file mode 100755 index 0000000000..88d2a17a59 Binary files /dev/null and b/media/create-template-25.png differ diff --git a/media/create-template-26.png b/media/create-template-26.png new file mode 100755 index 0000000000..b6816c88e2 Binary files /dev/null and b/media/create-template-26.png differ diff --git a/media/create-template-27.png b/media/create-template-27.png new file mode 100755 index 0000000000..ac60c901a3 Binary files /dev/null and b/media/create-template-27.png differ diff --git a/media/create-template-28.png b/media/create-template-28.png new file mode 100755 index 0000000000..69d6cf1c26 Binary files /dev/null and b/media/create-template-28.png differ diff --git a/media/create-template-29.png b/media/create-template-29.png new file mode 100755 index 0000000000..1dcb26094f Binary files /dev/null and b/media/create-template-29.png differ diff --git a/media/create-template-3.png b/media/create-template-3.png new file mode 100755 index 0000000000..d2bf614be4 Binary files /dev/null and b/media/create-template-3.png differ diff --git a/media/create-template-30.png b/media/create-template-30.png new file mode 100755 index 0000000000..9421cb5f78 Binary files /dev/null and b/media/create-template-30.png differ diff --git a/media/create-template-31.png b/media/create-template-31.png new file mode 100755 index 0000000000..3a07d05822 Binary files /dev/null and b/media/create-template-31.png differ diff --git a/media/create-template-32.png b/media/create-template-32.png new file mode 100755 index 0000000000..3150321434 Binary files /dev/null and b/media/create-template-32.png differ diff --git a/media/create-template-33.png b/media/create-template-33.png new file mode 100755 index 0000000000..8d2bd373c4 Binary files /dev/null and b/media/create-template-33.png differ diff --git a/media/create-template-34.png b/media/create-template-34.png new file mode 100755 index 0000000000..8d7069357d Binary files /dev/null and b/media/create-template-34.png differ diff --git a/media/create-template-35.png b/media/create-template-35.png new file mode 100755 index 0000000000..7bc9025d50 Binary files /dev/null and b/media/create-template-35.png differ diff --git a/media/create-template-4.png b/media/create-template-4.png new file mode 100755 index 0000000000..b6d7201afc Binary files /dev/null and b/media/create-template-4.png differ diff --git a/media/create-template-5.png b/media/create-template-5.png new file mode 100755 index 0000000000..d24ad3c233 Binary files /dev/null and b/media/create-template-5.png differ diff --git a/media/create-template-6.png b/media/create-template-6.png new file mode 100755 index 0000000000..47fd843b46 Binary files /dev/null and b/media/create-template-6.png differ diff --git a/media/create-template-7.png b/media/create-template-7.png new file mode 100755 index 0000000000..8803035b01 Binary files /dev/null and b/media/create-template-7.png differ diff --git a/media/create-template-8.png b/media/create-template-8.png new file mode 100755 index 0000000000..8c46199336 Binary files /dev/null and b/media/create-template-8.png differ diff --git a/media/create-template-9.png b/media/create-template-9.png new file mode 100755 index 0000000000..49fc2ef426 Binary files /dev/null and b/media/create-template-9.png differ diff --git a/media/evergreen_logo.gif b/media/evergreen_logo.gif new file mode 100755 index 0000000000..c7c79111c5 Binary files /dev/null and b/media/evergreen_logo.gif differ diff --git a/media/folder-1.png b/media/folder-1.png new file mode 100755 index 0000000000..0e24910efb Binary files /dev/null and b/media/folder-1.png differ diff --git a/media/folder-10.png b/media/folder-10.png new file mode 100755 index 0000000000..7b5acd9198 Binary files /dev/null and b/media/folder-10.png differ diff --git a/media/folder-11.png b/media/folder-11.png new file mode 100755 index 0000000000..e358551745 Binary files /dev/null and b/media/folder-11.png differ diff --git a/media/folder-12.png b/media/folder-12.png new file mode 100755 index 0000000000..6a5f98fab8 Binary files /dev/null and b/media/folder-12.png differ diff --git a/media/folder-13.png b/media/folder-13.png new file mode 100755 index 0000000000..62ecd43fc9 Binary files /dev/null and b/media/folder-13.png differ diff --git a/media/folder-14.png b/media/folder-14.png new file mode 100755 index 0000000000..f7ff979d4a Binary files /dev/null and b/media/folder-14.png differ diff --git a/media/folder-7a.png b/media/folder-7a.png new file mode 100755 index 0000000000..cadf59fd2f Binary files /dev/null and b/media/folder-7a.png differ diff --git a/media/generate-report-1.png b/media/generate-report-1.png new file mode 100755 index 0000000000..a208d89e9e Binary files /dev/null and b/media/generate-report-1.png differ diff --git a/media/generate-report-10.png b/media/generate-report-10.png new file mode 100755 index 0000000000..9980b92096 Binary files /dev/null and b/media/generate-report-10.png differ diff --git a/media/generate-report-14.png b/media/generate-report-14.png new file mode 100755 index 0000000000..e6846b560a Binary files /dev/null and b/media/generate-report-14.png differ diff --git a/media/generate-report-2.png b/media/generate-report-2.png new file mode 100755 index 0000000000..8ba8a9773d Binary files /dev/null and b/media/generate-report-2.png differ diff --git a/media/generate-report-3.png b/media/generate-report-3.png new file mode 100755 index 0000000000..e5cdfdb3ae Binary files /dev/null and b/media/generate-report-3.png differ diff --git a/media/generate-report-8.png b/media/generate-report-8.png new file mode 100755 index 0000000000..72a700271c Binary files /dev/null and b/media/generate-report-8.png differ diff --git a/media/generate-report-9.png b/media/generate-report-9.png new file mode 100755 index 0000000000..5c6aa4468f Binary files /dev/null and b/media/generate-report-9.png differ diff --git a/media/hold-1.png b/media/hold-1.png new file mode 100755 index 0000000000..18dbf6c59e Binary files /dev/null and b/media/hold-1.png differ diff --git a/media/hold-10.png b/media/hold-10.png new file mode 100755 index 0000000000..39744442d1 Binary files /dev/null and b/media/hold-10.png differ diff --git a/media/hold-11.png b/media/hold-11.png new file mode 100755 index 0000000000..c20be3aad1 Binary files /dev/null and b/media/hold-11.png differ diff --git a/media/hold-12.png b/media/hold-12.png new file mode 100755 index 0000000000..012409912f Binary files /dev/null and b/media/hold-12.png differ diff --git a/media/hold-14.png b/media/hold-14.png new file mode 100755 index 0000000000..fe211fd0e1 Binary files /dev/null and b/media/hold-14.png differ diff --git a/media/hold-15.png b/media/hold-15.png new file mode 100755 index 0000000000..37dbaedcdf Binary files /dev/null and b/media/hold-15.png differ diff --git a/media/hold-16.png b/media/hold-16.png new file mode 100755 index 0000000000..235b0886ae Binary files /dev/null and b/media/hold-16.png differ diff --git a/media/hold-17.png b/media/hold-17.png new file mode 100755 index 0000000000..569a274287 Binary files /dev/null and b/media/hold-17.png differ diff --git a/media/hold-18.png b/media/hold-18.png new file mode 100755 index 0000000000..58147bf78f Binary files /dev/null and b/media/hold-18.png differ diff --git a/media/hold-19.png b/media/hold-19.png new file mode 100755 index 0000000000..86ffac89dd Binary files /dev/null and b/media/hold-19.png differ diff --git a/media/hold-2.png b/media/hold-2.png new file mode 100755 index 0000000000..b9968a97c5 Binary files /dev/null and b/media/hold-2.png differ diff --git a/media/hold-20.png b/media/hold-20.png new file mode 100755 index 0000000000..3aeb8f93db Binary files /dev/null and b/media/hold-20.png differ diff --git a/media/hold-21.png b/media/hold-21.png new file mode 100755 index 0000000000..bb1422cee8 Binary files /dev/null and b/media/hold-21.png differ diff --git a/media/hold-22.png b/media/hold-22.png new file mode 100755 index 0000000000..cc9050177b Binary files /dev/null and b/media/hold-22.png differ diff --git a/media/hold-23.png b/media/hold-23.png new file mode 100755 index 0000000000..e08d9bdf27 Binary files /dev/null and b/media/hold-23.png differ diff --git a/media/hold-24.png b/media/hold-24.png new file mode 100755 index 0000000000..69d78aa256 Binary files /dev/null and b/media/hold-24.png differ diff --git a/media/hold-25.png b/media/hold-25.png new file mode 100755 index 0000000000..8df926061d Binary files /dev/null and b/media/hold-25.png differ diff --git a/media/hold-26.png b/media/hold-26.png new file mode 100755 index 0000000000..73f26f1251 Binary files /dev/null and b/media/hold-26.png differ diff --git a/media/hold-27.png b/media/hold-27.png new file mode 100755 index 0000000000..7b57b8899e Binary files /dev/null and b/media/hold-27.png differ diff --git a/media/hold-28.png b/media/hold-28.png new file mode 100755 index 0000000000..f569003995 Binary files /dev/null and b/media/hold-28.png differ diff --git a/media/hold-29.png b/media/hold-29.png new file mode 100755 index 0000000000..b0d265786f Binary files /dev/null and b/media/hold-29.png differ diff --git a/media/hold-4.png b/media/hold-4.png new file mode 100755 index 0000000000..79e8a419eb Binary files /dev/null and b/media/hold-4.png differ diff --git a/media/hold-5.png b/media/hold-5.png new file mode 100755 index 0000000000..3038e93b3d Binary files /dev/null and b/media/hold-5.png differ diff --git a/media/hold-6.png b/media/hold-6.png new file mode 100755 index 0000000000..d57e25d6e0 Binary files /dev/null and b/media/hold-6.png differ diff --git a/media/hold-7.png b/media/hold-7.png new file mode 100755 index 0000000000..494d5fe5cf Binary files /dev/null and b/media/hold-7.png differ diff --git a/media/hold-8.png b/media/hold-8.png new file mode 100755 index 0000000000..780fd2a7d6 Binary files /dev/null and b/media/hold-8.png differ diff --git a/media/hold-9.png b/media/hold-9.png new file mode 100755 index 0000000000..2b2ce2b52a Binary files /dev/null and b/media/hold-9.png differ diff --git a/media/k_book_record.png b/media/k_book_record.png new file mode 100755 index 0000000000..e41a886706 Binary files /dev/null and b/media/k_book_record.png differ diff --git a/media/lsa-1.png b/media/lsa-1.png new file mode 100755 index 0000000000..eee8707b4c Binary files /dev/null and b/media/lsa-1.png differ diff --git a/media/lsa-10.jpg b/media/lsa-10.jpg new file mode 100755 index 0000000000..7c578e03b1 Binary files /dev/null and b/media/lsa-10.jpg differ diff --git a/media/lsa-11.jpg b/media/lsa-11.jpg new file mode 100755 index 0000000000..4df7484298 Binary files /dev/null and b/media/lsa-11.jpg differ diff --git a/media/lsa-12.jpg b/media/lsa-12.jpg new file mode 100755 index 0000000000..c1c550546d Binary files /dev/null and b/media/lsa-12.jpg differ diff --git a/media/lsa-14.jpg b/media/lsa-14.jpg new file mode 100755 index 0000000000..bdf842c60a Binary files /dev/null and b/media/lsa-14.jpg differ diff --git a/media/lsa-16.jpg b/media/lsa-16.jpg new file mode 100755 index 0000000000..90fdca61a8 Binary files /dev/null and b/media/lsa-16.jpg differ diff --git a/media/lsa-17.jpg b/media/lsa-17.jpg new file mode 100755 index 0000000000..a08b590caf Binary files /dev/null and b/media/lsa-17.jpg differ diff --git a/media/lsa-18.jpg b/media/lsa-18.jpg new file mode 100755 index 0000000000..a3710530e7 Binary files /dev/null and b/media/lsa-18.jpg differ diff --git a/media/lsa-2.jpg b/media/lsa-2.jpg new file mode 100755 index 0000000000..2cdd562075 Binary files /dev/null and b/media/lsa-2.jpg differ diff --git a/media/lsa-22.png b/media/lsa-22.png new file mode 100755 index 0000000000..b3f55dfe0f Binary files /dev/null and b/media/lsa-22.png differ diff --git a/media/lsa-23.jpg b/media/lsa-23.jpg new file mode 100755 index 0000000000..9fbdf96ba1 Binary files /dev/null and b/media/lsa-23.jpg differ diff --git a/media/lsa-25.jpg b/media/lsa-25.jpg new file mode 100755 index 0000000000..2cbb735295 Binary files /dev/null and b/media/lsa-25.jpg differ diff --git a/media/lsa-26.jpg b/media/lsa-26.jpg new file mode 100755 index 0000000000..9b1575c1fd Binary files /dev/null and b/media/lsa-26.jpg differ diff --git a/media/lsa-27.jpg b/media/lsa-27.jpg new file mode 100755 index 0000000000..36a024c049 Binary files /dev/null and b/media/lsa-27.jpg differ diff --git a/media/lsa-28.jpg b/media/lsa-28.jpg new file mode 100755 index 0000000000..ccf0b1a705 Binary files /dev/null and b/media/lsa-28.jpg differ diff --git a/media/lsa-32.jpg b/media/lsa-32.jpg new file mode 100755 index 0000000000..bf03d62108 Binary files /dev/null and b/media/lsa-32.jpg differ diff --git a/media/lsa-33.jpg b/media/lsa-33.jpg new file mode 100755 index 0000000000..2a211fb686 Binary files /dev/null and b/media/lsa-33.jpg differ diff --git a/media/lsa-4.jpg b/media/lsa-4.jpg new file mode 100755 index 0000000000..0406e4afda Binary files /dev/null and b/media/lsa-4.jpg differ diff --git a/media/lsa-5.jpg b/media/lsa-5.jpg new file mode 100755 index 0000000000..da0e056bce Binary files /dev/null and b/media/lsa-5.jpg differ diff --git a/media/lsa-7.jpg b/media/lsa-7.jpg new file mode 100755 index 0000000000..6544913195 Binary files /dev/null and b/media/lsa-7.jpg differ diff --git a/media/lsa-8.jpg b/media/lsa-8.jpg new file mode 100755 index 0000000000..4de9cf445e Binary files /dev/null and b/media/lsa-8.jpg differ diff --git a/media/lsa-closed-mountain-1.png b/media/lsa-closed-mountain-1.png new file mode 100755 index 0000000000..b7eb2c68b8 Binary files /dev/null and b/media/lsa-closed-mountain-1.png differ diff --git a/media/lsa-closed-mountain-2.png b/media/lsa-closed-mountain-2.png new file mode 100755 index 0000000000..f0b1036d69 Binary files /dev/null and b/media/lsa-closed-mountain-2.png differ diff --git a/media/lsa-group-0.png b/media/lsa-group-0.png new file mode 100755 index 0000000000..4d75083ac4 Binary files /dev/null and b/media/lsa-group-0.png differ diff --git a/media/lsa-group-1.png b/media/lsa-group-1.png new file mode 100755 index 0000000000..46a0a0f832 Binary files /dev/null and b/media/lsa-group-1.png differ diff --git a/media/lsa-group-1a.png b/media/lsa-group-1a.png new file mode 100755 index 0000000000..a5f4e93259 Binary files /dev/null and b/media/lsa-group-1a.png differ diff --git a/media/lsa-group-2.png b/media/lsa-group-2.png new file mode 100755 index 0000000000..bd3717313e Binary files /dev/null and b/media/lsa-group-2.png differ diff --git a/media/lsa-group-3.png b/media/lsa-group-3.png new file mode 100755 index 0000000000..328e7333a1 Binary files /dev/null and b/media/lsa-group-3.png differ diff --git a/media/lsa-group-4.png b/media/lsa-group-4.png new file mode 100755 index 0000000000..4e378d3815 Binary files /dev/null and b/media/lsa-group-4.png differ diff --git a/media/lsa-group-5.png b/media/lsa-group-5.png new file mode 100755 index 0000000000..53ee8edd31 Binary files /dev/null and b/media/lsa-group-5.png differ diff --git a/media/lsa-group-6.png b/media/lsa-group-6.png new file mode 100755 index 0000000000..5a17f16547 Binary files /dev/null and b/media/lsa-group-6.png differ diff --git a/media/main_logo.jpg b/media/main_logo.jpg new file mode 100755 index 0000000000..633b7a75f9 Binary files /dev/null and b/media/main_logo.jpg differ diff --git a/media/myaccount-bookbags.png b/media/myaccount-bookbags.png new file mode 100755 index 0000000000..940618fe29 Binary files /dev/null and b/media/myaccount-bookbags.png differ diff --git a/media/myaccount-itemrenew.png b/media/myaccount-itemrenew.png new file mode 100755 index 0000000000..dcbb6760e9 Binary files /dev/null and b/media/myaccount-itemrenew.png differ diff --git a/media/myaccount-itemscheckedout.png b/media/myaccount-itemscheckedout.png new file mode 100755 index 0000000000..4e85822bcf Binary files /dev/null and b/media/myaccount-itemscheckedout.png differ diff --git a/media/myaccount-itemsonhold.png b/media/myaccount-itemsonhold.png new file mode 100755 index 0000000000..4b1d5e3d6b Binary files /dev/null and b/media/myaccount-itemsonhold.png differ diff --git a/media/myaccount-login-arrow.png b/media/myaccount-login-arrow.png new file mode 100755 index 0000000000..9cdcdad299 Binary files /dev/null and b/media/myaccount-login-arrow.png differ diff --git a/media/myaccount-login-info.png b/media/myaccount-login-info.png new file mode 100755 index 0000000000..31343612db Binary files /dev/null and b/media/myaccount-login-info.png differ diff --git a/media/myaccount-login.png b/media/myaccount-login.png new file mode 100755 index 0000000000..180e9397a0 Binary files /dev/null and b/media/myaccount-login.png differ diff --git a/media/myaccount-loginpasswordupdate.png b/media/myaccount-loginpasswordupdate.png new file mode 100755 index 0000000000..e29ea6661b Binary files /dev/null and b/media/myaccount-loginpasswordupdate.png differ diff --git a/media/myaccount-summary.png b/media/myaccount-summary.png new file mode 100755 index 0000000000..1ab86b48a3 Binary files /dev/null and b/media/myaccount-summary.png differ diff --git a/media/note.png b/media/note.png new file mode 100755 index 0000000000..198ada5be4 Binary files /dev/null and b/media/note.png differ diff --git a/media/offline-1.png b/media/offline-1.png new file mode 100755 index 0000000000..f7cad0ccd0 Binary files /dev/null and b/media/offline-1.png differ diff --git a/media/offline-10.png b/media/offline-10.png new file mode 100755 index 0000000000..754f007255 Binary files /dev/null and b/media/offline-10.png differ diff --git a/media/offline-11.png b/media/offline-11.png new file mode 100755 index 0000000000..914da51de0 Binary files /dev/null and b/media/offline-11.png differ diff --git a/media/offline-12.png b/media/offline-12.png new file mode 100755 index 0000000000..66b48cf4e7 Binary files /dev/null and b/media/offline-12.png differ diff --git a/media/offline-13.png b/media/offline-13.png new file mode 100755 index 0000000000..fdee7dd22c Binary files /dev/null and b/media/offline-13.png differ diff --git a/media/offline-14.png b/media/offline-14.png new file mode 100755 index 0000000000..0177657633 Binary files /dev/null and b/media/offline-14.png differ diff --git a/media/offline-15.png b/media/offline-15.png new file mode 100755 index 0000000000..ab5c5d6b1e Binary files /dev/null and b/media/offline-15.png differ diff --git a/media/offline-16.png b/media/offline-16.png new file mode 100755 index 0000000000..cc1e9dd5cd Binary files /dev/null and b/media/offline-16.png differ diff --git a/media/offline-17.png b/media/offline-17.png new file mode 100755 index 0000000000..e895e6fffc Binary files /dev/null and b/media/offline-17.png differ diff --git a/media/offline-18.png b/media/offline-18.png new file mode 100755 index 0000000000..6e1ff210fc Binary files /dev/null and b/media/offline-18.png differ diff --git a/media/offline-19.png b/media/offline-19.png new file mode 100755 index 0000000000..6e26d49f2f Binary files /dev/null and b/media/offline-19.png differ diff --git a/media/offline-2.png b/media/offline-2.png new file mode 100755 index 0000000000..9077658945 Binary files /dev/null and b/media/offline-2.png differ diff --git a/media/offline-20.png b/media/offline-20.png new file mode 100755 index 0000000000..8640d72c63 Binary files /dev/null and b/media/offline-20.png differ diff --git a/media/offline-21.png b/media/offline-21.png new file mode 100755 index 0000000000..356598ab7f Binary files /dev/null and b/media/offline-21.png differ diff --git a/media/offline-22.png b/media/offline-22.png new file mode 100755 index 0000000000..e4b0f82893 Binary files /dev/null and b/media/offline-22.png differ diff --git a/media/offline-23.png b/media/offline-23.png new file mode 100755 index 0000000000..d75427808d Binary files /dev/null and b/media/offline-23.png differ diff --git a/media/offline-24.png b/media/offline-24.png new file mode 100755 index 0000000000..7e3b09094e Binary files /dev/null and b/media/offline-24.png differ diff --git a/media/offline-25.png b/media/offline-25.png new file mode 100755 index 0000000000..bda37a6eed Binary files /dev/null and b/media/offline-25.png differ diff --git a/media/offline-26.png b/media/offline-26.png new file mode 100755 index 0000000000..653bfb4bfd Binary files /dev/null and b/media/offline-26.png differ diff --git a/media/offline-27.png b/media/offline-27.png new file mode 100755 index 0000000000..9c0722b793 Binary files /dev/null and b/media/offline-27.png differ diff --git a/media/offline-28.png b/media/offline-28.png new file mode 100755 index 0000000000..9cad8d870a Binary files /dev/null and b/media/offline-28.png differ diff --git a/media/offline-29.png b/media/offline-29.png new file mode 100755 index 0000000000..73a302c211 Binary files /dev/null and b/media/offline-29.png differ diff --git a/media/offline-3.png b/media/offline-3.png new file mode 100755 index 0000000000..a3d644de41 Binary files /dev/null and b/media/offline-3.png differ diff --git a/media/offline-30.png b/media/offline-30.png new file mode 100755 index 0000000000..06bbb9a111 Binary files /dev/null and b/media/offline-30.png differ diff --git a/media/offline-31.png b/media/offline-31.png new file mode 100755 index 0000000000..6b89ac32d6 Binary files /dev/null and b/media/offline-31.png differ diff --git a/media/offline-32.png b/media/offline-32.png new file mode 100755 index 0000000000..d26187900c Binary files /dev/null and b/media/offline-32.png differ diff --git a/media/offline-33.png b/media/offline-33.png new file mode 100755 index 0000000000..bbf9bb16de Binary files /dev/null and b/media/offline-33.png differ diff --git a/media/offline-34.png b/media/offline-34.png new file mode 100755 index 0000000000..eed6d76a7d Binary files /dev/null and b/media/offline-34.png differ diff --git a/media/offline-35.png b/media/offline-35.png new file mode 100755 index 0000000000..36a3a9affe Binary files /dev/null and b/media/offline-35.png differ diff --git a/media/offline-36.png b/media/offline-36.png new file mode 100755 index 0000000000..1274059012 Binary files /dev/null and b/media/offline-36.png differ diff --git a/media/offline-4.png b/media/offline-4.png new file mode 100755 index 0000000000..d5e7218008 Binary files /dev/null and b/media/offline-4.png differ diff --git a/media/offline-5.png b/media/offline-5.png new file mode 100755 index 0000000000..5641cb4e4b Binary files /dev/null and b/media/offline-5.png differ diff --git a/media/offline-6.png b/media/offline-6.png new file mode 100755 index 0000000000..31531be097 Binary files /dev/null and b/media/offline-6.png differ diff --git a/media/offline-7.png b/media/offline-7.png new file mode 100755 index 0000000000..7d563a46ea Binary files /dev/null and b/media/offline-7.png differ diff --git a/media/offline-8.png b/media/offline-8.png new file mode 100755 index 0000000000..0aeeeea53b Binary files /dev/null and b/media/offline-8.png differ diff --git a/media/offline-9.png b/media/offline-9.png new file mode 100755 index 0000000000..3f23afe3a8 Binary files /dev/null and b/media/offline-9.png differ diff --git a/media/passwordresetmessage.png b/media/passwordresetmessage.png new file mode 100755 index 0000000000..29a9cc6f6a Binary files /dev/null and b/media/passwordresetmessage.png differ diff --git a/media/patron-1.png b/media/patron-1.png new file mode 100755 index 0000000000..94f12126f8 Binary files /dev/null and b/media/patron-1.png differ diff --git a/media/patron-10.png b/media/patron-10.png new file mode 100755 index 0000000000..0814ad9973 Binary files /dev/null and b/media/patron-10.png differ diff --git a/media/patron-11.png b/media/patron-11.png new file mode 100755 index 0000000000..e2e72955c3 Binary files /dev/null and b/media/patron-11.png differ diff --git a/media/patron-12.png b/media/patron-12.png new file mode 100755 index 0000000000..4dfb246ae2 Binary files /dev/null and b/media/patron-12.png differ diff --git a/media/patron-13.png b/media/patron-13.png new file mode 100755 index 0000000000..5dc9cb1ba2 Binary files /dev/null and b/media/patron-13.png differ diff --git a/media/patron-14.png b/media/patron-14.png new file mode 100755 index 0000000000..956d397751 Binary files /dev/null and b/media/patron-14.png differ diff --git a/media/patron-15.png b/media/patron-15.png new file mode 100755 index 0000000000..8d7c4c713d Binary files /dev/null and b/media/patron-15.png differ diff --git a/media/patron-16.png b/media/patron-16.png new file mode 100755 index 0000000000..283c6d7a05 Binary files /dev/null and b/media/patron-16.png differ diff --git a/media/patron-17.png b/media/patron-17.png new file mode 100755 index 0000000000..f3563fad63 Binary files /dev/null and b/media/patron-17.png differ diff --git a/media/patron-18.png b/media/patron-18.png new file mode 100755 index 0000000000..ee4ae07994 Binary files /dev/null and b/media/patron-18.png differ diff --git a/media/patron-19.png b/media/patron-19.png new file mode 100755 index 0000000000..f69846b0f7 Binary files /dev/null and b/media/patron-19.png differ diff --git a/media/patron-2.png b/media/patron-2.png new file mode 100755 index 0000000000..dddd820e8b Binary files /dev/null and b/media/patron-2.png differ diff --git a/media/patron-20.png b/media/patron-20.png new file mode 100755 index 0000000000..24c4b6d8f8 Binary files /dev/null and b/media/patron-20.png differ diff --git a/media/patron-21.png b/media/patron-21.png new file mode 100755 index 0000000000..1f5a65586f Binary files /dev/null and b/media/patron-21.png differ diff --git a/media/patron-22.png b/media/patron-22.png new file mode 100755 index 0000000000..c2d01d8e65 Binary files /dev/null and b/media/patron-22.png differ diff --git a/media/patron-23.png b/media/patron-23.png new file mode 100755 index 0000000000..b4f19a2fca Binary files /dev/null and b/media/patron-23.png differ diff --git a/media/patron-24.png b/media/patron-24.png new file mode 100755 index 0000000000..7b8d7dd558 Binary files /dev/null and b/media/patron-24.png differ diff --git a/media/patron-25.png b/media/patron-25.png new file mode 100755 index 0000000000..780716741d Binary files /dev/null and b/media/patron-25.png differ diff --git a/media/patron-26.png b/media/patron-26.png new file mode 100755 index 0000000000..79b65e341a Binary files /dev/null and b/media/patron-26.png differ diff --git a/media/patron-27.png b/media/patron-27.png new file mode 100755 index 0000000000..b73c9da7bb Binary files /dev/null and b/media/patron-27.png differ diff --git a/media/patron-28.png b/media/patron-28.png new file mode 100755 index 0000000000..421855d3ee Binary files /dev/null and b/media/patron-28.png differ diff --git a/media/patron-29.png b/media/patron-29.png new file mode 100755 index 0000000000..7b70133e9a Binary files /dev/null and b/media/patron-29.png differ diff --git a/media/patron-3.png b/media/patron-3.png new file mode 100755 index 0000000000..24885105ae Binary files /dev/null and b/media/patron-3.png differ diff --git a/media/patron-30.png b/media/patron-30.png new file mode 100755 index 0000000000..055b34308b Binary files /dev/null and b/media/patron-30.png differ diff --git a/media/patron-31.png b/media/patron-31.png new file mode 100755 index 0000000000..5c3f52ed6f Binary files /dev/null and b/media/patron-31.png differ diff --git a/media/patron-32.png b/media/patron-32.png new file mode 100755 index 0000000000..c5bcf386ca Binary files /dev/null and b/media/patron-32.png differ diff --git a/media/patron-3a.png b/media/patron-3a.png new file mode 100755 index 0000000000..24a3c3ea52 Binary files /dev/null and b/media/patron-3a.png differ diff --git a/media/patron-4.png b/media/patron-4.png new file mode 100755 index 0000000000..58a4992986 Binary files /dev/null and b/media/patron-4.png differ diff --git a/media/patron-5.png b/media/patron-5.png new file mode 100755 index 0000000000..9276de00c7 Binary files /dev/null and b/media/patron-5.png differ diff --git a/media/patron-6.png b/media/patron-6.png new file mode 100755 index 0000000000..45f459d1aa Binary files /dev/null and b/media/patron-6.png differ diff --git a/media/patron-7.png b/media/patron-7.png new file mode 100755 index 0000000000..130ba73c72 Binary files /dev/null and b/media/patron-7.png differ diff --git a/media/patron-8.png b/media/patron-8.png new file mode 100755 index 0000000000..c903823877 Binary files /dev/null and b/media/patron-8.png differ diff --git a/media/patron-9.png b/media/patron-9.png new file mode 100755 index 0000000000..0370982749 Binary files /dev/null and b/media/patron-9.png differ diff --git a/media/patron-record-status-1.png b/media/patron-record-status-1.png new file mode 100755 index 0000000000..a631541e14 Binary files /dev/null and b/media/patron-record-status-1.png differ diff --git a/media/patron-record-status-dark-grey.png b/media/patron-record-status-dark-grey.png new file mode 100755 index 0000000000..3896fdd97b Binary files /dev/null and b/media/patron-record-status-dark-grey.png differ diff --git a/media/patron-record-status-green.png b/media/patron-record-status-green.png new file mode 100755 index 0000000000..f50907b0b3 Binary files /dev/null and b/media/patron-record-status-green.png differ diff --git a/media/patron-record-status-light-grey.png b/media/patron-record-status-light-grey.png new file mode 100755 index 0000000000..4c325302df Binary files /dev/null and b/media/patron-record-status-light-grey.png differ diff --git a/media/patron-record-status-orange.png b/media/patron-record-status-orange.png new file mode 100755 index 0000000000..fdc56e13dd Binary files /dev/null and b/media/patron-record-status-orange.png differ diff --git a/media/patron-record-status-purple.png b/media/patron-record-status-purple.png new file mode 100755 index 0000000000..6a204d6d15 Binary files /dev/null and b/media/patron-record-status-purple.png differ diff --git a/media/patron-record-status-red.png b/media/patron-record-status-red.png new file mode 100755 index 0000000000..00d82ce50c Binary files /dev/null and b/media/patron-record-status-red.png differ diff --git a/media/patron-record-status-yellow.png b/media/patron-record-status-yellow.png new file mode 100755 index 0000000000..c2ba407146 Binary files /dev/null and b/media/patron-record-status-yellow.png differ diff --git a/media/pdf_icon.gif b/media/pdf_icon.gif new file mode 100755 index 0000000000..b260bffeca Binary files /dev/null and b/media/pdf_icon.gif differ diff --git a/media/profile-5.png b/media/profile-5.png new file mode 100755 index 0000000000..bdafbca927 Binary files /dev/null and b/media/profile-5.png differ diff --git a/media/profile-6.png b/media/profile-6.png new file mode 100755 index 0000000000..5e3b429aee Binary files /dev/null and b/media/profile-6.png differ diff --git a/media/profile-7.png b/media/profile-7.png new file mode 100755 index 0000000000..26fec660f1 Binary files /dev/null and b/media/profile-7.png differ diff --git a/media/receipt-10.jpg b/media/receipt-10.jpg new file mode 100755 index 0000000000..2788ce317c Binary files /dev/null and b/media/receipt-10.jpg differ diff --git a/media/receipt-11.jpg b/media/receipt-11.jpg new file mode 100755 index 0000000000..e259e0fb3d Binary files /dev/null and b/media/receipt-11.jpg differ diff --git a/media/receipt-12.jpg b/media/receipt-12.jpg new file mode 100755 index 0000000000..d170ec81c3 Binary files /dev/null and b/media/receipt-12.jpg differ diff --git a/media/receipt-13.jpg b/media/receipt-13.jpg new file mode 100755 index 0000000000..be2c6f3d15 Binary files /dev/null and b/media/receipt-13.jpg differ diff --git a/media/receipt-14.jpg b/media/receipt-14.jpg new file mode 100755 index 0000000000..2037725267 Binary files /dev/null and b/media/receipt-14.jpg differ diff --git a/media/receipt-15.jpg b/media/receipt-15.jpg new file mode 100755 index 0000000000..29190dcd84 Binary files /dev/null and b/media/receipt-15.jpg differ diff --git a/media/receipt-16.png b/media/receipt-16.png new file mode 100755 index 0000000000..4407ef85cd Binary files /dev/null and b/media/receipt-16.png differ diff --git a/media/receipt-17.jpg b/media/receipt-17.jpg new file mode 100755 index 0000000000..19a7d76aa8 Binary files /dev/null and b/media/receipt-17.jpg differ diff --git a/media/receipt-18.jpg b/media/receipt-18.jpg new file mode 100755 index 0000000000..017d045fd5 Binary files /dev/null and b/media/receipt-18.jpg differ diff --git a/media/receipt-19.jpg b/media/receipt-19.jpg new file mode 100755 index 0000000000..ce84686e0b Binary files /dev/null and b/media/receipt-19.jpg differ diff --git a/media/receipt-2.jpg b/media/receipt-2.jpg new file mode 100755 index 0000000000..7d0d6f4526 Binary files /dev/null and b/media/receipt-2.jpg differ diff --git a/media/receipt-20.jpg b/media/receipt-20.jpg new file mode 100755 index 0000000000..d83bfcddeb Binary files /dev/null and b/media/receipt-20.jpg differ diff --git a/media/receipt-21.jpg b/media/receipt-21.jpg new file mode 100755 index 0000000000..80c7d4b49d Binary files /dev/null and b/media/receipt-21.jpg differ diff --git a/media/receipt-22.jpg b/media/receipt-22.jpg new file mode 100755 index 0000000000..0c393679e9 Binary files /dev/null and b/media/receipt-22.jpg differ diff --git a/media/receipt-23.jpg b/media/receipt-23.jpg new file mode 100755 index 0000000000..2fca67ec78 Binary files /dev/null and b/media/receipt-23.jpg differ diff --git a/media/receipt-24.jpg b/media/receipt-24.jpg new file mode 100755 index 0000000000..abaf8336ea Binary files /dev/null and b/media/receipt-24.jpg differ diff --git a/media/receipt-3.jpg b/media/receipt-3.jpg new file mode 100755 index 0000000000..f36cc405f4 Binary files /dev/null and b/media/receipt-3.jpg differ diff --git a/media/receipt-4.jpg b/media/receipt-4.jpg new file mode 100755 index 0000000000..a69a63ebb6 Binary files /dev/null and b/media/receipt-4.jpg differ diff --git a/media/receipt-5.jpg b/media/receipt-5.jpg new file mode 100755 index 0000000000..d73c31c5be Binary files /dev/null and b/media/receipt-5.jpg differ diff --git a/media/receipt-6.jpg b/media/receipt-6.jpg new file mode 100755 index 0000000000..170e0205fb Binary files /dev/null and b/media/receipt-6.jpg differ diff --git a/media/receipt-7.jpg b/media/receipt-7.jpg new file mode 100755 index 0000000000..ec59453788 Binary files /dev/null and b/media/receipt-7.jpg differ diff --git a/media/receipt-8.jpg b/media/receipt-8.jpg new file mode 100755 index 0000000000..9c10d3331f Binary files /dev/null and b/media/receipt-8.jpg differ diff --git a/media/receipt-9.jpg b/media/receipt-9.jpg new file mode 100755 index 0000000000..5564e9351f Binary files /dev/null and b/media/receipt-9.jpg differ diff --git a/media/server-3.png b/media/server-3.png new file mode 100755 index 0000000000..f0cfb45a87 Binary files /dev/null and b/media/server-3.png differ diff --git a/media/server-4.png b/media/server-4.png new file mode 100755 index 0000000000..e092f4798c Binary files /dev/null and b/media/server-4.png differ diff --git a/media/server-5.png b/media/server-5.png new file mode 100755 index 0000000000..2fbea3f3de Binary files /dev/null and b/media/server-5.png differ diff --git a/media/server-6.png b/media/server-6.png new file mode 100755 index 0000000000..05b6ed9f0e Binary files /dev/null and b/media/server-6.png differ diff --git a/media/serversideinstallation-staffclient-running-1.png b/media/serversideinstallation-staffclient-running-1.png new file mode 100755 index 0000000000..4ae44dbc63 Binary files /dev/null and b/media/serversideinstallation-staffclient-running-1.png differ diff --git a/media/serversideinstallation-staffclient-running-2.png b/media/serversideinstallation-staffclient-running-2.png new file mode 100755 index 0000000000..bd04752ede Binary files /dev/null and b/media/serversideinstallation-staffclient-running-2.png differ diff --git a/media/serversideinstallation-staffclient-running-3.png b/media/serversideinstallation-staffclient-running-3.png new file mode 100755 index 0000000000..6d49b34e60 Binary files /dev/null and b/media/serversideinstallation-staffclient-running-3.png differ diff --git a/media/serversideinstallation-staffclient-running-4.png b/media/serversideinstallation-staffclient-running-4.png new file mode 100755 index 0000000000..4640fa6555 Binary files /dev/null and b/media/serversideinstallation-staffclient-running-4.png differ diff --git a/media/serversideinstallation-testing-1.png b/media/serversideinstallation-testing-1.png new file mode 100755 index 0000000000..96b60ef24a Binary files /dev/null and b/media/serversideinstallation-testing-1.png differ diff --git a/media/serversideinstallation-testing-2.png b/media/serversideinstallation-testing-2.png new file mode 100755 index 0000000000..dbe991d60d Binary files /dev/null and b/media/serversideinstallation-testing-2.png differ diff --git a/media/serversideinstallation-virtual-vbox-install-1.png b/media/serversideinstallation-virtual-vbox-install-1.png new file mode 100755 index 0000000000..d5c94a2fe8 Binary files /dev/null and b/media/serversideinstallation-virtual-vbox-install-1.png differ diff --git a/media/serversideinstallation-virtual-vbox-install-2.png b/media/serversideinstallation-virtual-vbox-install-2.png new file mode 100755 index 0000000000..ffd4683db0 Binary files /dev/null and b/media/serversideinstallation-virtual-vbox-install-2.png differ diff --git a/media/serversideinstallation-virtual-vbox-install-3.png b/media/serversideinstallation-virtual-vbox-install-3.png new file mode 100755 index 0000000000..41cd113049 Binary files /dev/null and b/media/serversideinstallation-virtual-vbox-install-3.png differ diff --git a/media/serversideinstallation-virtual-vbox-install-4.png b/media/serversideinstallation-virtual-vbox-install-4.png new file mode 100755 index 0000000000..640aeba831 Binary files /dev/null and b/media/serversideinstallation-virtual-vbox-install-4.png differ diff --git a/media/serversideinstallation-virtual-vbox-install-5.png b/media/serversideinstallation-virtual-vbox-install-5.png new file mode 100755 index 0000000000..b07963850e Binary files /dev/null and b/media/serversideinstallation-virtual-vbox-install-5.png differ diff --git a/media/serversideinstallation-virtual-vm-install-1.png b/media/serversideinstallation-virtual-vm-install-1.png new file mode 100755 index 0000000000..e6c5e1e6f2 Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-1.png differ diff --git a/media/serversideinstallation-virtual-vm-install-10.png b/media/serversideinstallation-virtual-vm-install-10.png new file mode 100755 index 0000000000..1e4d841b04 Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-10.png differ diff --git a/media/serversideinstallation-virtual-vm-install-11.png b/media/serversideinstallation-virtual-vm-install-11.png new file mode 100755 index 0000000000..12b4c88a00 Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-11.png differ diff --git a/media/serversideinstallation-virtual-vm-install-12.png b/media/serversideinstallation-virtual-vm-install-12.png new file mode 100755 index 0000000000..f7d2457cca Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-12.png differ diff --git a/media/serversideinstallation-virtual-vm-install-13.png b/media/serversideinstallation-virtual-vm-install-13.png new file mode 100755 index 0000000000..6020264a0d Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-13.png differ diff --git a/media/serversideinstallation-virtual-vm-install-14.png b/media/serversideinstallation-virtual-vm-install-14.png new file mode 100755 index 0000000000..e3a644f4fb Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-14.png differ diff --git a/media/serversideinstallation-virtual-vm-install-15.png b/media/serversideinstallation-virtual-vm-install-15.png new file mode 100755 index 0000000000..6020264a0d Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-15.png differ diff --git a/media/serversideinstallation-virtual-vm-install-16.png b/media/serversideinstallation-virtual-vm-install-16.png new file mode 100755 index 0000000000..e3a644f4fb Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-16.png differ diff --git a/media/serversideinstallation-virtual-vm-install-17.png b/media/serversideinstallation-virtual-vm-install-17.png new file mode 100755 index 0000000000..ccdcc8f031 Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-17.png differ diff --git a/media/serversideinstallation-virtual-vm-install-18.png b/media/serversideinstallation-virtual-vm-install-18.png new file mode 100755 index 0000000000..1a5cabf12b Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-18.png differ diff --git a/media/serversideinstallation-virtual-vm-install-19.png b/media/serversideinstallation-virtual-vm-install-19.png new file mode 100755 index 0000000000..b8dcbe3bc5 Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-19.png differ diff --git a/media/serversideinstallation-virtual-vm-install-2.png b/media/serversideinstallation-virtual-vm-install-2.png new file mode 100755 index 0000000000..3464efd3fa Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-2.png differ diff --git a/media/serversideinstallation-virtual-vm-install-20.png b/media/serversideinstallation-virtual-vm-install-20.png new file mode 100755 index 0000000000..ff2dcfb0cc Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-20.png differ diff --git a/media/serversideinstallation-virtual-vm-install-21.png b/media/serversideinstallation-virtual-vm-install-21.png new file mode 100755 index 0000000000..d2a520151d Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-21.png differ diff --git a/media/serversideinstallation-virtual-vm-install-3.png b/media/serversideinstallation-virtual-vm-install-3.png new file mode 100755 index 0000000000..248d1326c4 Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-3.png differ diff --git a/media/serversideinstallation-virtual-vm-install-4.png b/media/serversideinstallation-virtual-vm-install-4.png new file mode 100755 index 0000000000..a288fdcd46 Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-4.png differ diff --git a/media/serversideinstallation-virtual-vm-install-5.png b/media/serversideinstallation-virtual-vm-install-5.png new file mode 100755 index 0000000000..c88fa09e03 Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-5.png differ diff --git a/media/serversideinstallation-virtual-vm-install-6.png b/media/serversideinstallation-virtual-vm-install-6.png new file mode 100755 index 0000000000..730bc20788 Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-6.png differ diff --git a/media/serversideinstallation-virtual-vm-install-7.png b/media/serversideinstallation-virtual-vm-install-7.png new file mode 100755 index 0000000000..f57fd9bf3a Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-7.png differ diff --git a/media/serversideinstallation-virtual-vm-install-8.png b/media/serversideinstallation-virtual-vm-install-8.png new file mode 100755 index 0000000000..adfc03409f Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-8.png differ diff --git a/media/serversideinstallation-virtual-vm-install-9.png b/media/serversideinstallation-virtual-vm-install-9.png new file mode 100755 index 0000000000..74ab56fcad Binary files /dev/null and b/media/serversideinstallation-virtual-vm-install-9.png differ diff --git a/media/shared-template-6.png b/media/shared-template-6.png new file mode 100755 index 0000000000..44b75a66f0 Binary files /dev/null and b/media/shared-template-6.png differ diff --git a/media/shared-template-7.png b/media/shared-template-7.png new file mode 100755 index 0000000000..2c52629b36 Binary files /dev/null and b/media/shared-template-7.png differ diff --git a/media/shared-template-9.png b/media/shared-template-9.png new file mode 100755 index 0000000000..1df47250e6 Binary files /dev/null and b/media/shared-template-9.png differ diff --git a/media/small_logo_white.jpg b/media/small_logo_white.jpg new file mode 100755 index 0000000000..e023e0357a Binary files /dev/null and b/media/small_logo_white.jpg differ diff --git a/media/staffclient-1.png b/media/staffclient-1.png new file mode 100755 index 0000000000..3199d38741 Binary files /dev/null and b/media/staffclient-1.png differ diff --git a/media/staffclient-2.png b/media/staffclient-2.png new file mode 100755 index 0000000000..98d168e36f Binary files /dev/null and b/media/staffclient-2.png differ diff --git a/media/staffclient-3.png b/media/staffclient-3.png new file mode 100755 index 0000000000..f2d695d86a Binary files /dev/null and b/media/staffclient-3.png differ diff --git a/media/staffclient-4.png b/media/staffclient-4.png new file mode 100755 index 0000000000..108afa901a Binary files /dev/null and b/media/staffclient-4.png differ diff --git a/media/staffclient-5.png b/media/staffclient-5.png new file mode 100755 index 0000000000..9451695b11 Binary files /dev/null and b/media/staffclient-5.png differ diff --git a/media/staffclient-6.png b/media/staffclient-6.png new file mode 100755 index 0000000000..8348e63ba7 Binary files /dev/null and b/media/staffclient-6.png differ diff --git a/media/staffclient-6a.png b/media/staffclient-6a.png new file mode 100755 index 0000000000..02f6cef008 Binary files /dev/null and b/media/staffclient-6a.png differ diff --git a/media/staffclient-6b.png b/media/staffclient-6b.png new file mode 100755 index 0000000000..f9ce6834a8 Binary files /dev/null and b/media/staffclient-6b.png differ diff --git a/media/staffclient-6c.png b/media/staffclient-6c.png new file mode 100755 index 0000000000..3908102fba Binary files /dev/null and b/media/staffclient-6c.png differ diff --git a/media/staffclient-6d.png b/media/staffclient-6d.png new file mode 100755 index 0000000000..f4c793e86d Binary files /dev/null and b/media/staffclient-6d.png differ diff --git a/media/staffclient-7.png b/media/staffclient-7.png new file mode 100755 index 0000000000..4492a80036 Binary files /dev/null and b/media/staffclient-7.png differ diff --git a/media/staffclient-7a.png b/media/staffclient-7a.png new file mode 100755 index 0000000000..ddc7e97266 Binary files /dev/null and b/media/staffclient-7a.png differ diff --git a/media/staffclient-8.png b/media/staffclient-8.png new file mode 100755 index 0000000000..91154f0985 Binary files /dev/null and b/media/staffclient-8.png differ diff --git a/media/staffclient-9.png b/media/staffclient-9.png new file mode 100755 index 0000000000..ecec7d8199 Binary files /dev/null and b/media/staffclient-9.png differ diff --git a/media/staffclientinstallation-proxy-putty-1.png b/media/staffclientinstallation-proxy-putty-1.png new file mode 100755 index 0000000000..1558fb665c Binary files /dev/null and b/media/staffclientinstallation-proxy-putty-1.png differ diff --git a/media/staffclientinstallation-proxy-socks-1.png b/media/staffclientinstallation-proxy-socks-1.png new file mode 100755 index 0000000000..b43192b910 Binary files /dev/null and b/media/staffclientinstallation-proxy-socks-1.png differ diff --git a/media/staffclientinstallation-proxy-socks-2.png b/media/staffclientinstallation-proxy-socks-2.png new file mode 100755 index 0000000000..5f9088dbca Binary files /dev/null and b/media/staffclientinstallation-proxy-socks-2.png differ diff --git a/media/staffclientinstallation-staffclient-1.png b/media/staffclientinstallation-staffclient-1.png new file mode 100755 index 0000000000..1c19db00f0 Binary files /dev/null and b/media/staffclientinstallation-staffclient-1.png differ diff --git a/media/staffclientinstallation-staffclient-2.png b/media/staffclientinstallation-staffclient-2.png new file mode 100755 index 0000000000..a75f0565e0 Binary files /dev/null and b/media/staffclientinstallation-staffclient-2.png differ diff --git a/media/staffclientinstallation-staffclient-3.png b/media/staffclientinstallation-staffclient-3.png new file mode 100755 index 0000000000..4627d077c0 Binary files /dev/null and b/media/staffclientinstallation-staffclient-3.png differ diff --git a/media/staffclientinstallation-staffclient-4.png b/media/staffclientinstallation-staffclient-4.png new file mode 100755 index 0000000000..4627d077c0 Binary files /dev/null and b/media/staffclientinstallation-staffclient-4.png differ diff --git a/media/staffclientinstallation-staffclient-workstationnames-1.png b/media/staffclientinstallation-staffclient-workstationnames-1.png new file mode 100755 index 0000000000..b219531428 Binary files /dev/null and b/media/staffclientinstallation-staffclient-workstationnames-1.png differ diff --git a/media/staffclientinstallation-staffclient-workstationnames-2.png b/media/staffclientinstallation-staffclient-workstationnames-2.png new file mode 100755 index 0000000000..6c70b438ef Binary files /dev/null and b/media/staffclientinstallation-staffclient-workstationnames-2.png differ diff --git a/media/staffclientinstallation-staffclient-workstationnames-3.png b/media/staffclientinstallation-staffclient-workstationnames-3.png new file mode 100755 index 0000000000..7af39674bc Binary files /dev/null and b/media/staffclientinstallation-staffclient-workstationnames-3.png differ diff --git a/media/staffclientinstallation-tabbed-1.png b/media/staffclientinstallation-tabbed-1.png new file mode 100755 index 0000000000..d5ae3bebf7 Binary files /dev/null and b/media/staffclientinstallation-tabbed-1.png differ diff --git a/media/survey-1.png b/media/survey-1.png new file mode 100755 index 0000000000..536f926763 Binary files /dev/null and b/media/survey-1.png differ diff --git a/media/survey-10.png b/media/survey-10.png new file mode 100755 index 0000000000..80d5b85686 Binary files /dev/null and b/media/survey-10.png differ diff --git a/media/survey-2.png b/media/survey-2.png new file mode 100755 index 0000000000..ba6a10fa93 Binary files /dev/null and b/media/survey-2.png differ diff --git a/media/survey-3.png b/media/survey-3.png new file mode 100755 index 0000000000..6f0afd0a73 Binary files /dev/null and b/media/survey-3.png differ diff --git a/media/survey-4.png b/media/survey-4.png new file mode 100755 index 0000000000..0ffc78187c Binary files /dev/null and b/media/survey-4.png differ diff --git a/media/survey-5.png b/media/survey-5.png new file mode 100755 index 0000000000..afafdcb54a Binary files /dev/null and b/media/survey-5.png differ diff --git a/media/survey-6.png b/media/survey-6.png new file mode 100755 index 0000000000..688d1f61f4 Binary files /dev/null and b/media/survey-6.png differ diff --git a/media/survey-7.png b/media/survey-7.png new file mode 100755 index 0000000000..06b84fd979 Binary files /dev/null and b/media/survey-7.png differ diff --git a/media/survey-8.png b/media/survey-8.png new file mode 100755 index 0000000000..3a37afdf53 Binary files /dev/null and b/media/survey-8.png differ diff --git a/media/survey-9.png b/media/survey-9.png new file mode 100755 index 0000000000..896e527c94 Binary files /dev/null and b/media/survey-9.png differ diff --git a/media/tip.png b/media/tip.png new file mode 100755 index 0000000000..eaabe82ea6 Binary files /dev/null and b/media/tip.png differ diff --git a/media/transit-1.png b/media/transit-1.png new file mode 100755 index 0000000000..92733a0c6f Binary files /dev/null and b/media/transit-1.png differ diff --git a/media/transit-10.png b/media/transit-10.png new file mode 100755 index 0000000000..f1c6215621 Binary files /dev/null and b/media/transit-10.png differ diff --git a/media/transit-2.png b/media/transit-2.png new file mode 100755 index 0000000000..30681af74f Binary files /dev/null and b/media/transit-2.png differ diff --git a/media/transit-3.png b/media/transit-3.png new file mode 100755 index 0000000000..34480f066f Binary files /dev/null and b/media/transit-3.png differ diff --git a/media/transit-4a.png b/media/transit-4a.png new file mode 100755 index 0000000000..143bf789fc Binary files /dev/null and b/media/transit-4a.png differ diff --git a/media/transit-5.png b/media/transit-5.png new file mode 100755 index 0000000000..ae889e24f0 Binary files /dev/null and b/media/transit-5.png differ diff --git a/media/transit-6.png b/media/transit-6.png new file mode 100755 index 0000000000..c9ce4b118f Binary files /dev/null and b/media/transit-6.png differ diff --git a/media/transit-7.png b/media/transit-7.png new file mode 100755 index 0000000000..8464c674ea Binary files /dev/null and b/media/transit-7.png differ diff --git a/media/transit-8.png b/media/transit-8.png new file mode 100755 index 0000000000..ce33b5d472 Binary files /dev/null and b/media/transit-8.png differ diff --git a/media/transit-9.png b/media/transit-9.png new file mode 100755 index 0000000000..8c84c420a3 Binary files /dev/null and b/media/transit-9.png differ diff --git a/media/view-output-1.png b/media/view-output-1.png new file mode 100755 index 0000000000..7fa0aec3a2 Binary files /dev/null and b/media/view-output-1.png differ diff --git a/media/view-output-2.png b/media/view-output-2.png new file mode 100755 index 0000000000..b536d07234 Binary files /dev/null and b/media/view-output-2.png differ diff --git a/media/view-output-3.png b/media/view-output-3.png new file mode 100755 index 0000000000..12756c5376 Binary files /dev/null and b/media/view-output-3.png differ diff --git a/media/view-output-4.png b/media/view-output-4.png new file mode 100755 index 0000000000..54e364c3c9 Binary files /dev/null and b/media/view-output-4.png differ diff --git a/media/view-output-5.png b/media/view-output-5.png new file mode 100755 index 0000000000..c4d9f61308 Binary files /dev/null and b/media/view-output-5.png differ diff --git a/media/warning.png b/media/warning.png new file mode 100755 index 0000000000..cdc6568091 Binary files /dev/null and b/media/warning.png differ diff --git a/opac/advancedsearch.xml b/opac/advancedsearch.xml new file mode 100644 index 0000000000..52d01f7b4e --- /dev/null +++ b/opac/advancedsearch.xml @@ -0,0 +1,99 @@ + + + + Advanced Search + + Advanced searches allow users to perform more complex searches by providing more options. Many kinds of searches can be performed from the + Advance Search screen. + + + You can access the Advanced Search by clicking Advanced Search on + the catalogue Homepage or search results screen. + + + The available search options are the same as on the Home page. But you may use one or + many of them simultaneously. If you want to combine more than three search options, use + Add Search Row button to add more search input rows. Clicking + the X button will close the search input row. + + Sort Criteriaadvanced searchsort criteria + By default, the search results are in order of greatest to least relevance. See . In the sort criteria box + you may select to order the search results by relevance, title, author, or publication + date. + + + Group Formats and Editionsadvanced searchgroup formats and editions + This checkbox is at the bottom line of Sort Criteria. When it is checked, all formats + and editions of the same title are grouped as one result. For example, the DVD and the + first and second print editions of Harry Potter and the Chamber of Secrets + will appear together. + + + + + Search Libraryadvanced searchsearch library + The current search library is displayed under Search Library + box. Be default it is your library. The search returns results for your local library + only. If your library system has multiple branches, use the Search + Library box to select different branches or the whole library + system. + + + + + + Limit to Availableadvanced searchlimit to available + This checkbox is at the bottom line of Search Library. Select Limit to + Available to limit by item’s current circulation status. Titles without + available items in the library will not be displayed. + + + + + Search Filteradvanced searchsearch filter + You can filter your search by Item Form, Item Type, Literary Form, + Language, Audience, Bib + Level and Publication Year. Publication year + is inclusive. For example, if you set Publication Year Between 2005 and 2007, your + result items will be published in 2005, 2006 and 2007. + The Advanced button below the filter name creates a more + detailed menu to choose from. For each filter type, you may select multiple criteria by + holding down the CTRL key as you click on the options. If nothing is + selected for a filter, the search will return results as though all options are + selected. + If you are searching a particular library or branch, you can also limit your search + by items' shelving location, too. + + + + + + Quick Searchadvanced searchquick search + If you have details on the exact item you wish to search for, use the Quick + Search option on the left of the screen. Use the drop-down menu to select + to search by ISBN, ISSN, Call Number, LCCN, TCN, or Item + Barcode. Enter the information and click Submit + under Quick Search. + + + + + MARC Expert Searchadvanced searchMARC expert search + If you are familiar with the MARC system, you may search by tag in the MARC + Expert Search option on the left of the screen. Enter the three-digit tag + number, the subfield if relevant, and the value or text that corresponds to the tag. For + example, to search by publisher name, enter 260 b Random House. To search several tags + simultaneously, use the Add Row option. Click + Submit to run the search. + + + Quick Search and MARC Expert Search scope to the + entire catalogue. Unlike keyword, author, and subject + searches, they cannot be limited to items in a particular library. The only exception is + the Quick Search by call number. + + + + diff --git a/opac/basicsearch.xml b/opac/basicsearch.xml new file mode 100644 index 0000000000..e80b0706e8 --- /dev/null +++ b/opac/basicsearch.xml @@ -0,0 +1,100 @@ + + + + Basic Search + + From the OPAC homeOPAC, you can conduct a basic search of all materials owned by all libraries in your Evergreen system. + This search can be as simple as typing keywords into the search box and clicking Go! Or, you can make your search more precise by limiting your search by + fields to search, material type or library location. + + + + The Homepage contains a single search box for you to enter search terms. You can get to + the Homepage at any time by selecting the Home link from the left-hand + sidebar in the catalogue, or you can enter a search anywhere you see a search box.search box + + You can select to search by: + + + Keyword—finds the terms you enter anywhere in thesearchkeyword + entire record for an item, including title, author, subject, and other information. + + + + + + Title—finds the terms you enter in the title of + an item.searchtitle + + + + + Author—finds the terms you enter in the author of + an item.searchauthor + + + + + Subject—finds the terms you enter in the subject + of an item. Subjects are categories assigned to items according to a system such as + the Library of Congress Subject Headings.searchsubject + + + + + Series—finds the terms you enter in the title of + a multi-part series.searchseries + + + + + Formats + You can limit your search by format: + + + + Booksformatsbooks + + + + + + + Large Printformatslarge print + + + + + + Audiobooks (books read aloud on CDs or other + media) formatsaudiobooks + + + + + Video (VHS tapes, DVDs, and other media) + formatsvideo + + + + + Music (music on CD or other media) + formatsmusic + + + + Electronic Resources (databases or other + resources available electronically in the library or online) + formatselectronic resources + + + + Libraries + If you are using a catalogue in a library or accessing a library’s online catalogue + from its homepage, the search will return items for your local library. If your library + has multiple branches, the result will display items available at your branch and all + branches of your library system separately. + + + diff --git a/opac/myaccount.xml b/opac/myaccount.xml new file mode 100644 index 0000000000..f8bf3bdb59 --- /dev/null +++ b/opac/myaccount.xml @@ -0,0 +1,277 @@ + + + + My Account + + This chapter will explain how users can use the My Account feature of the OPAC to manage their accounts. + + + + + First Login Password UpdateMy Accountfirst login + Patrons are given temporary passwords when new accounts are created, or forgotten passwords are reset by staff. Patrons MUST change their password to something more + secure when they login or for the first time. Once the password is updated, they will not have to repeat this process for subsequent logins. + + + + Open a web browser and go to your Evergreen OPAC + + + Click My Account + + + Enter your Username and Password + + + By default, your username is your library card number. + + + Your password is a 4 digit code provided when your account was created. If you have forgotten your password, contact your + library to have it reset or use the online tool. + + + + + Click Login. You will be prompted to change your password. + + + Enter your current password. + + + Enter a new password. + + + Enter the new password again. + + + Click Update Password. + + + Click OK. You will be returned to the login screen. + + + + + Enter your Username and new Password + + + Your Account Summary page displays. + + + + + Logging InMy Accountlogging in + + Logging into your account from the online catalog + + Open a web browser and navigate to your Evergreen OPAC + + + Click My Account + + + Enter your Username and Password + + By default, your username is your library card number. + Your password is a 4 digit code provided when your account was created. If you have forgotten your password, contact your local + library to have it reset or use the tool. + + + + Click Login + + At the first login, you will be prompted to change your password. + After updating the password, you must enter your Username and Password again. + + + + Your Account Summary page displays + + + To view your account details, click one of the My Account tabs + To start a search, enter a term in the search box at the top of the page and click Go! + If using a public computer be sure to log out! + + + Password ResetMy Accountpassword reset + Evergreen 1.6.1 introduced a new feature to allow patrons to reset forgotten passwords from the My Account login screen. + To reset your password: + + + click on the the Forgot your password? link located under the login button + + + Fill in the Barcode and User name text boxes. + + + A pop up message should appear indicating that your request has been processed and that you will recieve an email with further instructions. + + + An email will be sent to the email addressed you have registered with your Evergreen library. You should click on the link included in the email + to open the password reset page. Processing time may vary. + You will need to have a valid email account set up in Evergreen for you to reset your password. Otherwise, you will need to + contact your library to have your password reset by library staff. + + + At the reset email page you should enter the new password in the New password field and re-enter it in the + Re-enter new password field. + + + + Click Submit + + + A message should appear on the page indicating that your password has been reset. + + + Login to your account with your new password. + + + + + Account SummaryMy Accountaccount summary + Users can view Staff Notes, home library, address, and phone numbers. They can also change their username, password, and email. + + + Items Checked Out + Users can manage items currently checked out, view overdue items and see how many renewals they have remaining for specific item. + + + Items On HoldMy Accountitems on hold + From My Account patrons can manage items currently being requested. + Actions include: + + + Suspend - set a period of time during which the hold will not become active, such as during a vacation + + + Activate - manually remove the suspension + + + Set Active Date - specify a date at which the suspension will be lifted + + + Cancel - remove the hold request + + + + Edit options include: + + + + Enable/disable phone notifications + + + Change telephone number for notification + + + Enable/disable email notification + + + Change pick up library + + + Change expiration date + + + Suspend + + + Activate date + + + + To edit items on hold: + + Login to My Account, click the Items on Hold tab + + + Select the hold to modify + + + Click Edit or Actions for Selected Holds + + + Select the change to make and follow the instructions. + + + + + FinesMy Accountfines + Clicking on the fines tab will allow you to see your Total Owed, Total Paid and Balance + Owed. + + + PreferencesMy Accountpreferences + From here you can manage display preferences including: + + Search hits per page - how many items to appear on each page in results. + Default Font Size + Default Hold Notification Method - What is the preferred method for being notified for a hold pick up: email or phone. + Default Search Location - Which is the preferred default location for searching. By default youer home library is selected. + Default Search Range - What is the range of your search (e.g. location, library, system, consortium, etc...) + + After changing any of these settings, remember to click Save Preference Changes. + + + BookbagsMy Accountbookbags + My Bookbags is a feature that allows you to create lists of library materials (books, audiobooks, videos, etc.) These lists create links to records in the + catalog, but are otherwise completely private and only accessible by you when logged in to your Account. + You have the option to share specific lists with people whom you choose (send them the direct URL), or more generally via RSS feed. Shared bookbags do + NOT create a link to your personal library account information or private bookbags. You can share or un-share bookbags at any time. + You can create as many bookbags and you want. Your bookbags will stay in your account until you delete them. + Items remain in bookbags until you remove them. Even if the item record is removed from the catalog, the bookbag entry will remain (but there will be no link to + the catalog.) + + Create a new Bookbag + + Login to My Account , click My Bookbags + + + At Create a new Bookbag, enter the name of the new Bookbag + + + Select yes or no for the Share this Bookbag option. + + + Click Submit + + + Click OK + + + + Add items to a Bookbag + + Search for an item, open the Title Record + + + Open the More Actions... list; click the Bookbag name + + + Click OK + + + + Share a Bookbag + + Login to My Account, click My Bookbags. + + + Find the Bookbag to share, click Share this Bookbag. + + + Click OK. + + + Click View to open the list as a webpage. + + + copy and send this URL to selected recipients or embed in another website. + + + Click the RSS icon add the list to an RSS reader. + + + + diff --git a/opac/opac_intro.xml b/opac/opac_intro.xml new file mode 100644 index 0000000000..8bcd11a967 --- /dev/null +++ b/opac/opac_intro.xml @@ -0,0 +1,3 @@ + + This part of the documentation explains how to use the Evergreen public OPAC. It covers the basic catalog and more advanced search topics. It also describes the My Account tools users have to find information and manage their personal library accounts through the OPAC. This section could be used by staff and patrons but would be more useful for staff as a generic reference when developing custom guides and tutorials for their users. + diff --git a/opac/search_URL.xml b/opac/search_URL.xml new file mode 100644 index 0000000000..e7a85611a2 --- /dev/null +++ b/opac/search_URL.xml @@ -0,0 +1,58 @@ + + + + Search URL + + When performing a search or clicking on the details links, Evergreen constructs a GET request url with the parameters of the search. The url for searches and details in Evergreen are persistent links in that they can be saved, shared and used later. + Here is a basic search URL structure: + + +[hostname]/opac/[locale]/skin/default/xml/rresult.xml?rt=keyword&tp=keyword& +t=[search term]&l=[location id]&d=0 + + + <emphasis>l</emphasis> Parametersearching parameterslocation + This is the id of the search location. It is an integer and maches the id of the location the user selected in the location drop down menu. + This is accompanied by a d parameter which indicated the depth of the location selected. For example, 0 would be the highest level and 1 would represent the next depth level. + + + <emphasis>rt</emphasis> Parametersearching parametersrequest types + The rt parameter in the URL represents the search type values and represent one of the following search or request types: + + keyword + title + author + subject + series + + These match the options in the search type drop-down box. + + + Sortingsearching parameterssorting criteria + The s parameter sorts the results on one of these criteria. + + pubdate (publication date) - chronological order + title - Alphabetical order + author - Alphabetical order on family name first + + The sd indicates the direction to sort + + asc - ascending + desc - descending + + In the absence of s or sd parameter, the search results default to sorting by relevance. + + + Advanced search (multiple fields) + Uses rt=multi; then prepend search field to the search terms (delimited by a colon) in the t parameter: + ...tp=&t=keyword%3Afools title%3Arush&av=&rt=multi + ISBN and ISSN search include the following in the URL: + ...rt=isbn&adv=... + ...rt=issn&adv=... + Call number search will include: + ...cnbrowse.xml?cn=pr5655... + + + + diff --git a/opac/searchmethodology.xml b/opac/searchmethodology.xml new file mode 100644 index 0000000000..98c3fffc4a --- /dev/null +++ b/opac/searchmethodology.xml @@ -0,0 +1,46 @@ + + + Search Methodology + + Stemmingsearch methodologystemming + A search for dogs will also return hits with the word + dog and a search for parenting will return + results with the words parent and parental. + This is because the search uses stemming to help return the most relevant results. That + is, words are reduced to their stem (or root word) before the search is + performed. + + The stemming algorithm relies on common English language patterns - like verbs ending + in ing - to find the stems. This is more efficient that looking up + each search term in a dictionary and usually produces desirable results. However, it + also means the search will sometimes reduce a word to an incorrect stem and cause + unexpected results. To prevent a word or phrase from stemming, put it in + double-quotes. + + Understanding how stemming works can help you to create more relevant searches, but + it is usually best not to anticipate how a search term will be stemmed. For example, + searching for gold compass does not return for golden + compass because the search does not recognize gold as + a stem of golden. + + + Truncationsearch methodologytruncation + Truncation is not currently supported in Evergreen. + + + Order of Results search methodologyorder of results + By default, the results are listed in order of relevance, similar + to a search engine like Google. The relevance is determined using a number of factors, + including how often and where the search terms appear in the item description, and + whether the search terms are part of the title, subject, author, or series. The results + which best match your search are returned first rather than results appearing in + alphabetical or chronological order. + In the Advanced Search screen, you may select to order the + search results by relevance, title, author, or publication date before you start the + search. You can also re-order your search results using the Sort Results dropdown list + on the search result screen. + + + diff --git a/opac/searchresults.xml b/opac/searchresults.xml new file mode 100644 index 0000000000..c5ed622f60 --- /dev/null +++ b/opac/searchresults.xml @@ -0,0 +1,227 @@ + + + + Search Results + + + The search results are a list of relevant works from the catalogue. If there are many + results, they are divided into several pages. At the top of the list, you can see the + total number of results and go back and forth between the pages by clicking the double + arrow on top or bottom of the list. Here is an example: + + + + + + + + + + + Brief information about the title, such as author, edition, publication date, etc. is + displayed under each title. The icons under the brief information indicate formats such as + books, audio books, video recordings, and other formats. Hove your mouse over the icon, + text explanation will show up in a small pop-up box. + Clicking a title goes to the title details. Clicking an author searches all works by the + author. If you want to place a hold on the title, click Place Hold + beside the format icons. + + On the top right corner, there is a Limit to Available checkbox.search resultslimit to available + Checking this box will filter out those titles with no available copies in the library or + libraries at the moment. Usually you will see your search results are re-displayed with + fewer titles + The Sort Results dropdown list is beside the Limit to Availablesearch resultssort criteria + checkbox. Clicking an entry on the list will re-sort your search results + accordingly. + + search resultssort criteria + Formats and Editionssearch resultsgroup formats and editions + + If you have selected Group Formats and Editions with your + search, your search results are grouped by various formats and editions of the same + title. Multiple format icons may be lit up. Clicking a title will show you the + records of all formats, while clicking an icon will show you the particular + format. + + + + + + + + + + + + + + + + Related Subjects, Authors, and Seriessearch resultsrelated subjects, authors, and series + + At the left, you may see a list of Related Subjects, + Authors, and Series. Selecting one of + these links searches the catalogue again using that subject, author, or series to + find additional items. This begins a new search rather than further refining the + current search. + + + + + + + + + + + + + + + + Availabilitysearch resultsavailability + + + The number of available copies and total copies are displayed in the right-hand + columns. If you are using a catalogue inside a library or accessing a library’s + online catalogue from its homepage, you will see how many copies are available in the + library under the library’s name. If the library belongs to a multi-branch library + system you will see an extra column under the library system’s name showing how many + copies are available in all branches + + + + + + + + + + + + + + + + + + + + + Viewing a record + + + Click on a title to view a detailed record of the title, including descriptive + information, location and availability, and options for placing holds. + + + + + + + + + + + + + Details + The record shows details such as the cover image, title, author, publication + information, and an abstract or summary, if available. + At the bottom of the record, the Copy Summary shows how many + copies are at the library or libraries you have selected, and whether they are available + or checked out. It also displays the Callnumber and Copy + Location for locating the item on the shelves. You can select + Shelf Browser to view items appearing near the current item on + the library shelves. Often this is a good way to browse for similar items. You can + select Table of Contents to see the book’s table of contents + online (if available). You can select MARC Record to display the + record in MARC format. + + + + Placing HoldsHolds + Holds can be placed on either title results or title details page. If the item is + available, it will be pulled from the shelf and held for you. If all copies at your + local library are checked out, you will be placed on a waiting list and you will be + notified when items become available. + + On title details page, you can select the Place Holdlink in + the upper right corner of the record to reserve the item. You will need your library + account user name and password. You may choose to be notified by phone or email and set + up an expiration date for your hold by selecting the respective checkboxes. Hold + expiration date means after this date, even though your hold has not been fulfilled you + do not need the item anymore. + + In the example below, the phone number in your account will automatically show up. + Once you select the Enable phone notifications for this hold? + checkbox, you can supply a different phone number for this hold only. The notification + method will be selected automatically if you have set it up in your account preferences. + But you still have a chance to re-select on this screen. You may also suspend the hold + temporarily by checking the Suspend box. Click the + Help beside it for details. + + You can view and cancel a hold at anytime. Before your hold is captured, which means + an item has been held waiting for you to pick up, you can edit, suspend or activate it. + You need log into your account to do it. + + + + + + + + + + + + + + + + + Going back + + When you are viewing a specific record, you can always go back to your title list + by clicking the link My Title Results on the left of the + page. + + + + + + + + + + + + + + + If you have selected Group Formats and Editions with your + search, your search results are grouped by various formats and editions of the same + title under My Search Results. You can always go back to this + page by selecting the link to My Search Results + + + + + + + + + + + + + + + You can start a new search at any time by entering new search terms in the search box + at the top of the page, or by selecting the Home or + Advanced Search links in the left-hand sidebar. + + + + diff --git a/opac/searchtips.xml b/opac/searchtips.xml new file mode 100644 index 0000000000..533a58ff26 --- /dev/null +++ b/opac/searchtips.xml @@ -0,0 +1,159 @@ + + + Search Tips + You do not need to enter authors last name first, nor do you need an exact title or + subject heading. Evergreen is also forgiving about plurals and alternate verb endings, so + if you enter dogs, Evergreen will also find items with + dog. + + + Do not use an AND operator to join search terms. + + + An AND operator is automatically used to join all search terms. So, a searchbooleanAND operator + for golden compass will search for entries that contain + both golden and + compass. + + + o Boolean operators such as and, or, not are not + considered special and are searched for like any other word. So, a search for + golden and compass will not return the title + golden compass. Putting it another way, there are no + stop words that are automatically ignored by the search + engine. So, a title search for the and or not of (and in + any order) yields a list of titles with those words. boolean + + + + + + + Don’t worry about white space, exact punctuation, or capitalization. + + + White spaces before or after a word are ignored. So, search for + golden compass gives the same results as a search for + golden compass. + + + A double dash or a colon between words is reduced to a blank space. So, a + title search for golden:compass or golden -- + compass is equivalent to golden + compass. + + + Punctuation marks occurring within a word are removed; the exception is _. + So, a title search for gol_den com_pass gives no result. + + + + Diacritical marks, &, or | located anywhere in the search term are + removed. Words or letters linked together by . (dot) are joined together + without the dot. So, a search for go|l|den & comp.ass + is equivalent to golden compass. + + + Upper and lower case letters are equivalent. So, Golden + Compass is the same as golden + compass. + + + + + + + Enter your search words in any order. So, a search for compass + golden gives the same results as a search for golden + compass. Adding more search words gives fewer and more specific + results. + + + + This is also true for author searches. Both David Suzuki + and Suzuki, David will return results for the + same author. + + + + + + + Use specific search terms. Evergreen will search for the words you specify, not + the meanings, so choose search terms that are likely to appear in an item + description. For example, the search luxury hotels will produce + more relevant results than nice places to stay. + + + + + Search for an exact phrase using double-quotes. For example “golden + compass”. + + + The order of words is important for an exact phrase search. + “golden compass” is different than “compass + golden”. + + + + White space, punctuation and capitalization are removed from exact phrases + as described above. So a phrase retains its search terms and its relative + order, but not special characters and not case. + + + Two phrases are joined by and, so a search for “golden compass” + “dark materials” is equivalent to “golden compass” + and “dark materials”. + + + To prevent stemming , use double quotes around a single word or a phrase. So, a + search for parenting will also return results for + parental but a search for + “parenting” will not. + + + + + + + Do not use wildcards. Truncation using wildcards is not supported in Evergreen. + So, searching for comp* will not return results for + compass. + + + + + Exclude a term from the search, using - (minus) or ! + (exclamation point). For example, vacations –britain or + vacations !britain will search for materials on vacations + that do not make reference to Britain. + + + Two excluded words are joined by and. So, a search for + !harry !potter is equivalent to + !harry + and + !potter. + + + A + (plus) leading a term has no role and is removed. So, + +golden + +compass is equivalent to golden + compass. + + + + + You can form more complex searches using the Advanced Search features. + + Improving a Search With Few Results + If few hits were returned for your search is displayed, you may see some suggestions + for expanding or altering your search at the bottom of the s earch results list. These + alternate search terms are words that are similar to your search terms in spelling or + sound. Selecting one of the links performs a search with the new search terms. + + + diff --git a/opac/simpleselfcheck.xml b/opac/simpleselfcheck.xml new file mode 100644 index 0000000000..ed97219e06 --- /dev/null +++ b/opac/simpleselfcheck.xml @@ -0,0 +1,37 @@ + + + Simple Self Check Interfaceself check + + This section deals with the simple self check front end that comes with Evergreen. For information on setting up a SIP server for communicating with self check hardware, + please refer to Setting up a SIP Server. +
+ Using the Self Check Interface + + Initializing the self check client. + The selfcheck interface is run through a web browser. Before patrons can use the self check station, a staff member must initilize the interface by logging in. + + Open a web browser and navigate to your self check interface page which is the location of the selfcheck.xml file. + By default, the url will be https://[hostname]/opac/extras/selfcheck/selfcheck.xml, where [hostname] is your Evergreen + host. + Login using a staff username or barcode and password. + + + + Using the interface to check out books + After a staff user has logged into the self check interface, the interface should be ready for patrons to scan their barcodes and check out books. + + Scan your patron barcode to login + Scan your books. The item titles should appear below the barcode field as you scan them. + Click Done when you are finished. This will print the receipt and log out. + Select printer to print a receipt (if a printer is available). + + +
+
+ Customizing the Self Check Interface + The XML, CSS and JavaScript files for customizing the self check interface are located in the + /openils/var/web/opac/extras/selfcheck/ directory. +
+
+ diff --git a/reports/report-create-template.xml b/reports/report-create-template.xml new file mode 100644 index 0000000000..8c9f789ab5 --- /dev/null +++ b/reports/report-create-template.xml @@ -0,0 +1,658 @@ + + + + + Creating Templates + + + Once you have created a folder, the next step in building a report is to create or clone a + template. Templates allow you to run a report more than once without building it anew every + time, by changing definitions to suit current requirements. For example, you can create a + shared template that reports on circulation at a given library. Then, other libraries can + use your template and simply select their own library when they run the report. + + It may take several tries to refine a report to give the output that you want. It can be + useful to plan out your report on paper before getting started with the reporting tool. + Group together related fields and try to identify the key fields that will help you select + the correct source. + + It may be useful to create complex queries in several steps. For example, first add all + fields from the table at the highest source level. Run a report and check to see that you + get results that seem reasonable. Then clone the report, add any filters on fields at that + level and run another report. Then drill down to the next table and add any required fields. + Run another report. Add any filters at that level. Run another report. Continue until you’ve + drilled down to all the fields you need and added all the filters. This might seem time + consuming and you will end up cloning your initial report several times. However, it will + help you to check the correctness of your results, and will help to debug if you run into + problems because you will know exactly what changes caused the problem. Also consider adding + extra fields in the intermediate steps to help you check your results for correctness. + + This example illustrates creating a template for circulation statistics. This is an + example of the most basic template that you can create. The steps required to create a + template are the same every time, but the tables chosen, how the data is transformed and + displayed, and the filters used will vary depending on your needs. + +
+ + Choosing Report Fields + + + + + + + + + Click on the My Folder template folder where you want + the template to be saved. + + + Screenshot of staff client report interface + + + + + + + + + + + + + Click on Create a new Template for this + folder. + + Screenshot of staff client report interface + + + + + + + + + + + + You can now see the template creating interface. The upper half of the + screen is the Database Source Browser. The top left + hand pane contains the database Sources drop-down list. + This is the list of tables available as a starting point for your report. + Commonly used sources are Circulation (for circ + stats and overdue reports), ILS User (for patron + reports), and Item (for reports on a library's + holdings). + + + Screenshot of staff client report interface + + + + + + + The Enable source nullability checkbox below the sources + list is for advanced reporting and should be left unchecked by default. + + + + + + + + Select Circulation in the Sources + dropdown menu. Note that the Core + Sources for reporting are listed first, however it is + possible to access all available sources at the bottom of this dropdown + menu. You may only specify one source per template. + + + Screenshot of staff client report interface + + + + + + + + + + + + + + Click on Circulation to retrieve all the field names + in the Field Name pane. Note that the Source + Specifier (above the middle and right panes) shows the path + that you took to get to the specific field. + + Screenshot of staff client report interface + + + + + + + + + + + + + + Select Circ ID in the middle Field + Name pane, and Count Distinct from + the right Field Transform pane. The Field + Transform pane is where you choose how to manipulate the data + from the selected fields. You are counting the number of + circulations. + + Screenshot of staff client report interface + + + + + + + + Field Transforms have either an + Aggregate or Non-Aggregate output + type. See for more about + Count, Count Distinct, and other transform + options. + + + + + + Click Add Selected Fields underneath the + Field Transform pane to add this field to your + report output. Note that Circ ID now shows up in + the bottom left hand pane under the Displayed Fields + tab. + + Screenshot of staff client report interface + + + + + + + + + + + + + Circ ID will be the column header in the report + output. You can rename default display names to something more meaningful. + To do so in this example, select the Circ ID row + and click Alter Display Header. + + Screenshot of staff client report interface + + + + + + + + + + Double-clicking on the displayed field name is a shortcut to altering the + display header. + + + + + Type in the new column header name, for example Circ + count and click OK. + + Screenshot of staff client report interface + + + + + + + + + + + + Add other data to your report by going back to the + Sources pane and selecting the desired fields. In this + example, we are going to add + Circulating Item + Shelving Location + to further refine the circulation report. + + In the top left hand Sources pane, expand + Circulation. Depending on your computer you + will either click on the + sign or on an arrow to expand the tree. + + Screenshot of staff client report interface + + + + + + + + + + + + + Click on the + or arrow to expand Circulating + Item. Select Shelving Location. + + Screenshot of staff client report interface + + + + + + + + When you are creating a template take the shortest path to the field you need + in the left hand Sources pane. Sometimes it is possible to + find the same field name further in the file structure, but the shortest path is + the most efficient. + + + + + + + In the Field Name pane select + Name. + + Screenshot of staff client report interface + + + + + + + + + + + + In the upper right Field Transform pane, select + Raw Data and click Add Selected + Fields. Use Raw Data when you do not + wish to transform field data in any manner. + + Screenshot of staff client report interface + + + + + + + + + + + + + + Name will appear in the bottom left pane. Select the + Name row and click Alter Display + Header. + + Screenshot of staff client report interface + + + + + + + + + + + Enter a new, more descriptive column header, for example, + Shelving location. Click OK. + + Screenshot of staff client report interface + + + + + + + + + + + Note that the order of rows (top to bottom) will correspond to the order + of columns (left to right) on the final report. Select Shelving + location and click on Move Up to + move Shelving location before Circ + count. + + Screenshot of staff client report interface + + + + + + + + + + + + Return to the Sources pane to add more fields to your + template. Under Sources click + Circulation, then select Check Out + Date/Time from the middle Field Name + pane. + + Screenshot of staff client report interface + + + + + + + + + + + + Select Year + Month in the right hand + Field Transform pane and click Add + Selected Fields + + Screenshot of staff client report interface + + + + + + + + + + + + + + Check Out Date/Time will appear in the + Displayed Fields pane. In the report it will appear + as a year and month (YYYY-MM) corresponding to the selected tranform. + + + + + + + + + + + Select the Check Out Date/Time row. Click + Alter Display Header and change the column header + to Check out month. + + Screenshot of staff client report interface + + + + + + + + + + + + Move Check out month to the top of the list + using the Move Up button, so that it will be the + first column in an MS Excel spreadsheet or in a chart. Report output will + sort by the first column. + + Screenshot of staff client report interface + + + + + + + + + + + + + + Note the Change Transform button in the bottom left + hand pane. It has the same function as the upper right Field + Transform pane for fields that have already been added. + + + + + Screenshot of staff client report interface + + + + + + + + + + +
+ +
+ + Applying Filters + + + Evergreen reports access the entire database, so to limit report output to a single + library or library system you need to apply filters. + + After following the steps in the previous section you will see + three fields in the bottom left hand Template Configuration pane. + There are three tabs in this pane: Displayed Fields (covered in the + previous section), Base Filters and Aggregate + Filters. A filter allows you to return only the results that meet the + criteria you set. + + Base Filters apply to non-aggregate output types, while + Aggregate Filters are used for aggregate types. In most reports you will be using the + Base Filters tab. For more information on + aggregate and non-aggregate types see + . + + + + + There are many available operators when using filters. Some + examples are Equals, In list, is + NULL, Betwee, Greater than or equal + to, and so on. In list is the most flexible + operator, and in this case will allow you flexibility when running a report from this + template. For example, it would be possible to run a report on a list of timestamps (in + this case will be trimmed to year and month only), run a report on a single month, or + run a report comparing two months. It is also possible to set up recurring reports to + run at the end of each month. + In this example we are going to use a Base Filter to filter out + one library’s circulations for a specified time frame. The time frame in the template + will be configured so that you can change it each time you run the report. + + + + Using Base Filters + + + + Select the Base Filters tab in the bottom + Template Configuration pane. + + + + + For this circulation statistics example, select + Circulation + Check Out Date/Time + Year + Month + and click on Add Selected Fields. You + are going to filter on the time period. + + Screenshot of staff client report interface + + + + + + + + + + Select Check Out Date/Time. Click on + Change Operator and select In + list from the dropdown menu. + + Screenshot of staff client report interface + + + + + + + + + + + To filter on the location of the circulation select + Circulation + Circulating library + Raw Data + and click on Add Selected Fields. + + Screenshot of staff client report interface + + + + + + + + + + Select Circulating Library and click on + Change Operator and select + Equals. Note that this is a template, so the + value for Equals will be filled out when you run the + report + + Screenshot of staff client report interface + + + + + + + + For multi-branch libraries, you would select Circulating + Library with In list as the operator, so you + could specify the branch(es) when you run the report. This leaves the template + configurable to current requirements. In comparison, sometimes you will want to + hardcode true/false values into a template. For example, deleted bibliographic + records remain in the database, so perhaps you want to hardcode deleted=false, + so that deleted records don’t show up in the results. You might want to use + deleted=true, for a template for a report on deleted items in the last month. + + + + + + Once you have configured your template, you must name and save it. Name + this template Circulations by month for one library. + You can also add a description. In this example, the title is descriptive + enough, so a description is not necessary. Click + Save. + + Screenshot of staff client report interface + + + + + + + + + + + Click OK. + + Screenshot of staff client report interface + + + + + + + + + + + You will get a confirmation dialogue box that the template was + successfully saved. Click OK. + + Screenshot of staff client report interface + + + + + + + + + + + After saving it is not possible to edit a template. To make changes you will need to + clone it and edit the clone + + + + + + The bottom right hand pane is also a source specifier. By selecting one of + these rows you will limit the fields that are visible to the sources you have + specified. This may be helpful when reviewing templates with many fields. Use + Ctrl + Click + to select or deselect items. + + + + + + + + + + + +
+ + + +
diff --git a/reports/report-exporting-report-templates-using-phppgadmin.xml b/reports/report-exporting-report-templates-using-phppgadmin.xml new file mode 100644 index 0000000000..2b96a2d5df --- /dev/null +++ b/reports/report-exporting-report-templates-using-phppgadmin.xml @@ -0,0 +1,53 @@ + + + + Exporting Report Templates Using phpPgAdmin + + Once the data is exported. Database Administrators/Systems Administrators can easily import this data into the templates folder to make it available in the client. + + Dump the Entire Reports Template Table + The data exported in this method can create issues importing into a different system if you do not have a matching folder and owner. This is going to export report templates created in your system. The most important fields for importing into the new system are name, description, and data. Data defines the actual structure of the report. The owner and folder fields will unique to the system they were exported from and will have to be altered to ensure they match the appropriate owner and folder information for the new system. + + + Go to the Reporter schema. Report templates are located in the Template table + Click on the link to the Template table + Click the export button at the top right of the phpPgAdmin screen + Make sure the following is selected + + Data Only (checked) + Format: Select CSV or Tabbed did get the data in a text format + Download checked + + + Click export button at the bottom + A text file will download to your local system + + + + + Dump Data with an SQL Statement + The following statement could be used to grab the data in the folder and dump it with admin account as the owner and the first folder in your system. + SELECT 1 as owner, name, description, data, 1 as folder FROM reporter.template + or use the following to capture your folder names for export + SELECT 1 as owner, t.name, t.description, t.data, f.name as folder FROM reporter.template t JOIN reporter.template_folder f ON t.folder=f.id + + + Run the above query + Click the download link at the bottom of the page + Select the file format (CSV or Tabbed) + Check download + A text file with the report template data will be downloaded. + + + + + + + + + + + + + diff --git a/reports/report-folder.xml b/reports/report-folder.xml new file mode 100644 index 0000000000..dd471f1a81 --- /dev/null +++ b/reports/report-folder.xml @@ -0,0 +1,120 @@ + + + + Folders + + There are three main components to reports: Templates, Reports, and Output. Each of these + components must be stored in a folder. Folders can be private (accessible to your login only) or shared with other staff at your library, other libraries in your system or consortium. It is also possible to selectively share only certain folders and/or subfolders. + + + There are two parts to the folders pane. The My Folders section + contains folders created with your Evergreen account. Folders that other users have + shared with you appear in the Shared Folders section under the username of the sharing account. + + + + Screenshot of reports interface + + + + + + + + +
+ + + Creating Folders + + Whether you are creating a report from scratch or working from a shared template you must first create at least one folder. + + The steps for creating folders are similar for each reporting function. It is easier + to create folders for templates, reports, and output all at once at the beginning, though it is + possible to do it before each step. This example demonstrates creating a folder for a template. + + + + + Click on Templates in the My Folders section. + + + + Name the folder. Select Share or + Do not share from the dropdown menu. + + + + If you want to share your folder, select who you want to share this folder + with from the dropdown menu. + + + + + Click Create Sub Folder. + + + Click OK. + + + + Next, create a folder for the report definition to be saved to. Click on + Reports. + + + Repeat steps 2-5 to create a Reports folder also called Circulation. + + + + Finally, you need to create a folder for the report’s output to be saved + in. Click on Output. + + + Repeat steps 2-5 to create an Output folder named Circulation. + + + + Using a parallel naming scheme for folders in Templates, Reports, and Output helps keep your reports organized and easier to find + + The folders you just created will now be visible by clicking the arrows in + My Folders. Bracketed after the folder name is whom the + folder is shared with. For example, Circulation (BNCLF) + is shared with the North Coast Library Federation. + If it is not a shared folder there will be nothing after the folder name. You may create as many folders and sub-folders as you like. +
+
+ + Managing Folders + + Once a folder has been created you can change the name, delete it, create a new + subfolder, or change the sharing settings. This example demonstrates changing a folder name; the + other choices follow similar steps + + + Click on the folder that you wish to rename. + + + + Click Manage Folder. + + + Select Change folder name from the dropdown menu + and click Go. + + + + Enter the new name and click Submit + + + + Click OK. + + + + You will get a confirmation box that the Action Succeeded. Click + OK. + + +
+
diff --git a/reports/report-generate-report.xml b/reports/report-generate-report.xml new file mode 100644 index 0000000000..4f0ad7c365 --- /dev/null +++ b/reports/report-generate-report.xml @@ -0,0 +1,266 @@ + + + + + + Generating Reports from Templates + + + Now you are ready to run the report from the template you have created. + + + + + + + In the My Folders section click the arrow next to + Templates to expand this folder and select + circulation. + + + + + + + + + + + + Select the box beside Circulations by month for one + library. Select Create a new report from selected + template from the dropdown menu. Click + Submit. + + + + + + + + + + + + + Complete the first part of report settings. Only Report + Name + + + + and Choose a folder... + + + + are required + fields. + + + + + + + + + + + + + + + Template Name, Template Creator, and Template + Description are for informational purposes only. They are hard + coded when the template is created. At the report definition stage it is not + possible to change them. + + + + + + + + + Report Name is required. Reports stored in the same folder + must have unique names. + + + + + + + + + Report Description is optional but may help distinguish + among similar reports. + + + + + + + + Report Columns lists the columns that will appear in the + output. This is derived from the template and cannot be changed during report + definition. + + + + + + + + Pivot Label Column and Pivot Data + Column are optional. Pivot tables are a different way to view + data. If you currently use pivot tables in MS Excel + it is better to select an Excel output and continue + using pivot tables in Excel. + + + + + + + You must choose a report folder to store this report + definition. Only report folders under My Folders are + available. Click on the desired folder to select it. + + + + + + + Select values for the Circulation > Check Out + Date/Time. Use the calendar widget or manually enter the + desired dates, then click Add to include the date on + the list. You may add multiple dates. + + + + + + + + + + The Transform for this field is Year + + Month, so even if you choose a specific date (2009-10-20) it will + appear as the corresponding month only (2009-10). + + It is possible to select relative dates. If + you select a relative date 1 month ago you can schedule + reports to automatically run each month. If you want to run monthly reports that + also show comparative data from one year ago, select a relative date 1 + month ago, and 13 months ago. + + + + + + + Select a value for the Circulating Library. + + + + + Complete the bottom portion of the report definition interface, then click + Save. + + + + + + + + + + + + + + + + Select one or more output formats. In this example the + report output will be available as an Excel + spreadsheet, an HTML table (for display in the staff client or browser), and as + a bar chart. + + + + + + + + If you want the report to be recurring, check the box and + select the Recurrence Interval as described in Recurring Reports.  In this + example, as this is a report that will only be run once, the Recurring + Report box is not checked. + + + + + + + + Select Run as soon as possible for + immediate output. It is also possible to set up reports that run automatically + at future intervals. + + + + + + + It is optional to fill out an email address where a + completion notice can be sent. The email will contain a link to + password-protected report output (staff login required). If you have an email + address in your Local System Administrator account it will automatically appear + in the email notification box.  However, you can enter a different email address + or multiple addresses separated by commas. + + + + + + + Select a folder for the report's output. + + + + + + + + + + + You will get a confirmation dialogue box that the Action + Succeeded. Click OK. + + + + + + + + + + + + + + Once saved, reports stay there forever unless you delete them. + + + + + + + + + + + + diff --git a/reports/report-intro.xml b/reports/report-intro.xml new file mode 100644 index 0000000000..476b11cceb --- /dev/null +++ b/reports/report-intro.xml @@ -0,0 +1,5 @@ + +Reports are a powerful tool in Evergreen and can be used for statistical comparisons or collection maintenance. The following part covers everything dealing with reports from starting the reporter daemon to viewing reports your library has created. The range of topics in this part is quite broad and different chapters will be useful to different roles in an Evergreen library system. + + + diff --git a/reports/report-recurring-report.xml b/reports/report-recurring-report.xml new file mode 100644 index 0000000000..307e363de3 --- /dev/null +++ b/reports/report-recurring-report.xml @@ -0,0 +1,70 @@ + + + +Running Recurring Reports + + + Recurring reports are a useful way to save time by scheduling reports that you run on + a regular basis, such as monthly circulation and monthly patron registration + statistics. When you have set up a report to run on a monthly basis you’ll get an email + informing you that the report has successfully run. You can click on a link in the + email that will take you directly to the report output. You can also access + the output through the reporter interface as described in . + + To set up a monthly recurring report follow the procedure in but make the changes described below. + + + + + Select the Recurring Report check-box and set the + recurrence interval to 1 month. + + + + + Do not select Run ASAP. Instead schedule the report + to run early on the first day of the next month. Enter the date in + YYYY-MM-DD format. + + + + Ensure there is an email address to receive completion emails. You will + receive an email completion notice each month when the output is ready. + + + + Select a folder for the report’s output. + + + + Click Save Report. + + + You will get a confirmation dialogue box that the Action + Succeeded. Click OK. + + + + You will get an email on the 1st of each month with a link to the report + output. By clicking this link it will open the output in a web browser. It is + still possible to login to the staff client and access the output in + Output folder. + + + How to stop or make changes to an existing recurring report? + Sometimes you may wish to stop or make changes to a recurring report, e.g. the + recurrence interval, generation date, email address to receive completion email, + output format/folder or even filter values (such as the number of days overdue). You + will need to delete the current report from the report folder, then use the above + procedure to set up a new recurring report with the desired changes. Please note + that deleting a report also deletes all output associated with it. + + + Once you have been on Evergreen for a year, you could set up your recurring + monthly reports to show comparative data from one year ago. To do this select + relative dates of 1 month ago and 13 months ago. + + diff --git a/reports/report-report-introduction.xml b/reports/report-report-introduction.xml new file mode 100644 index 0000000000..09347d0be1 --- /dev/null +++ b/reports/report-report-introduction.xml @@ -0,0 +1,29 @@ + + + + Reports overview + + The reports interface is accessed from the Admin (-) menu, under + Local Administration + Reports + . + Only users with Local System Administration permissions can create reports but the output + is visible to all staff accounts. Reports are owned by the account used to create them, though it is possible to share reports with other staff in your library, other libraries or the entire system or consortium. + + Evergreen has very powerful reporting functionality. It is possible to report on almost + every field in every table in the database. The reporting interface tries to make + navigating the database structure easier by pointing at the main database tables. + + These chapters demonstrate how to create reports in Evergreen by introducing the + basic concepts of the reporting function. Once you understand how to navigate around the + reports interface, you can create your own reports from scratch or take advantage of report templates. + + There are four aspects to creating a report in Evergreen: building a template, choosing a + template, defining a report, and running a report to create output. Before anything else you must create at least one Template, Report, and + Output folder as described in . + + + + diff --git a/reports/report-shared-template.xml b/reports/report-shared-template.xml new file mode 100644 index 0000000000..e4da703697 --- /dev/null +++ b/reports/report-shared-template.xml @@ -0,0 +1,91 @@ + + + + Cloning Shared Templates + + This chapter describes how + to make local copies of shared templates for routine reports or as a starting point for + customization. When creating a new template it is a good idea to review the shared templates + first: even if the exact template you need does not exist it is often faster to modify an + existing template than to build a brand new one. A Local System Administrator account is + required to clone templates from the Shared Folders section and save them + to My Folders. + The steps below assume you have already created at least one Templates + folder.  If you haven’t done this, please see . + + + + Access the reports interface from the Admin (-) menu under + Local Administration + Reports + + + + + Under Shared Folders expand the + Templates folder and the subfolder of the report you wish to clone.  To expand the folders click on + the grey arrow or folder icon.  Do not click on the blue underlined hyperlink. + + + Click on the subfolder. + + + + Select the template you wish to clone.  From the + dropdown menu choose Clone selected templates, then click + Submit.   + + + + + + + + + + By default Evergreen only displays the first 10 items in any folder. To view all content, change the Limit output setting from 10 to All. + + + + Choose the folder where you want to save the cloned template, then click + Select Folder. Only template folders created with your + account will be visible. If there are no folders to choose from please see . + + + + + + + + + + + + + + + The cloned template opens in the template editor. From here you may modify the + template by adding, removing, or editing fields and filters as described in . Template Name and + Description can also be edited. When satisfied with your + changes click Save. + + + + + + + + + + + + Click OK in the resulting confirmation windows. + + + Once saved it is not possible to edit a template. To make changes, clone a template and change the clone. + + + diff --git a/reports/report-startingreporter.xml b/reports/report-startingreporter.xml new file mode 100644 index 0000000000..d3956093da --- /dev/null +++ b/reports/report-startingreporter.xml @@ -0,0 +1,42 @@ + + + + Starting and Stopping the Reporter Daemon + + Before you can view reports, the Evergreen administrator must start the reporter daemon from the command line of the Evergreen server. + The reporter daemon periodically checks for requests for new reports or scheduled reports and gets them running. + + + Starting the Reporter Daemon + To start the reporter daemon, run the following command as the opensrf user: + clark-kent.pl --daemon + You can also specify other options: + + sleep=interval : number of seconds to sleep between checks for new reports to run; defaults to 10 + lockfile=filename : where to place the lockfile for the process; defaults to /tmp/reporter-LOCK + concurrency=integer : number of reporter daemon processes to run; defaults to 1 + boostrap=filename : OpenSRF bootstrap configuration file; defaults to /openils/conf/opensrf_core.xml + + + The open-ils.reporter process must be running and enabled on the gateway before the reporter daemon can be started. + Remember that if the server is restarted, the reporter daemon will need to be restarted before you can view reports unless you have configured your server to start the daemon + automatically at start up time. + + + Stopping the Reporter Daemon + To stop the reporter daemon, you have to kill the process and remove the lockfile. Assuming you're running just a single process and that the lockfile is + in the default location, perform the following commands as the opensrf user: + kill `ps wax | grep "Clark Kent" | grep -v grep | cut -b1-6` + rm /tmp/reporter-LOCK + + + + + + + + + + + diff --git a/reports/report-template-terminology.xml b/reports/report-template-terminology.xml new file mode 100644 index 0000000000..808e22eb6c --- /dev/null +++ b/reports/report-template-terminology.xml @@ -0,0 +1,182 @@ + + + + Template Terminology + + + + + Data Types + + The central column of the Database Source Browser lists + Field Name and Data Type for the + selected database table. + + + + + + + Each data type has its own characteristics and uses: + + + + + + + + Data Type + Description + Notes + + + + + id + Unique number assigned by the database to identify a + record + A number that is a meaningful reference for the database but not of much use to a human user. Use in displayed fields when counting + records or in filters. + + + text + Text field + Usually uses the Raw Data transform. + + + timestamp + Exact date and time + Select appropriate date/time transform. Raw + Data includes second and timezone information, usually more than is required for a report. + + + bool + True or False + Commonly used to filter out deleted item or patron records. + + + org_unit + A number representing a library, library system, or + federation + When you want to filter on a library, make sure that the field + name is on an org_unit or id data type. + + + link + A link to another database table + Link outputs a number that is a meaningful + reference for the database but not of much use to a human user. You + will usually want to drill further down the tree in the + Sources pane and select fields from the + linked table. However, in some instances you might + want to use a link field. For example, to count the number of patrons who borrowed items you could do + a count on the Patron link data. + + + int + Integer + + + + money + Number (in dollars) + + + + + + + + + Field Transforms + + A Field Transform tells the reporter how to process a field + for output. Different data types have different transform options. + + + + + + + + Raw Data To display a field exactly as it appears in + the database use the Raw Data transform, available for all data + types. + + <guilabel>Count</guilabel> and <guilabel>Count Distinct</guilabel> These transforms + apply to the id data type and are used to count database + records (e.g. for circulation statistics). Use Count to + tally the total number of records. Use Count Distinct to count + the number of unique records, removing duplicates. + To demonstrate the difference between Count and + Count Distinct, consider an example where you want to know + the number of active patrons in a given month, where active + means they borrowed at least one item. Each circulation is linked to a Patron ID, a + number identifying the patron who borrowed the item. If we use the Count + Distinct transform for Patron IDs we will know the number of unique + patrons who circulated at least one book (2 patrons in the table below). If instead, + we use Count, we will know how many books were circulated, + since every circulation is linked to a patron ID and duplicate values are also + counted. To identify the number of active patrons in this example the + Count Distinct transform should be used. + + + + + + + + + + + Title + Patron ID + Patron Name + + + + + Harry Potter and the Chamber of Secrets + 001 + John Doe + + + + Northern Lights + 001 + John Doe + + + Harry Potter and the Philosopher’s Stone + 222 + Jane Doe + + + + + + + Output Type Note that each transform has either an Aggregate or + Non-Aggregate output type. + + + + + + + + Selecting a Non-Aggregate output type will return one row of + output in your report for each row in the database. Selecting an + Aggregate output type will group together several rows of + the database and return just one row of output with, say, the average value or the + total count for that group. Other common aggregate types include minimum, maximum, + and sum. + When used as filters, non-aggregate and aggregate types correspond to Base and Aggregate filters respectively. To see the difference between a base filter and an aggregate filter, imagine that + you are creating a report to count the number of circulations in January. This would + require a base filter to specify the month of interest because the month is a + non-aggregate output type. Now imagine that you wish to list all items with more + than 25 holds. This would require an aggregate filter on the number of holds per + item because you must use an aggregate output type to count the holds. + + diff --git a/reports/report-view-output.xml b/reports/report-view-output.xml new file mode 100644 index 0000000000..919ace0cb3 --- /dev/null +++ b/reports/report-view-output.xml @@ -0,0 +1,95 @@ + + + + + + Viewing Report Output + + + When a report runs Evergreen sends an email with a link to the output to the address + defined in the report. Output is also stored in the specified Output + folder and will remain there until manually deleted. + + + + + To view report output in the staff client, open the reports interface from + Admin (-) + Local Administration + Reports + + + + + Click on Output to expand the folder. Select + Circulation (where you just saved the + circulation report output). + + + + + + + + + + + + + + View report output is the default selection in the + dropdown menu. Select Recurring Monthly Circ by Location by + clicking the checkbox and click Submit. + + + + + + + + + + + + + + A new tab will open for the report output. Select either Tabular + Output or Excel Output. If Bar + Charts was selected during report definition the chart will also + appear. + + + + Tabular output looks like this: + + + + + + + + + + + + + + + If you want to manipulate, filter or graph this data, Excel output would be + more useful. Excel output looks like this in Excel: + + + + + + + + + + + + + + + diff --git a/root.xml b/root.xml new file mode 100755 index 0000000000..255ed5a7a8 --- /dev/null +++ b/root.xml @@ -0,0 +1,136 @@ + + + + Evergreen 1.6 Documentation + Draft Version + Documentation Interest Group + + + + + + + + 2007-2011 + Members of the Evergreen Project + + + + + + + + + + + + This document was updated . + + + + + Introduction + + + + + + + + Public Access Catalog + + + + + + + + + + + + + + Core Staff Tasks + + + + + + + + + + Administration + + + + + + + + + + + + + + + + + + + + + Reports + + + + + + + + + + + + + + + + + Third Party System Integration + + + + + Development + + + + + + + + + + + + + + Appendices + + + + + + + + + + diff --git a/stafftasks/booking.xml b/stafftasks/booking.xml new file mode 100644 index 0000000000..dca13d4b90 --- /dev/null +++ b/stafftasks/booking.xml @@ -0,0 +1,202 @@ + + + + Using the Booking Module + + The Evergreen booking module is included in Evergreen 1.6.1.x and above. The following chapter will help staff create reservations for cataloged and non- + bibliographic items; create pull lists for reserved items; capture resources; and pick up and + return reservations. + + + +
+ Creating a Booking Reservation + booking reservationcreating + Only staff members can create reservations. To initiate a reservation, staff can + + search the catalog, + enter a patron record, + or use the booking module. + + + + Search the catalog to create a reservation + + In the staff client, select Search Search the Catalog + + Search for the item to be booked. + Click Submit Search. + A list of results will appear. Select the title of the item to be reserved. + After clicking the title, the record summary appears. Beneath the record summary, + the copy summary will appear. In the Actions column, select Copy Details. + + The Copy Details will appear in a new row. In the barcode column, click the book now + link. + A screen showing the title and barcodes of available copies will appear. + Enter the user’s barcode in the Reserve to patron barcode box. If the patron barcode + does not exist, a pop up box will appear to alert you to the error. After entering the + patron’s barcode, the user’s existing reservations will appear at the bottom of the + screen. + To the right, a section titled, I need this resource... will allow you to set the dates and + times for which the item should be reserved. If the date/time boxes appear in red, + then the date and time set is incorrect. For example, if the time for which the + reservation is set has already passed, the boxes will appear in red. The times must be + set correctly for the reservation to be accomplished. If the item has already been + reserved at the time for which you are trying to reserve the item, then you will receive + an error message. + Finally, select the barcode of the item that you want to reserve. If multiple copies of + the item exist, choose the barcode of the copy that you want to reserve, and click + Reserve Selected. If you do not select a barcode, and you click Reserve Selected, you + will receive an error message. If you do not have a preference, you do not have to + select a barcode, and you may click Reserve Any. One of the barcodes will be pulled + from the list. + An item must have a status of available or reshelving in order to + be targeted for a reservation. If the item is in another status, the reservation will fail. + After you have made the reservation, a message will confirm that the action succeeded. Click OK. + The screen will refresh, and the reservation will appear below the user’s name. + + + + Enter a patron’s record to create a reservation + + Enter the barcode or patron information, and click Search to retrieve the patron’s record. + The match(es) should appear in the right pane. Click the desired patron’s name. In the + left panel, a summary of the patron’s information will appear. Click the Retrieve + Patron button in the right corner to access more options in the patron’s record. + Eight buttons will appear in the top right corner. Select Other Booking + to create, cancel, pick up, and return reservations. + The Copy Details will appear in a new row. In the barcode column, click the book now + link. + A screen showing the title and barcodes of available copies will appear. + Enter the user’s barcode in the Reserve to patron barcode box. If the patron barcode + does not exist, a pop up box will appear to alert you to the error. After entering the + patron’s barcode, the user’s existing reservations will appear at the bottom of the + screen. + To the right, a section titled, I need this resource... will allow you to set the dates and + times for which the item should be reserved. If the date/time boxes appear in red, + then the date and time set is incorrect. For example, if the time for which the + reservation is set has already passed, the boxes will appear in red. The times must be + set correctly for the reservation to be accomplished. If the item has already been + reserved at the time for which you are trying to reserve the item, then you will receive + an error message. + Finally, select the barcode of the item that you want to reserve. If multiple copies of + the item exist, choose the barcode of the copy that you want to reserve, and click + Reserve Selected. If you do not select a barcode, and you click Reserve Selected, you + will receive an error message. If you do not have a preference, you do not have to + select a barcode, and you may click Reserve Any. One of the barcodes will be pulled + from the list. + An item must have a status of available or reshelving in order to + be targeted for a reservation. If the item is in another status, the reservation will fail. + After you have made the reservation, a message will confirm that the action succeeded. Click OK. + The screen will refresh, and the reservation will appear below the user’s name. + + + + Use the booking module to create a reservation + + Select BookingCreate or Edit Reservations + Enter the barcode of the item and click Next. + A screen showing the name of the available resource will appear. + Enter the user’s barcode in the Reserve to patron barcode box. If the patron barcode + does not exist, a pop up box will appear to alert you to the error. After entering the + patron’s barcode, the user’s existing reservations will appear. + To the right, a section titled, I need this resource... will allow you to set the dates and + times for which the item should be reserved. If the date/time boxes appear in red, + then the date and time set is incorrect. For example, if the time for which the + reservation is set has already passed, the boxes will appear in red. The times must be + set correctly for the reservation to be accomplished. If the resource has already been + reserved at the time for which you want to reserve the item, then the item will + disappear. + Finally, select the resource that you want to reserve. If multiple items or rooms exist, + choose the resource that you want to reserve, and click Reserve Selected. If you do + not select a resource, and you click Reserve Selected, you will receive an error + message. If you do not have a preference, you may click Reserve Any, and one of the + resources will be pulled from the list. + After you have made the reservation, a message will confirm that the action + succeeded. Click OK. + The screen will refresh, and the reservation will appear below the user’s name. + + +
+
+ Cancelling a Reservation + booking reservationcancelling + Staff members can cancel a patron’s reservation through the Create or Cancel Reservations tab available in a patron’s record. Staff members can also cancel a + reservation immediately after it has been made. + + Enter the patron’s record to cancel a reservation + + Search for and retrieve a patron’s record. + Select OtherBookingCreate or Cancel Reservations. + The existing reservations will appear at the bottom of the screen. + To cancel a reservation, highlight the reservation that you want to cancel. Click Cancel Selected. + A pop-up window will confirm that you cancelled the reservation. Click OK. + The screen will refresh, and the cancelled reservation will disappear. + To the right, a section titled, I need this resource... will allow you to set the dates and + times for which the item should be reserved. If the date/time boxes appear in red, + then the date and time set is incorrect. For example, if the time for which the + reservation is set has already passed, the boxes will appear in red. The times must be + set correctly for the reservation to be accomplished. If the item has already been + reserved at the time for which you are trying to reserve the item, then you will receive + an error message. + + + + Cancel a reservation immediately after it has been made + + Create the reservation. + Follow steps four through six in the section, Enter the patron’s record to cancel a reservation, to cancel the reservation. + The existing reservations will appear at the bottom of the screen. + + +
+
+ Creating a Pull List + booking reservationcreating a pull list + Staff members can create a pull list to retrieve items from the stacks. + + To create a pull list, select BookingPull List. + To find a pull list for your library, select a library from the dropdown box adjacent to See pull list for library. + You can decide how many days in advance you would like to select reserved items. Enter the number of days in the box adjacent to Generate + list for this many days hence. For example, if you would like to pull items that are needed today, you can enter 1 in the box, and you will retrieve items that need to be pulled today. + Click Fetch to retrieve the pull list. + The pull list will appear. Click Print to print the pull list. + +
+
+ Capturing Items for Reservations + booking reservationcapturing items + Staff members can capture items for reservations. + + In the staff client, select BookingCapture Resources. + Enter the barcode of the items to be captured. Click Capture. + A Capture Succeeded message will appear to the right. Information about the item will appear below the message. You can print this + information as a receipt and add it to the item if desired. + +
+
+ Picking Up Reservations + booking reservationpicking up + Staff members can help users pick up their reservations. + + In the staff client, select BookingPick Up Reservations + Enter the user’s barcode. Click Go. + The title available for pickup will appear. Highlight the title of the item to pick up, and click Pick Up. + The screen will refresh to show that the patron has picked up the reservation. + +
+
+ Returning Reservations + booking reservationreturning + Staff members can help users return their reservations. + + In the staff client, select BookingReturn Reservations. + You can return the item by patron or item barcode. Choose Resource or Patron, enter the + barcode, and click Go. + A pop up box will tell you that the item was returned. Click OK. + The screen will refresh to show the reservations that remain out and the resources that have been returned. + +
+
+ diff --git a/stafftasks/cataloging.xml b/stafftasks/cataloging.xml new file mode 100644 index 0000000000..7f2ddd6b64 --- /dev/null +++ b/stafftasks/cataloging.xml @@ -0,0 +1,696 @@ + + + + Cataloguing + + This chapter explains the cataloguing procedures carried out from the staff client. + + +
+ Locating Records + + Search + cataloguinglocating records + Search functionality may be functioned through: + + CatalogingSearch the Catalog + Searchthe Catalog + Press F3 + + + Specialized search functionality for catalogers is located on the left-hand side of the search screen (Quick Search). + + Enter search criteria. + Click Submit. + Click on the title link for the desired record. + The complete record will display in the OPAC view. + Use the Actions for this Record dropdown menu to manipulate the record. + + Use ocn as a prefix for nine digit OCLC numbers. (e.g. ocn123456789) + Use ocm as a prefix for OCLC numbers that are eight digits or shorter. Evergreen will automatically prefix the number with zeros so that it is nine digits. + (e.g. ocm01234567, or ocm00123456) + Do not use hyphens when searching by LCCN. Substitute a 0 in place of the hyphen. (e.g. 2001001234) + + + MARC Expert Search + Located beneath the “Quick Search” box on the catalog search screen. + + Enter tag definitions and search criteria. + Click Submit. + Search multiple tags by clicking Add Row. + Click the title link to display the full record. + + To set default record views for a username, select Actions for this Record Set bottom interface as + Default. + + + Adding and Editing Items + cataloguingadding and editing items + + Adding Holdings to Title Rrcords + cataloguingadding holdings + + Retrieve an existing bibliographic record. + Actions for this Record->Holdings Maintenance. + The Record opens in record summary view. To display existing volume and copy records, check the boxes for + Show Volumes and Show Items. + These boxes are sticky and will remain checked for the login until manually de-selected. + + Highlight the appropriate library from the display. + Select Actions for Selected Rows Add Volumes. + Use Tab or Enter to move through the displayed fields (# of volumes, call number, copies, and barcodes). + New boxes will display after Enter or Tab is selected. If a call number exists in the MARC record, use Apply to bring it in to the volume + record. + After entering the barcode number(s), click Edit then Create. + The Copy Editor opens in a new window. Move through the fields to edit information as necessary. Click Apply on every edit. + When finished, click Create Copies. + + New items are assigned a status of In Process. Items must be checked in to become Available. Alternatively, use Edit Item Attributes from the Actions for Selected + Rows to change statuses to Available once records have been created and saved to database. The creation and use of item record templates is recommended. + + + + Copy Alerts and Notes + + + Copy Alerts + cataloguingcopy alerts + Copy alerts are useful alerts for physical item copies. + Staff must be granted permission to override alerts at checkout or checkin. + + + Creating copy alerts: + Searchfor copies by Barcode. + Enter an item barcode. + Select the row. + Actions for Selected Items Edit Item Attributes. + Click in the alert message box and enter text. + Click Apply. + Click Modify Copies. + + Copy alerts must be manually removed. Follow the same process, but delete the text in the Alert Message box, to remove copy alerts. + + Adding or removing copy alerts to or from multiple items: + Retrieve items to the Item Status screen. + Select all items to be changed by highlighting the first item in the list, holding down the Shift key, and clicking on the last item. Select several, non-sequential items, by holding down the Ctrl key and clicking on the required items. + Continue to Edit Item Attributes, as above. + + + + Viewing Copy Alerts + Copy alerts may be viewed from the Item Status screen, at checkin, and at checkout. + To view alerts from the Item Status, enter the barcode number. Select the item and click Actions for Selected + Items Show Item Details. + To view alerts from the Item Status, enter the barcode number. Select the item and click Actions for Selected Items + Show Item Details. + The copy alert will display automatically at checkout and checkin. + + + Copy Notes + cataloguingcopy notes + Copy notes are informational only. They may be internal or made available to the public in the OPAC. + + Accessing copy notes from the copy editor: + Click Copy Notes. + If a note exists, it will display with a yellow background. + Click Add Note to create a new copy note. Select the Public checkbox to make the note visible in + the OPAC. + Click Add Note to display the new note. + Use the Delete This Note button to remove a note from a copy record. + + + +
+
+ Adding New Bibliographic Records + cataloguingadding bibliographic records + Evergreen allows new bibliographic records to be added to the database through Z39.50 searching, MARC record file uploads, and original cataloging. + + Importing MARC Records via the Z39.50 Interface + Z39.50importing records + + Cataloging Import Record from Z39.50 + Select single or multiple pre configured Z39.50 targets from the list. Only subscription services require logins. Once databases have + been selected, click Save as Default to save the services to be searched and any usernames/passwords. These will be automatically selected the next + time the Z39.50 screen is opened. + Fill in search criteria for the item and click Search. + Active search fields will adjust to the selected targets. Keyword and Subject will only be active if the local catalog is selected. If multiple + targets are selected for a search, an active box may apply to only one target. + Search results display in the bottom pane. To view long lists of results, use Hide Top Pane to view the results. Information about + each record retrieved appears on a separate summary line, with various columns of information. + The Service column indicates where the record was found. If nativeevergreen-catalog is listed in the service + column, the record is already in the Evergreen database. + From this screen users may: + + + + + Retrieve further results, if applicable + View MARC records + Export MARC records + Import or overlay MARC records + + + + Importing Records + cataloguingimporting records + + Highlight the record and click MARC Editor for Import. + The record opens in the MARC Editor. Edit fixed and bibliographic fields. + When finished, click Import Record. + Click OK. + If Fast Item Add was used, the copy editor will display. Make necessary adjustments and click Create Copies. + The record will display in the catalog view. + If you did not utilize Fast Item Add as described above, you may now attach holdings as described in Adding holdings to title records. + + Select Fast Item Add to input the call number and barcode data from this screen. This box is + sticky for the login. Please note that the status of items created this way is + Available rather than In Process. + + + Uploading MARC Files + cataloguinguploading MARC files + Title records that do not already exist in the Evergreen database may be uploaded directly to the catalog through vendor-supplied MARC files. Multiple title records + can be uploaded and added at the same time. + + Cataloging MARC Batch Import/Export. + The MARC File Upload page opens and displays the Import Records form. + Complete the form, creating a new Upload Queue. + + + Select Auto-Import Non-Colliding Records to automatically import MARC records from the file, if they are not already + in the Evergreen database. + Leave Select a Record Source defaulted to the OCLC setting. + Click Browse... to choose the source MARC file. + Click Upload. + + + Details from the file upload will appear. By default Limit to Non-Imported Records is selected and the table only displays MARC + records that conflict with others already in Evergreen. You may click Matches to view the conflicting Evergreen records. If the matched records + are not true matches, it is still possible to upload the selected records using the Actions drop-down menu. + The Import Attached Holdings option requires additional server configuration. + + + + Creating New MARC Records + cataloguingcreating new MARC records + New MARC records may be created in Evergreen using MARC templates. For detailed information on MARC standards, visit the Library of Congress website: + http://www.loc.gov/marc/ + + Cataloging Create New Marc Record. + The MARC Template screen will open. + Select the appropriate template and click Load. + A blank MARC record will load. + Complete the MARC record according to library policy. Tags and subfields may be added or deleted as required (right click on a field to view + available options). + If the Fast Item Add box is selected, enter a call number and barcode. + + Click Create Record. + The record is created and will open in the current default view. Holdings may now be added. + If the Fast Item Add box was selected, the copy editor will open after Create Record is clicked. + + +
+
+ Working with the MARC Editor + cataloguingMARC editor + The MARC Editor allows MARC tags, sub-fields, and indicators to be edited. + OPAC icons for text, moving pictures and sound rely on correct MARC coding in the leader and the 008, as do OPAC search filters such as publication date, item type, or + target audience. Bibliographic matching and de-duplicating also rely on correct MARC coding and consistency in use and content in particular MARC tags. + + Editing MARC Records + cataloguingediting MARC records + + Retrieve the record. + Actions for this Record MARC Edit. + The MARC record will display. + + Select Stack subfields to alter subfields display. + Right click into a tag field to add/remove rows or replace tags. + To work with the data in a tag or indicator, click or Tab into the required field. Right click to + view acceptable tags or indicators. + When finished, click Save Record. + Click OK. + + The MARC Editor may be navigated using keyboard shortcuts. Click Help to see the shortcut menu from within the MARC Editor. + + + MARC Record Leader and MARC fixed field 008 + MARCMARC leader + MARCfixed field 008 + Parts of the leader and the 008 field can be edited in the MARC Editor via the fixed field editor box displayed above the MARC record. Information about the leader and + the 008 can be found on the Library of Congress’s MARC Standards page at http://www.loc.gov/marc/. + + + To edit the MARC record leader + Retrieve and display the appropriate record in MARC Edit view. + Click into any box displayed in the fixed field editor. + Press Tab or use the mouse to move between fields. + Click Save Record. + Click OK to save record edits. + The OPAC icon for the appropriate material type will display. + + The MARC Editor may be navigated using keyboard shortcuts. Click Help to see the shortcut menu from within the MARC Editor. + + + Overlaying MARC Records + cataloguingoverlaying MARC records + Overlaying a MARC record replaces an existing MARC record while leaving all holdings, holds, active circulations, bills, and fines intact. + In Evergreen, a record must be marked for overlay. The mark for overlay is by login. Only one record at a time may be marked for overlay. When another + record is marked for overlay, the previously marked item is de-marked. Once a record is marked, it remains marked until overlaid or until the user logs out + of Evergreen. + + + Marking a record for overlay + Search for and retrieve a record for overlay. + Select Actions for this Record Mark for Overlay. Record is now + marked. + + + Overlaying the marked record + Once the record is marked for overlay, proceed to search for and import the new record from a Z39.50 target. + Select Cataloging Import Record from Z39.50. + Choose targets and enter search terms. + Click MARC Editor for Overlay. The TCN of the Evergreen record marked for overlay is displayed. + The record displays in MARC Edit view. Edit the record as necessary. + Click Overlay Record. + The existing record will display along with a prompt to confirm the overlay. Panes may be moved to view the record in entirety, if required. + Click Overlay. + Confirm the overlay. The record in Evergreen is overlaid with the new MARC record. All preexisting holdings remain intact. + + +
+
+ Cataloging Templates + cataloguingtemplates + This simplesect explains creating, using, exporting, and importing item record templates for cataloging. Use of templates enhances item creation and helps ensure + consistency in record format in the database. + + + Creating item templates + Search for and retrieve a record. + Select Actions for this Record Holdings Maintenance. + Select an item record in list and click Actions for Selected Rows Edit Item Attributes. + + The Copy Editor will open. Select the required template attributes by moving through fields and clicking Apply + for every edit. + Click Save when edits are complete. + Enter a template name at the prompt + Click OK. + The template is now saved. Click OK. + This template may now be selected from the drop down menu. + Click Close to exit the Copy Editor. + + Once item templates have been created, they may be employed when items are added to the database. + + + Using item templates: + Retrieve a record and display volumes. + Select the appropriate volume. + Actions for this Row Add Items. + Enter the number of copies and barcode(s). + Click Edit then Create to open the Copy Editor. + Choose the appropriate template from the drop down menu. + Click Apply. + Make edit as necessary. When finished, click Create Copies. + Items are created. + Click OK. + + Saved templates are only viewable by the login that created them. Templates must be exported in order to share templates amongst staff members. + Exporting Item Templates + + Click Export in the top left hand corner of the Copy Editor. This will export all templates for the user. + Select where the template should be saved on the workstation, name the file, and click Save. + Click OK. + + + + Importing templates: + Click on Import in the top left hand corner of the Copy Editor. + Navigate to the file’s location, select the file and click Open. + Click OK. + +
+
+ Buckets + cataloguingbuckets + The Buckets function in Evergreen groups records together and allows for batch changes and the creation of pull lists. + Batch changes allow many records to be grouped together for changes to be enacted on them all at once, instead performing individual edits. Buckets allow materials to be + tracked and worked by multiple staff members. + Possible bucket uses include batch editing/deleting and grouping like records (e.g. Christmas items) to temporarily change their statuses. Buckets may also be used to + create bibliographies and/or pull lists. + Buckets are useful to group records together over a period of time. Evergreen’s bucket functionality allows records to be added to new or existing buckets where they remain + until they are manually ungrouped. An item’s location in a bucket does not affect normal library functions such as circulation. Being in a bucket is not an item status. + Buckets may be shared or private and are associated with a login. + When working with buckets, it is important to ensure that record type corresponds with bucket type. Copy records may not be added to bibliographic + record buckets and vice versa. + Buckets may be created independently of accessing records or they may be created from a record view. + + Cataloging Manage Record Buckets. + Bucket Actions New Bucket. + Name the bucket and click OK. + Confirm the action. + The Bucket View changes to display the new bucket as the active bucket. The bucket is numbered and the creating owner is + identified. + All buckets created by this login are available in the drop down menu. + + + + Creating record buckets from within a record + Search for, retrieve, and display the desired bibliographic record. + Choose Actions for this Record Add to Bucket. + Select Add to New Bucket. + Name the bucket and click OK. The results are the same as creating a bucket using the steps above. + + Once a bucket has been added, records may be added to it. + + Search for, retrieve, and display the desired bibliographic record. + Choose Actions for this Record Add to Bucket. + Select the appropriate bucket and click Add to Selected Bucket. + To confirm this action, go back to the Record Bucket tab. The bucket now contains the record. + Continue to add records, if required. + + + To work from within the buckets module + Choose Cataloging Manage Record Buckets. + Select the Record Query tab on the left side of the screen. + Select the appropriate bucket and click Add to Selected Bucket. + Use Add All to Pending Records or select individual records and Add Selected to Pending Records. + Select the Pending Records tab. + Click Add All to current Bucket or Add Selected to current Bucket. + + + + The column picker allows the data display to be manipulated within the bucket. + Clicking on List Actions Save List CSV to File exports all column headers and + displayed data to the workstation in a text file format. + This feature may be used to create bibliographies or similar lists. + Clicking on List Actions Print List CSV prints column headers and + displayed data. + + + + Adding Copy Records to Copy Buckets + cataloguingcopy buckets + While creating copy buckets is similar to creating record buckets (simply choose Copy Buckets in the menu choice), there are significant differences in adding copy + records to a bucket. Records must be added to copy buckets from the copy record level. This may be done from several locations within the Evergreen client. + + + Adding copy records from the holdings maintenance record summary screen: + Select the required record and choose Actions for Selected Rows Add Items to Buckets + . + Add the record to an existing bucket or create a new bucket on the fly. + The copy record is now in the selected bucket. The displayed data differs slightly from the Record Bucket view. + + + + Adding copy records from the item status screen: + Select the required record(s) and choose Actions for Catalogers Add Items to Buckets + or choose Actions for Selected Items Add to Item Bucket + . + Select the desired bucket and click Add to Selected Bucket or Create a New Bucket. + + + Adding copy records from within the copy buckets module: + Enter item barcode(s) into the Pending Copies barcode box. + Click Submit. + Item(s) will display. + Use Add All or select the appropriate items and Add Selected to move items to the bucket displayed in the + bottom pane. + + + + Working with Records in a Bucket + cataloguingrecord buckets + Once records have been placed in a bucket, a variety of functions may be performed. + + + To batch edit records: + cataloguingrecord bucketsbatch edit + Access the Copy Bucket view by choosing Edit + Copy Buckets + . + Select the appropriate bucket from the drop down menu. + When the bucket is displayed click Edit Item Attributes. + The Copy Editor window opens. Note that all the barcodes, call numbers, + and shelving locations display. + Make the desired edits. + Apply each change. + Click Modify Copies to save all changes. + Click OK. + The desired changes are made for all selected items. + + Use caution when using the Transfer to Specific Volume action. + + Removing records from buckets + cataloguingbucketsremoving records + Select the desired record. + Click Remove Selected from Bucket + + The same procedure is used for both Record and Copy Buckets + + + Retrieving + cataloguingshared buckets + Access the copy or record bucket management screen as described above. + In drop down menu beside Choose a bucket… select Retrieve shared bucket. + Enter the desired bucket number and click OK. + The requested bucket now displays. The bucket number (assigned by Evergreen) and owner displays. + + +
+
+ Merging Bibliographic Records + cataloguingmerging bibliographic records + A common application for the merge function in Evergreen is to replace brief records with full records. This is only necessary when a full record cannot be located + in a Z39.50 target. + Any volume and copy records or holds associated with the brief record will be transferred to the full record upon merging. + + Create a bucket for the records you wish to merge. + Identify records to be merged and add them to the bucket. + Retrieve the bucket by selecting Edit Record Buckets + . + Click Merge All Records. + Select one record as the Lead Record. (Generally, the better quality, full record.) + Click Merge. + The brief record is subsumed by the full record. All of the volumes, copies and holds associated with the brief record are now attached to the full + record. + +
+
+ Adding holdings to title records + cataloguingadding holdings + This lesson demonstrates adding your library’s volume and copy records to a title record. + + + Search the catalogue for a record that matches the item in hand, as described in . + + + + When record is displayed, select + Actions for this Record + Holdings Maintenance + . + + + screenshot of staff client + + + + + + + + + + + Record opens in record summary view. Select your library from + the list and click + Actions for Selected Rows + Add Volumes + . + + + screenshot of staff client + + + + + + + + + + Enter amount in # of volumes field, type in a call number, or + if the call number pulled from MARC record is acceptable click + Apply to bring call number down to call number field, enter + number of copies, scan barcode, and click Edit then Create. + Use Tab or Enter to move through fields. + + + screenshot of staff client + + + + + + + + + + + + + The Copy Editor opens. Make all necessary edits by moving + through fields and clicking Apply on every edit, and click + Create Copies + + + screenshot of staff client + + + + + + + + + + + Click OK. + + + screenshot of staff client + + + + + + + + + + + + + Once an item is created it is assigned a status of In Process. Item + must be checked in to become Available or cataloguer can choose to + Edit Item Attributes and change status to + Available once record has been created and saved to + database. + Creation and use of item record templates is recommended. See for + more information. + + + New Copies and Holds + Because of the way Evergreen targets holds new copies are not guaranteed to fulfill + pre-existing holds correctly until 24 hours after cataloguing. If your cataloguing + turn-around time is shorter than 24 hours you can ensure the new copy is captured correctly + at check in with the steps below. + + + After adding the item select + Actions for this Record + View Holds + + + + If there are outstanding hold requests, select the hold that is next in line + then choose + Actions for Selected Holds + Find Another Target + . This forces Evergreen to re-target the hold and recognize the newly + catalogued item. + + + Check in the new item to capture it for the selected hold. + + + +
+
+ Cataloguing Electronic Resources -- Finding Them in OPAC searches + cataloguingelectronic resources + For electronic resources to be visible in the catalog, you should add the 9 subfield in the 856 data field to indicate + which organizational units will be able to find the resource. + + + Open the record in the cataloging module + + + Add the 9 subfield to the record and enter the short name of the organizational unit for the value. For example: +856 40 $u http://lwn.net $y Linux Weekly News $9 BR1 + would make this item visible to people searching in a library scope that contains BR1. + You can enter more than one 9 subfield or you can enter the parent organizational unit to make this item visible in more than + one organizational unit under the same parent organizational unit. + + + + Save the record + After a short time the electronic resource should appear in OPAC searches + + +
+
+ Printing Spine and Pocket Labels + labelsspine + labelspocket + Copy buckets may be used to group items requiring labels. + + Locate the correct copy bucket. + Select Show Status. + Items display in the Item Status screen. + Select items requiring labels (hold the Ctrl key down and click the required items to select multiple items; if all items require labels, hold the + Shift key down while clicking the first and last items in the list). + Choose Actions for Selected Items Print Spine Labels + . + The Spine Labels screen will display. + Use the form on the left of the screen to modify spine and pocket label display. + Select Re-Generate to view changes. (Checkbox selections are saved for a login, but Re-Generate must be clicked to view these changes. + On line: selections are not saved.) + Click Available Macros to view auto-fill options for custom lines. + When finished, click Preview and Print. + From the Print Preview screen, select Print Page. + +
+
+ Deleting Records + cataloguingdeleting records + + Batch deletions: + Create a copy bucket for the items to be deleted (Cataloging Manage Copy Buckets + ; create a New Bucket + Enter the barcodes for the to-be-deleted items into the Pending Copies simplesect of the Copy Buckets screen. + Add All of the items to the selected bucket. + Delete All from Catalog. + The Deleted? status for each item will change from No to Yes. + + When all items have been deleted from a bibliographic record, the bibliographic record is also deleted from the system. The record may still be retrieved through the client, + but will display as Deleted. These records will not display in the OPAC. + Individual item records may be deleted from the Holdings Maintenance screen. + + + To delete individual records: + Highlight the item (barcode) to be deleted. + Select Actions for Selected Rows Delete Items + . + Confirm. + + If the deleted item was the last item attached to the MARC record, the MARC record will be automatically deleted. + Occasionally, a bibliographic record may need to be deleted (e.g. an incorrect record was imported to the system). + + Retrieve the record. + Choose Actions for this Record Delete Record + . + + + + To restore records: + Retrieve the record through the staff client. + Actions for this record Undelete Record. + Confirm the action by selecting the checkbox and Undelete in the resulting popup box. + +
+ +
diff --git a/stafftasks/circulation.xml b/stafftasks/circulation.xml new file mode 100644 index 0000000000..8f5ef04b7e --- /dev/null +++ b/stafftasks/circulation.xml @@ -0,0 +1,1582 @@ + + + + Circulation + + This chapter presents explains the circulation procedures carried out from the staff client. + + +
circulationpatron records + Patron Records + + Searching Patrons + + + Search one field or combine. + Truncate search terms for more search results. + Include inactive patrons checkbox. + Limit results to patrons in dropdown. + + + + + Registering New Patronscirculationregistering new patrons + + + Mandatory fields = Red. + Save and clone user button: the contact info is copied into the next record. Records created using this method + are automatically grouped together with the original record and share the same address, which can only be edited in the original record. + Staff accounts can be added here just like patron accounts. + + + + Clone User from Existing Group Membercirculationcloning users + + Open patron record, click Other. + Select Group. + Highlight a group member to clone and right click. + Select Register a New Group Member by Cloning Selected Patrons. + A Register Patron Clone for Group tab will open displaying the Evergreen User Editor. + Enter required patron information. + Click Save User. + After saving the clone record, the User Editor reverts to another clone template; create additional family/group member records. + Close the Register Patron Clone for Group tab. + + + + Updating Patron Informationcirculationupdating patron information + + Retrieve the patron record + Edit + Finish then click Save User. + Confirmation message, User updating is successful + + + + Extend Account Expiration Datecirculationextending account expiration date + All patron accounts are set to expire in one year – this allows staff to verify patron contact information annually and update any out-of-date + information. + There is no warning that the account will soon expire. + Loans are NOT shortened if due date is after the account expiration date. + NO loans are possible until the account expiration date is extended. + + Access patron account, open Edit function tab. + Click 4. Groups and Permissions + At Account Expiration Date, highlight the year and type the new year + Click 7. Finish, click Save User + + + + Lost Library Cardscirculationlost library cards + + Retrieve the patron record. + Click Mark Lost button. + FinishSave User. + + + + A lost card cannot be reinstated (A warning message will display; use the new card to retrieve the user’s + record) + + + + Resetting a Patron's Passwordcirculationresetting patron password + + Retrieve the record. + Click Reset Button next to password field + + + The existing password is not displayed in patron records for security reasons. + + + + Barring a Patroncirculationbarring patrons + + Select 4: Groups and Permissions. Select the Barred checkbox. + The Alert Message is required. + Click FinishSave User. + + Barring a patron from one library bars that patron from all consortium member libraries. + To unbar a patron, uncheck the Barred checkbox and remove the alert message. + Barred: Stops patrons from using their library cards; alerts the staff that the patron is banned/barred from the + library. The "check-out" functionality is disabled for barred patrons (NO option to override – the checkout window is unusable + and the bar must be removed from the account before the patron is able to checkout items).  These patrons may still log in to + the OPAC to view their accounts. + Blocked: Often, these are system-generated blocks on patron accounts.  Some examples: + + Patron exceeds fine threshold + Patron exceeds max checked out item threshold. + + + A notice appears when a staff person tries to checkout an item to blocked patrons, but staff may be given permissions + to override blocks. + + + Patron Alertscirculationpatron alerts + There are two types of Patron Alerts: + + System-generated alerts: once the cause is resolved (e.g. patron's account has been renewed), the message + will disappear automatically. + + View from Messages or OtherDisplay Alerts and + Messages + + + + Staff-generated alerts: must be removed manually. – Yellow background in summary + To insert an alert: + + + Select Edit Groups and Permissions + + Alert Message field. + Finish and Save User. + + To remove an alert: + + Click Clear button under the Alert Message box. + Save the record. + + + + + A notice appears when a staff person tries to checkout an item to blocked patrons, but staff may be given permissions + to override blocks. + + circulationpatron notes + Patron Notes + See Notes message appears + Notes are strictly communicative and may made visible to the patron, via their account on the OPAC. + + + To insert/remove a note: + Open a patron record, click Other + Select Notes. + Click Add New Note. + Select if notes will be visible for staff only, or visible to the patron when logged into My Account in the OPAC. + Add note Title and content. + Click Add Note + Click OK + To delete a note, go to Other Notes and use the + Delete This Note button under each note. + + + + Merging Patron Recordscirculationmerging patron records + + Merging patron Records From the patron search screen: + Search by the terms shared by the two records + Select the two records to merge by pressing down the CTRL key and clicking each record. + Click Merge Patrons. + Select the record you want to keep by checking the radio button Lead Record above the appropriate record. + + Click the Merge Patrons button. + Once two records have been merged, the notes, bills, holds and outstanding items under the non-lead record + are brought to the lead record. Staff-inserted alert messages are not transferred. + + + + Merging patron records from the patron group screen: + Retrieve one of the two patron records you want to merge. Go to Other Group. + The patron record is displayed as a group member. Choose Action Move another patron to this + patron group. + At the prompt, scan or type the patron's barcode. Click OK. + Confirm the move by clicking the Move button on top of the screen. Click OK on the confirmation pop-up window. + + Both records are displayed as group members. Select both records by pressing the CTRL key and clicking each + record. Choose ActionMerge Selected Patrons. + The merging records window pops up. Choose the lead record and continue to merge records as described in + Step 4. + The merged record will still show under group members. Both members point to the same patron + record. + + +
+
+ Circulating Itemscirculationcirculating items + Regular circulation: circulation of items in the regular collection. + Pre-cataloged circulation: circulation of items that have a barcode but have not yet been cataloged. These items + may be checked out and then sent to cataloging when returned. + Non-cataloged circulation: circulation of items that are not in the catalog and do not have a barcode. + + Check Out (<keycap>F1</keycap>) + + + To check out regular items: + Click Check Out button or hit F1 to access Retrieve Patron by Barcode + Scan the patron barcode + Patron Account opens to the Check Out function tab + Scan or enter the item barcode. Click Submit or hit Enter (for manual entries). + Continue to scan barcodes until all items are charged. + When finished, click Done to generate a receipt or to exit patron record, if not printing slip receipts. + + + + + Pre-cataloged Itemscirculationpre-cataloged items + Pre-cat items are those items that have yet to be added to the database or that have barcode labels, but are not attached to an existing bibliographic record. + ONLY use Pre-Cat Checkout as a last resort, such as when a patron brings the item to the desk from the shelf and MUST have it that day. Otherwise, + ask the patron to wait until you can have the item correctly processed. + + + Checking out pre-cataloged items from the check out screen: + Scan the item barcode. + An alert will appear stating: Mis-scan or non-cataloged item. + To continue with check out, click Pre-cataloged. + Enter title and author information and click Checkout. + Item is added to the list of Check Outs + + + Checking in pre-cataloged items + Scan the item barcode. + An alert will appear stating: "This item needs to be routed to Cataloging" + Click OK. + The item is added to the list of Check Ins, marked with: [barcode number] needs to be cataloged, Route To location = Cataloging and + Status = Cataloging + The item MUST be routed to your holdings maintenance staff to be added to the database before further + check outs. + + + + Non-cataloged Itemscirculationnon-cataloged items + Non-cataloged items may be more familiar as Ephemeral items – they are those items that libraries do not wish to catalog, + but do wish to track for circulation statistics. + Items are checked out with a due date but when the due date expires, the items disappear from the + patron's record. + No fines accrue. + Circulation statistics are collected. + + Checking Out Non-cataloged Items From the Check Out screen: + Click Check Out button or hit F1 to access Retrieve + Patron by Barcode. + Scan patron barcode. + The Patron Account opens to Check Out function tab. + Click on Barcode to open the non-cataloged items selection list. + Click the type of item, such as Paperback Book; the box for the barcode will become grayed out and labeled + Non-cataloged. + Click Submit. + In the pop-up, enter the number of items being checked out. + Click OK. + The items are added to the Check Out list with a normal due date. + + Non-cataloged items do not appear in the list of items out unless you select that option. + Click OK. + + + Due Datescirculationdue dates + Circulation periods are pre-set. When items are checked out, due dates are automatically calculated and + inserted into circulation records if the Due Date is set Normal on the Check Out screen. Different due dates + may be set to override this circulation period. + This process will allow staff to set a non-standard loan period prior to scanning the item in Check Out. + + Click Check Out button or hit F1 to Retrieve Patron. + Scan the patron barcode. + Scan the item barcode + In the box labeled Normal, select a pre-set loan period from the list; OR + Highlight Normal and type a specific date in YYYY-MM-DD format + The item is checked out with the special due date. + The special due date applies to all subsequent items until it is changed or the patron record is exited. + + + + Check In (<keycap>F2</keycap>) + circulationcheck in + + Regular check in: + Click Check In button or hit F2 to open Item Check In tab. + + Scan item barcode. + Continue to scan barcodes until all items are discharged. + Close tab when done. + + + + Backdated Check Incirculationbackdated check in + Used for checking items in from bookdrops or for unexpected closings. + + Click the Check In button or hit F2. + Enter backdated date in the Effective Date field (YYYY-MM-DD format). + Click outside of the Effective Date field: the top green bar changes to red. The new effective + date displays at the top of the window. + Scan items. + When finishing backdated check-in, change the Effective Date back to the current + date or close tab. + + + + Renewal and Editing an Item's Due Date + circulationrenewelEditing an item's due date + Checked-out items can be renewed according to library policy. The new due date is calculated from the renewal + date. Existing loans may be extended to a specific date by editing the due date. + + Renewing items + Retrieve the patron record. + Items Out screen. + Select item(s) to renew. + Select Actions for Selected Items Renew. + To renew all items in the account, click Renew All. + To view the new due date, click Refresh. + + Renewal may also be done from the Items Status screen. See . + + Editing the due date of items: + From the patron record, open Items Out tab + Highlight the item, right click, and select Edit Due Date + To update multiple items highlight the first item, press and hold Ctrl, highlight additional items + In the pop-up, enter the new due date. + Click OK. + Click Refresh to update the list. + + Select multiple items by pressing down the CTRL key and clicking each item to edit. + Editing the due date does not affect renewal count. + + + Marking Items <emphasis>Lost</emphasis> and <emphasis>Claimed Returned</emphasis> + circulationlost items + + To mark items as lost: + Retrieve the patron record. + Click Items Out tab. + Select appropriate item(s). + Select Actions for Selected Items Mark Lost (by Patron). + Refresh to reflect changes. Lost item(s) display in the Lost/Claimed Returned/Long Overdue + field. + + Marking an item lost will automatically bill the patron the replacement cost of the item, plus a + processing fee, as determined by local policy. If the cost is 0.00, a charge may be manually added to the bill. See the + section called for details + If the lost item is returned, the bill and payment (if bill has been paid) will not be cancelled/refunded automatically. + These bills must be dealt with manually, as per local policy. + + Marking items as <emphasis>Claimed Returned:</emphasis>circulationclaimed returned + Retrieve the patron record. + Click Items Out. + Select item(s). + Right click, and select Mark Claimed Returned. To update multiple items highlight the first item, + press and hold Ctrl, highlight additional items and select Mark Claimed Returned. + Enter a return date (YYYY-MM-DD format) and click OK. + The “Claimed Returned” item will display in the Lost/Claimed Returned/Long Overdue + field. + + + If the item is overdue and the claims returned date is before the original due date, the fines disappear. + If the item is overdue and the claims returned date is after the due date, the fines remain. + If you do not enter the date claimed returned, the item is moved to the Claimed returned list, but the fines are not stopped. + Items cannot be un-claimed returned except by checking in the item or marking it lost. + There is a Claims Returned Count in the Edit tab, Groups and Permissions section; this must be manually reset. + There are no alerts indicating claims returned items. + + + circulationin-house use + In-house Use (<keycap>F6</keycap>) + May be used to record in-house use for both cataloged and non-cataloged items. + + + Select Circulation Record-In House Use + Cataloged items: Enter item barcode. When recording more than one use of an item, edit the + number in the # of uses box. + Non-cataloged items: choose the appropriate item from the dropdown menu in the Barcode + box and Submit. + + The statistics on in-house use are separated from circulation statistics. In-house use count + of cataloged items is not included in the items' total use count. + + circulationitem status + Item Status (<keycap>F5</keycap>) + Many functions may be performed from the Item Status screen. This section will cover circulation-related functions: + checking item status, viewing past circulations, inserting item alert messages, and marking items missing or damaged. + + + Checking an item's status: + Select SearchSearch for copies by Barcode or Circulation + Show Item Status by Barcode. + Enter item barcode. + Current status of the item displays, along with selected other fields. (Use the column picker + to choose which fields to view.) + + If an item's status is Available, the displayed due date refers to the previous circulation's due date. + + + Viewing Past Circulations: + Retrieve an item (see above). + Select Actions for Selected ItemsShow Last Few Circulations. + The item’s recent circulation history displays. + To retrieve the last patron to circulate the item, select Retrieve Last Patron. + Patron record will display in a new Tab. + + Past circulations can also be retrieved from a patron's Items Out screen. + + + Marking items <emphasis>damaged</emphasis> or <emphasis>missing</emphasis> + circulationdamaged items + circulationmissing items + + Retrieve the item. + Select the item. + Select Actions for Selected Items Mark Item Damaged or Mark + Item Missing. + + This procedure also allows items to be checked in or renewed through the Check in Items and Renew Items options on the + dropdown menu. + + + Item alerts + circulationitem alerts + The Edit Item Attributes function on Actions for Selected Items allows editing of item records, such as inserting + item alerts. + + Retrieve record. + Highlight the item. + Select Actions for Selected Items Edit Item Attributes. + The item record displays in the Copy Editor. + Click Alert Message in the Miscellaneous column. + Type in the message and click Apply. + Click Modify Copies and confirm. + + +
+
+ Bills and Payments + bills and payments + + Circulation vs. Grocery Bills + There are two types of bills in Evergreen: Circulation bills and Grocery bills. + Circulation bills: system-generated (overdue fines, lost item cost, processing fees, etc.). + Overdue fines are added daily once an item is overdue. + When an item is marked as lost, bills may be automatically generated to cover the item's cost and a processing fee, according to library policy. + Grocery bills: staff-applied to patron accounts. + + + Making Payments + bills and paymentsmaking payments + + Retrieve the patron record. + Bills + When bills are paid, the money applied starts at the top of the list of checked-off bills. To pay a specific bill, uncheck the other boxes. + (Note the presence of the Uncheck All and Check All options.) + Select a payment type. + Enter the amount of payment in the Payment received field. + Apply Payment. + The patron’s bill screen and owed balance will update. + + Items marked with red are still checked out. It is possible for a patron to pay a bill while the item is still out and accruing fines. + You may choose to annotate payment and fill in resulting text box according to library policy. + + + Making Change + bills and paymentsmaking change + Change will be calculated if the payment amount is over the selected bill amount. After typing in a payment amount, click into the + =Change field. The change amount will + display. + + + Void vs. Forgive + + Void clears all history of the bill, while forgive retains the history. + + Forgiving Billsbills and paymentsforgiving bills + + Retrieve the patron record. + Choose forgive as the payment type + Enter the amount to be forgiven. + Apply Payment. + + + + + Voiding Bills + bills and paymentsvoiding bills + Bills under one transaction are grouped in one bill line. Bills may be voided in part or in whole. + + Click Void All Billings + confirm. + + + + To void a partial amount: + Click Full Details for the transaction. + The bill details screen displays. + Select the bill to void. + Void Selected Billings. + Confirm. + + + + + Adding New Grocery Bills + bills and paymentsadding new grocery bills + A grocery bill can be added as a new bill or to an existing bill. + + To add as a new bill + Retrieve the patron record. + Select Bills. + Click Bill Patron. + Choose appropriate billing type from the drop down menu. (Grocery is the only available transaction type.) + Enter the Amount and Note (as required). + Submit this Bill and confirm. + + + To add bill to an existing bill line: + Select Bills. + Click Add Billing at the bottom of the correct bill line. + Choose appropriate billing type from the drop down menu. (Grocery + is the only available transaction type.) + Enter the Amount and Note (as required). + Submit this Bill and confirm. + The Money Summary will adjust accordingly. + + + + Bill History + bills and paymentsbill history + The Bill History view includes specific details about the item as well as information about the + bill and payments. + + To view a patron’s bill history: + From the patron record, open the Bills tab + Click History. + The Bill History window opens. + Highlight a bill in the Bill History pane to view its Item Summary. + For more information, select a bill and click Full Details. + + Items may be deleted from the catalog even if a charge for that item is still attached to the patron's record. The charge will remain on the patron's account + after the deletion. + + + Refund + bills and paymentsrefunds + Sometimes paid bills need to be voided, such as when lost and paid items are returned. A negative balance may be + created once such bills are voided. To close such bills, staff may refund the balance amount or add a bill entry. + + To refund, click Refund in the billing + line on Bills screen. + The amount shows in Pay BillChange box. + + Click Apply Payment. A receipt will be printed. + + + Refund button will automatically show up once a bill has a negative balance. + Refunds are reflected in the Cash Report. + +
+
+ Holds + holds + Items may be deleted from the catalog even if a charge for that item is still attached to the patron's record. The charge will remain on the patron's account + after the deletion. + + Viewing Holds + holdsviewing holds + + Under Actions for this Record (AltA), select View Holds + (AltS). You can do this from any record view. You do not have to be in + Holdings Maintenance. + The View Holds screen opens. + + + + Placing Holds + holdsplacing holds + Holds may be placed by staff through the staff client or by patrons through the OPAC. This chapter explains placing holds through the client which can be placed for + from several different places. + + + Holds Levels + holdslevels + Evergreen has four hold levels. Library staff may place holds at all four levels, while patrons may only place Meta-record and Title-level holds. + + Hold Levels Explained: + + + + + + + + + Hold Level + Abbreviation + How To + Used By + Hold Links To + + + + + Meta-Record + M + Click Place Hold next to the title. From the Holds Confirmation Screen, click Advanced + Hold Options and select other applicable formats + Patron or staff + Group of records in different formats (book, video, audiobook, etc) with the same title. + + + Title Record + T + Click Place Hold next to the title + Patron or staff + A single MARC (title) record + + + Volume + V + Click Place Hold on any item in the holdings list (next to the call number) + Staff + A call-number-specific volume record + + + Copy + C + Click Details to view the barcode. Select Place Hold (next to the barcode) + Staff + An item barcode + + + +
+ Meta-Record holds: If you select formats as being Acceptable Alternative Formats, the patron’s hold will be filled with the first + available item. If Books is selected, for instance, + a paperback edition could fill the hold, even when the hold is placed on the hardback record. If there are many different records for the same item, books attached to + other records could fill the hold, so this may speed hold fulfillment. If Audiobooks is selected, the patron could also receive the audiobook if that is the first available + version of the item. If audiobooks are selected, the patron could receive a cassette or CD version if Evergreen libraries own both. + + + Placing holds from catalog records: + Retrieve the desired title record (Search Search the Catalog). + Scan or type patron’s barcode into the Enter recipient barcode field. Click Submit. + Click on an entry to display it’s summary. + Edit the patron hold notification and expiration date fields as required. (A default hold expiration date will + display if the library has set up a default holds expiration period in its library settings.) + Select Advanced Options to create a meta-level hold. + Place Hold and confirm. + + Uncaptured holds will not be targeted after their expiration dates. If the Suspend this Hold checkbox is selected, the hold will be suspended and will not + be captured until reactivated. + + + Placing holds from patron records: + Open the patron record. + Click Holds + Click Place Hold (top left top corner). + The Advanced Search interface opens within the Holds pane. + Enter item search criteria and click Submit Search. + Locate the desired item in the Title Results list and click Place hold + The patron's account information will retrieve automatically. + Verify contact methods and pick up location. + Set the notification and expiration date fields as required. + Click Place Hold and confirm. + + Multiple holds may be placed at one time. Select Holds to return to the Holds screen. Select Refresh to + reflect newly placed holds. + If the hold fails, a dialog box will open up indicating that the hold you are trying to place is invalid. For instance, if you try to place a hold on an audiovisual + item where your library has no holdings, or if the patron has reached the limit of holds a person can place. +
+ + Managing Holds + holdsmanaging + Holds may be cancelled at any time by staff or patrons. + Before holds are captured, staff or patrons may: + + Suspend or set holds as inactive for a period of time without losing the hold queue position; + Activate suspended holds; + Edit the hold notification method, pick-up location, expiration date, or activation date; + + + Staff can edit holds from patron records or title records. Patrons may edit holds from their OPAC account. + + Managing holds in patron records: + Retrieve the patron record. + Select Holds. + Highlight the appropriate hold record. + Select Actions for Selected Items. + Manage the hold by choosing an action on the list. + + Captured holds with statuses of On Hold Self or Ready for Pickup can be cancelled by staff or patrons. The status + of these items will not be change until they are checked in. + + + Managing holds in title records: + Retrieve and display the appropriate title record through the catalog. + Choose Actions for this Reord View Holds. + By default, only holds with the pickup location of your library are displayed. + Highlight the hold(s) to edit. + Click Actions for Selected Holds and the appropriate action. + + Holds may be sorted on the View Holds screen. Click Request Date to find the position of a patron in the hold queue. Use the column + picker to display patron barcodes and names. Columns may be saved for a login using the Save Columns button. + + + Transferring Holds + holdstransferring + + Open the record you need to transfer the hold from in one tab and the record you need to transfer the hold to in another tab. + View the holds on the record where the hold is currently. + You will copy the patron barcode of the hold you need to move. Select Patron barcode in the column picker. Then right click on the + line you need, and select Copy to Clipboard + Click on the patron barcode. Make sure you do not click on the item barcode if it is in your box. + A box will open up telling you what has been copied to the clipboard. + Click OK or press Enter. + You can now use this patron barcode to place a hold. + Go to the tab where you have opened the record where you need to move the hold. + Then you will need to cancel the hold on the first record. + + + + Canceling Holds + holdscanceling + + View the holds for the item. + Highlight the hold you need to cancel. + Click Actions for Selected Holds (AltS) + Select Cancel Hold (AltC) + A Window will open asking if you are sure you wish to cancel the hold. + If it is the correct hold, click Yes (AltY). + The window will close, and the hold will disappear from the list. + + + + Retargeting Holds + holdsretargeting + Holds need to be retargeted whenever a new item is added to a record, or after some types of item status changes, for instance when an item is changed from On Order + to In Process. The system does not automatically recognize the newly added items as available to fill holds. This also needs to be done if items marked as Damaged or + Missing or set to other non-circulating statuses are once again made available for circulation. + + View the holds for the item. + highlight all the holds for the record, which have a status of Waiting for Copy. If there are a lot of holds, it may be helpful to sort the + holds by Status. + Click on the head of the status column. + Under Actions for Selected Holds (AltS) select Find Another + Target (AltT) + A window will open asking if you are sure you would like to reset the holds for these items. + Click Yes (AltY). Nothing may appear to happen, or if you are retargeting + a lot of holds at once, your screen may go blank or seem to freeze for a moment while the holds are retargeted. + When the screen refreshes, the holds will be retargeted the system will now recognize the new items and items with a new status as + available for holds. + + + + Holds Pull List + holdspull list + Holds may have one of three statuses: Waiting for Copy, Waiting for Capture, or + Ready for Pickup. + Waiting-for-copy: all copies are checked out or otherwise unavailable. + Waiting-for-capture: an available copy is assigned to the hold. The item displays on the Holds Pull List. Staff must retrieve and capture the hold. + Ready-for-pickup: the hold has been captured and is waiting for patron pickup. + + + To retrieve the holds pull list: + Select Circulation Pull List for Hold Requests. + The Holds Pull List displays. + Sort by clicking the column labels (e.g. Call Number). + To print, click Print Page on the top right of the screen. + + The Holds Pull List is updated constantly. Once an item on the list is no longer available or a hold on the list is captured, the items will disappear + from the list. + + Capturing Holds + holdscapturing + Holds may be captured when a checked-out item is returned (checked in) or when an item on the Holds Pull List is retrieved and captured. When a hold is captured, a + hold slip may be printed and an email notification will be sent out, if enabled for the hold. + + Select Circulation Capture Holds. + Scan or type barcode and click Submit. + A hold slip prints automatically. + + Holds can also be captured on the Circulation Check In Items screen. + If the Auto-Print Hold and Transit Slips checkboxes are selected, hold slips will print automatically. + + + + Holds Shelf List + holdsshelf list + Items with Ready-for-pickup status are displayed on the Hold Shelf List. Hold Shelf List can help manage items on the hold shelf. + To view the holds shelf list: + + Select Circulation Browse Holds Shelf + Actions for Selected Holds are available, as in the patron record. + Expired holds may be deleted from this screen. + + If you cancel a ready-for-pickup hold, you must check in the item to make it available for circulation. + +
+
+ Transit Items + transit items + Evergreen’s In Transit feature tracks items transferring among branches. It allows patrons to return items at any branch and for holds to be placed on items at other branches. + When will an item go In Transit? + + When an item is checked in at a non-owning branch the status changes to In Transit. A transit slip may be printed. + When a hold is captured for an item with a pickup branch other than location at which the hold is captured, the item’s status will be changed to + In Transit. If the hold is captured from the Check In screen, a prompt to print the Transit/Hold slip will display. + If the hold is captured from the Capture Holds screen, a Transit/Hold slip will be printed automatically. + + + Receiving In Transit Items + transit itemsreceiving + All items received through transit must be checked in by the receiving branch. This changes the items' statuses from In Transit to + Reshelving or Ready for Pickup. + + + Transit List + transit itemsrlist + The Transit List report may be used to as a tool to help manage your incoming and outgoing transits. + To access and use the Transit List report: + + Select Admin Local System AdministrationTransit List. + + Specify ransit to or Transit from library from the dropdown menu. + Pick a date range in Transit Date falls between fields. + Click Transits Retrieve. + Items with an In Transit status for the selected time period are listed. + + + + Aborting Transits + transit itemsaborting + Transits may be aborted (cancelled) from multiple locations within Evergreen. + Use when processing missing in transit items or a patron requests an item that has just been returned and is in transit to its home library for reshelving. + This procedure can be performed from the Transit List or from the Item Status screen. + + Select the transit(s) to cancel. + Select Actions for Selected Transits Abort Transits. + The transit is cancelled, but will still display in the list. + Click Retrieve Transits. The screen will refresh and the cancelled item(s) will no longer display as transits. + + + Cancelling Transits at Checkout + transit itemscancelling + Items with a status of in transit trigger a notification when an attempt is made to check them out. To allow in transit + items to be checked out, override the block by clicking Abort Transit on the alert screen. Proceed by clicking Checkout. + + + + Cancelling Transits from Item Status + Items with a status of in transit trigger a notification when an attempt is made to check them out. To allow + in transit items to be checked out, override the block by clicking Abort Transit on the alert screen. Proceed by clicking Checkout. + + Click Item Status or hit F5 + Scan Item barcode + Right click on the item and select Abort Transit + At Aborting Transits pop-up, click Yes + The item now has the status Reshelving. + + + +
+
+ Offline Transactions + offline transactions + Evergreen's Standalone Interface/Offline Interface is designed to log transactions during + network outage, which can be uploaded and processed once network operations are + restored. + + The terms Offline Interface and Standalone Interface mean the same thing - a separate + program to handle simple circulation tasks while the network is down. + + + To access Offline Interface, go to Staff Client login screen. Click + Standalone Interface button. + + + + + + + + + + Evergreen Standalone Interface will open. + + + + + + + + + + + + Patron Registration + offline transactionspatron registrationcirculation + + Patron registration on Evergreen Offline Interface records the minimum patron + information necessary to register a new patron. + + All fields, except Line 2 of Billing Address, on Patron + Registration screen are required. If your library does not record + information for any field, you need work out a standard fake value for it, e.g. + 1900-01-01 for Date of Birth. + + The account password will be automatically generated. Patrons can access their + account with the password after the offline transactions are uploaded and + processed. + + + + + + + Click Register Patron on the top menu bar. + + + + + + + + + + + + Patron Registration screen is displayed. + + + + + + + + + + Fill in the form with patron information. Use the drop down list if available. + Click Save patron registration button. Click + OK on the confirmation pop-up window. + + + + + + + + + + + + Check Out + offline transactionscheck outcirculation + + + + + Click Check Out button to access check out screen. + + + + + + + + + + The Standalone Check Out screen will open. + + + + + + + + + Make sure the date (on the left end of the menu bar) is correct. + + + + Scan the patron's library card barcode in Enter the patron's + barcode box. + + + + + + + + + + Check that the due date is correct. You may delete then type in a due date in + Enter the item due date box. You may also click + choose one of these dropdown list to select a relative due + date based on the loan period. + + + + + + + + + + Scan the items' bacode in Enter the item barcode box. It + will appear on the right side of the screen. + + + + + + + + + + For non-catalogued items, you may also click choose a non-barcode + option dropdown list to select a non-catalogued category. + + + + + + + + Enter the number of items you want to check out, then click + OK on the prompt window. + + + + + + + + + Scan all items, changing the due date if necessary. + + + + If you want to print receipt, make sure Print receipt? + checkbox is selected. + + + + + + + + + + Click Save these transactions. + + + + + + + + + + The default dates are based on your computer settings. + Pre-catalogued item circulation is not available on Offline Interface. If an existing pre-cat barcode + happens to be used, it will be checked out with the previous author and title. If a new pre-cat barcode is attempted, + an error of ASSET NOT FOUND (item not found) will be returned upon processing offline transactions. + + + + + Renew + offline transactionsrenewcirculation + + To renew, you must know items barcode number. Patron's barcode is optional. + + + + To access renew function, click Renew button on the top + menu bar. + + + + + + + + + + Renew screen looks very similar to Check + Out screen. The differences are patron's barcode is optional on + Renew screen, and non-barcoded option is not available as + non-barcoded items can not be renewed. + + + + + + + + + Follow the same procedure as checking out described above. Skip patron barcode if + you do not have it. + + + + + + In House Use + offline transactionsin house usecirculation + + + + + + To access In House Use, click In House + Use button on the top menu bar. + + + + + + + + + + Make sure the date is correct. + + + + + + + + + + Type in the number in Enter the number of uses of the item + box. + + + + + + + + + + Scan or type in the item barcode number in Enter the item + barcode box. + + + + + + + + + Repeat the above 2 steps until all items have been scanned. + + + + Click Save these transactions. Make sure Print + receipt? checkbox is selected if you want to print a receipt. + + + + + + + + + + + + Check In + offline transactionsCheck Incirculation + + + + + Click Check In button on the top menu bar. + + + + + + + + + + Check In screen will open. + + + + + + + + + + Make sure the date is correct. + + + + + + + + + + Scan the items barcode in Enter item barcode box. The + number will be displayed on the right side fo the screen. + + + + + + + + + Scan all items you want to check in. + + + + Click Save these transactions. If you need to print a + receipt, make sure Print receipt? checkbox is selected before + you save the transactions. + + + + + + + + + + Without access to Evergreen database, items on holds or with special status will not + be captured in offline mode. Sitka Support Team recommends libraries not use check in + function on Standalone Interface if possible. + + + + + Uploading offline transactions + offline transactionsuploading + + Once you are able to connect to the server, you need to upload the offline transactions. +  It is good practice to do this as soon as possible, but if the local system administrator + isn’t on site for a day or two do not panic. + The terms Offline Interface and Standalone + Interface mean the same thing - a separate program to handle simple + circulation tasks while the network is down. + Once you can connect to the server, there are 3 steps to uploading offline + transactions: + + + Create a session: to be done by local + system administrators at an administration workstation. + + + Upload transactions to a session: to be + done by circulation staff at circulation workstations. + + + Process the uploaded transactions: to + be done by local system administrators at an administration workstation. + + + Once the network has come back up, a local system administrator must first create a + session before uploading transactions. Then, staff can upload transactions from each of the + workstations used in offline circ to that session.  Once all of the branch workstations + have uploaded their transactions to the session, the manager will process all the + transactions from all the workstations at once. + + Circulation Staff uploading transactions to the session does not put the transactions + into the Evergreen database. The transactions will not be + sent to the Evergreen database until the manager processes + the session. + + + + Create a Session + offline transactionscreate a session + + + + Log into Evergreen with a local system administrator username and + password. + + + + + From the menu bar, select + Admin (-) + Offline Transaction Management + . + + + screenshot of staff client + + + + + + + + + + The Offline Transactions screen will open. Previously + created sessions will be listed in the Offline Sessions section. Otherwise, the + Offline Sessions section will be blank. + + + + In the upper Offline Sessions section, click on the + Create button to create a new session. + + + screenshot of staff client + + + + + + + + + + Enter a name for the session, like “Internet Down 2009-12-02”.  Click + OK. + + + screenshot of staff client + + + + + + + + + + In the Offline Sessions section, highlight the session + you just created. An Uploaded Transactions section will + appear in the bottom of the screen. Initially, this section will be empty. +   + + + screenshot of staff client + + + + + + + + + + Inform library staff that the session has been created and what the session + name is. + + + + + + Upload Workstation Transactions to a Session + offline transactionsupload workstation transactions to a session + + + Wait until the local system administrator has created a session and told you that + it's ready for your upload. There may be several sessions shown on the Offline + Transaction Management screen, so you will need the name of the correct + session from your local system administrator. + + + Log into Evergreen with your regular username and + password. + + + From the menu bar, select + Admin (-) + Offline Transaction Management + . + + + + + The Offline Transactions screen will open. You should see + at least one session in the Offline Sessions section. You may + see old sessions listed there, as well. + + + + + In the upper Offline Sessions section, highlight the + correct session, then click Upload.   + + + screenshot of staff client + + + + + + + + + + When the uploading is finished,select the session in Offline Sessions + section. Now the value in the Upload Count column should + have been increased by 1. Your workstation should be listed in + Uploaded Transactions section now. + + + screenshot of staff client + + + + + + + + + + Inform your local system administrator that your transaction has been uploaded + to the session. + + + + You will need to do this for each workstation you have used for offline + circulation.  If your library has more than one workstations that have been used for + offline transactions you will see the other workstation sessions that have already + been uploaded.   + + + + + Process the Transactions + offline transactionsprocess transactions + + Wait until all the appropriate staff workstations have uploaded their transactions to + your session. You should see the workstations listed in the Uploaded + Transactions section. You'll need to be logged into + Evergreen as a local system administrator to do the + processing step. + + + Log into Evergreen with a local system + administrator's username and password. + + + From the menu bar, select + Admin (-) + Offline Transaction Management + . + + + + Highlight the correct session and, if necessary, + Refresh to verify all the appropriate workstations + have uploaded their transactions to your session. + + + screenshot of staff client + + + + + + + + + + Click on the Process button. + + + screenshot of staff client + + + + + + + + + + + The processing may take a while, depending on how many transactions you have + done. Click the Refresh button to check the status. The + processing is complete when the Processing? column shows + Completed. + + + screenshot of staff client + + + + + + + + + + The number in the Transactions Processed column is equal to + the number of items checked out or checked in.  For example, if there are 5 + transactions processed this could be 5 items checked out, or 3 items checked in and 2 + items checked out, or 5 items checked in.   + + + + + Exceptions + offline transactionsexceptions + + Exceptions are problems that were encountered during processing.  For example, a + mis-scanned patron barcode, an open circulation, or an item that wasn’t checked in + before it was checked out to another patron, would be listed as an exception. Those + transactions causing exceptions may not be loaded into Evergreen database. Staff should + examine the exceptions and take necessary action. + + The example below shows several exceptions: + + + screenshot of staff client + + + + + + + + + These are a few notes about possible exceptions. It is not an all-inclusive + list. + + + + Checking out a DVD with the wrong date (leaving due date set at +2 weeks + instead of +1 week) doesn't cause an exception. + + + Overdue books are not flagged as exceptions. + + + Checking out a reference book doesn't cause an exception. + + + Checking out an item belonging to another library doesn't cause an + exception. + + + The Standalone Interface doesn't recognize books on hold, + no exceptions will be generated for that. + + + The Standalone Interface will recognize blocked, barred, + and expired patrons as well as lost cards, IF you have recently done an + Admin (-) + Download Offline Patron List + on the workstation on which you're using the Standalone + Interface. You will get an error message indicating the patron + status from within the Standalone Interface at check-out + time. + + + Common error messages: + + ROUTE-ITEM - Indicates the book should be routed to another branch or library system. + You'll need to find the book and re-check it in (online) to get the Transit Slip to print. + + COPY_STATUS_LOST - Indicates a book previously marked as lost was found and checked in. + CIRC_CLAIMS_RETURNED - Indicates a book previously marked as claimed-returned was found and checked in. + ASSET_COPY_NOT_ FOUND - Indicates the item barcode was mis-scanned/mis-typed. + ACTOR_CARD_NOT_ FOUND - Indicates the patron's library barcode was mis-scanned/ mis-typed. + OPEN_CIRCULATION_ EXISTS - Indicates a book was checked out that had never been checked in. + MAX_RENEWALS_ REACHED - Indicates the item has already been renewed the maximum times allowed (or it’s a video/DVD). + + + +
+
diff --git a/stafftasks/intro.xml b/stafftasks/intro.xml new file mode 100644 index 0000000000..e69de29bb2 diff --git a/stafftasks/staffclient.xml b/stafftasks/staffclient.xml new file mode 100644 index 0000000000..de7871c89e --- /dev/null +++ b/stafftasks/staffclient.xml @@ -0,0 +1,591 @@ + + + + + Using the Staff Client + + + +
+ + Logging in to Evergreenstaff clientlogging into + + + To log in you must first install the Evergreen Staff Client, available for download from + the Evergreen site at http://downloads.open-ils.org/. + + Each staff member can have their own username and password, or generic logins can be + used. + + + + + + screenshot of staff client login + + + + + + + + + + + + + + + + Enter Username and Password + for your staff account, then click Login. Under normal circumstances + this is all that is required to login. + + + + + + + + If the staff client can connect to Evergreen both + Status and Version display a green + 200:OK message. If not, ensure the hostname is + correctly entered and click Re-Test + Server. If the error message persists make sure your are connected to the + internet. + + + + + + + + + Locale sets the language preferences for the staff client. + + + + + + + + Workstation identifies your physical computer location. Workstation registration is done by a Local System + Administrator when staff clients are first installed. + + + + + + + If your connection to Evergreen is lost during open hours, click + Standalone Interface to continue with check out and patron + registration functions until the connection is restored. + + + + + + + + Debug Options are for advanced troubleshooting and can be ignored in + normal use. + + + + + + + Click Clear Cache to remove the staff client's + locally cached files. This may be required to see recent changes to administrative settings. + + + + +
+
+ + Navigationstaff clientnavigating + + + + + Tabs + + Evergreen uses tabs to display functions. Tabs allow all + software functionality to be open in one window. You can have up to 9 tabs open at once + and you can have more than one tab of a single function open at the same time. You + simply move through the tabs to perform your work. + + + Keyboard shortcuts for working with tabs: + + + Ctrl + T + new tab + + + + Ctrl + W +   close tab + + + + Ctrl + Shift + W +   close all tabs + + + + Ctrl + Tab +   tabs forward through open tabs + + + + Ctrl + Shift + Tab +   tabs backward through open tabs + + + + In the example below, the MARC Template tab is active. Click + on any open tab to bring that screen to the front. You can also use + Ctrl + Tab + to move to the required tab + + + staff client tabs + + + + + + + Now the Check Out tab is the active screen. + + staff client tabs + + + + + + Once you are in the selected tab, you can use the drop down menus or keyboard + shortcuts to perform required functions. Menu functions and corresponding keyboard + shortcuts will be demonstrated throughout this manual. + + + + Keyboard Shortcutsstaff clientkeyboard shortcuts + + Most menu items have keyboard shorcuts that can greatly increase efficiency. Below is + a selected list of commonly used shortcut keys: + + + + + + + + Key + Function + + + + + + F1 + + Checkout, or retrieve patron record by barcode + + + + F2 + + Checkin + + + + F3 + + Catalogue search + + + + + F4 + + Patron search + + + + + F5 + + Retrieve copy by barcode + + + + + F6 + + Record in house use + + + + + F8 + + Retreive last patron + + + + + F9 + + Re-print the last receipt + + + + + + Shift + F1 + + + Register new patron + + + + + + Shift + F2 + + + Capture holds + + + + + + Shift + F3 + + + Retrieve record by TCN + + + + + + Shift + F8 + + + Retreive last patron + + + + + + Ctrl + T + + + Open new tab + + + + + + Ctrl + W + + + Close current tab + + + + + + Ctrl + Tab + + + Move forward through tabs + + + + + + Ctrl + Shift + Tab + + + Move back through tabs + + + + + Ctrl + C + + + Copy + + + + + + Ctrl + V + + + Paste + + + + + + + + Copy/Pastestaff clientcopy/paste + + + There are several methods of copying and pasting text in Evergreen, depending on + where you are in the staff client and the type of information you are copying + + + + + Underlined blue text + Clicking on any of the blue links in the + Evergreen client copies the data to the + computer clipboard (left and right click work the same way for these links). + To paste into another location, use + Ctrl + V + . + + + + copy/paste methods + + + + + + + copy/paste methods + + + + + + + + + + + + Text displayed in tables + To copy information from a staff client table, first select the desired + row then right-click and choose Copy to + Clipboard; alternatively select + Actions for Selected Items + Copy to Clipboard + . + + + + + copy/paste methods + + + + + + + + + + copy/paste methods + + + + + + + + Next click the desired information in the popup to copy it to the + clipboard + + + copy/paste methods + + + + + + + + + + + + + Text from catalogue search results + There is no right-click menu for copying data from staff client search + results. To copy the ISBN in the example below, highlight it and click + Ctrl + C + . To paste into another location use + Ctrl + V + . + + + copy/paste methods + + + + + + + + + + +
+
+ + Customizing the Staff Clientstaff clientcustomizing + + + + Column Picker + + + From many screens and lists, you can click on the column + picker icon to change which columns are displayed. + + + screenshot of staff client column picker + + + + + + + + + When data is displayed in columns, you can click and drag them, add new ones, or + remove them. You can also sort data in a column by clicking on the column header. After + customizing the display you may save your changes for future sessions under that login + by right-clicking anywhere in the display area and choosing Save + Columns from the drop-down menu. Some libraries use generic accounts + and for those who do, staff need to be aware of the implications to other staff members + of any changes made to the display. + + + + + Button Bar + + + + + There is an optional toolbar with buttons providing quick access to common staff + client functions. When activated the toolbar appears below the menus. + + + staff client button bar + + + + + + + + + + To turn the buttons on or off select + Admin (-) + Toggle Button Bar + . The buttons can be activated by default for a particular library (see + Library Settings for + details). + + + + staff client button bar + + + + + + + + + + + + + + Check-boxes + + + + Most staff client check-boxes are "sticky" -- if you select or deselect them, that + status persists. For example, Auto-print, which will print the + relevant receipts automatically in certain functions, is sticky. If you select it on + one login, it will persist for future logins until you uncheck the box. + + + + staff client tabs + + + + + + + + + Fast Item Add is another "sticky" check box that makes it + possible to add volume and item records from the MARC editor. + + + + staff client tabs + + + + + + + + + + + Font and Sound + You may change the size of displayed text or turn staff client sounds on and off. + These settings are specific to each physical workstation, not the login account. See + for details. + + +
+ + + + +
diff --git a/stafftasks/stafftasks_intro.xml b/stafftasks/stafftasks_intro.xml new file mode 100644 index 0000000000..4f6e262aa7 --- /dev/null +++ b/stafftasks/stafftasks_intro.xml @@ -0,0 +1,3 @@ + + This part of the documentation covers a broad range of the common tasks carried out by your library and includes tasks performed by circulation staff and catalogers among others. Some of these procedures should only be performed by Local System Administrators, but most of these sections will give all staff a better understanding of the Evergreen system and its features. +