Jelajahi Sumber

- oracle db schema (not functional yet)
- postgres db schema
- ser_postgres.sh (not functional yet)

Jan Janak 20 tahun lalu
induk
melakukan
58dc550cd9
3 mengubah file dengan 913 tambahan dan 0 penghapusan
  1. 312 0
      scripts/oracle/or_create.sql
  2. 336 0
      scripts/postgres/pg_create.sql
  3. 265 0
      scripts/postgres/ser_postgres.sh

+ 312 - 0
scripts/oracle/or_create.sql

@@ -0,0 +1,312 @@
+CREATE TABLE version (
+    table_name string(32) NOT NULL,
+    table_version int NOT NULL DEFAULT '0'
+);
+
+INSERT INTO version (table_name, table_version) VALUES ('acc', '3');
+INSERT INTO version (table_name, table_version) VALUES ('missed_calls', '3');
+INSERT INTO version (table_name, table_version) VALUES ('location', '8');
+INSERT INTO version (table_name, table_version) VALUES ('credentials', '6');
+INSERT INTO version (table_name, table_version) VALUES ('domain', '2');
+INSERT INTO version (table_name, table_version) VALUES ('attr_types', '1');
+INSERT INTO version (table_name, table_version) VALUES ('global_attrs', '1');
+INSERT INTO version (table_name, table_version) VALUES ('domain_attrs', '1');
+INSERT INTO version (table_name, table_version) VALUES ('user_attrs', '3');
+INSERT INTO version (table_name, table_version) VALUES ('phonebook', '1');
+INSERT INTO version (table_name, table_version) VALUES ('silo', '3');
+INSERT INTO version (table_name, table_version) VALUES ('uri', '2');
+INSERT INTO version (table_name, table_version) VALUES ('server_monitoring', '1');
+INSERT INTO version (table_name, table_version) VALUES ('trusted', '1');
+INSERT INTO version (table_name, table_version) VALUES ('server_monitoring_agg', '1');
+INSERT INTO version (table_name, table_version) VALUES ('speed_dial', '2');
+INSERT INTO version (table_name, table_version) VALUES ('sd_attrs', '1');
+INSERT INTO version (table_name, table_version) VALUES ('gw', '2');
+INSERT INTO version (table_name, table_version) VALUES ('gw_grp', '2');
+INSERT INTO version (table_name, table_version) VALUES ('lcr', '1');
+INSERT INTO version (table_name, table_version) VALUES ('presentity', '1');
+INSERT INTO version (table_name, table_version) VALUES ('presentity_contact', '1');
+INSERT INTO version (table_name, table_version) VALUES ('watcherinfo', '1');
+
+CREATE TABLE acc (
+    id int NOT NULL,
+    from_uid string(64),
+    to_uid string(64),
+    to_did string(64),
+    from_did string(64),
+    sip_from string(255),
+    sip_to string(255),
+    sip_status string(128),
+    sip_method string(16),
+    in_ruri string(255),
+    out_ruri string(255),
+    from_uri string(255),
+    to_uri string(255),
+    sip_callid string(255),
+    sip_cseq int,
+    digest_username string(64),
+    digest_realm string(255),
+    from_tag string(128),
+    to_tag string(128),
+    src_ip int,
+    src_port short,
+    request_timestamp datetime NOT NULL,
+    response_timestamp datetime NOT NULL,
+    flags int NOT NULL DEFAULT '0',
+    attrs string(255),
+    id_key UNIQUE (id, ),
+
+);
+
+CREATE TABLE missed_calls (
+    id int NOT NULL,
+    from_uid string(64),
+    to_uid string(64),
+    to_did string(64),
+    from_did string(64),
+    sip_from string(255),
+    sip_to string(255),
+    sip_status string(128),
+    sip_method string(16),
+    inbound_ruri string(255),
+    outbound_ruri string(255),
+    from_uri string(255),
+    to_uri string(255),
+    sip_callid string(255),
+    sip_cseq int,
+    digest_username string(64),
+    digest_realm string(255),
+    from_tag string(128),
+    to_tag string(128),
+    request_timestamp datetime NOT NULL,
+    response_timestamp datetime NOT NULL,
+    flags int NOT NULL DEFAULT '0',
+    attrs string(255),
+    id_key UNIQUE (id, ),
+
+);
+
+CREATE TABLE credentials (
+    auth_username string(64) NOT NULL,
+    realm string(64) NOT NULL,
+    password string(28) NOT NULL DEFAULT '',
+    flags int NOT NULL DEFAULT '0',
+    ha1 string(32) NOT NULL,
+    ha1b string(32) NOT NULL DEFAULT '',
+    uid string(64) NOT NULL,
+     UNIQUE (auth_username, realm, ),
+
+);
+
+CREATE TABLE attr_types (
+    name string(32) NOT NULL,
+    rich_type string(32) NOT NULL DEFAULT 'string',
+    raw_type int NOT NULL DEFAULT '2',
+    type_spec string(255) DEFAULT NULL
+);
+
+INSERT INTO attr_types (name, raw_type) VALUES ('uid', '2');
+INSERT INTO attr_types (name, raw_type) VALUES ('did', '2');
+INSERT INTO attr_types (name, raw_type) VALUES ('digest_realm', '2');
+INSERT INTO attr_types (name, raw_type) VALUES ('rpid', '2');
+INSERT INTO attr_types (name, raw_type) VALUES ('fr_timer', '0');
+INSERT INTO attr_types (name, raw_type) VALUES ('fr_inv_timer', '2');
+INSERT INTO attr_types (name, raw_type) VALUES ('flags', '0');
+
+CREATE TABLE global_attrs (
+    name string(32) NOT NULL,
+    type int NOT NULL DEFAULT '0',
+    value string(64),
+    flags int NOT NULL DEFAULT '0',
+    global_attrs_idx UNIQUE (name, value, )
+);
+
+CREATE TABLE domain_attrs (
+    did string(64),
+    name string(32) NOT NULL,
+    type int NOT NULL DEFAULT '0',
+    value string(64),
+    flags int NOT NULL DEFAULT '0',
+    domain_attr_idx UNIQUE (did, name, value, ),
+
+);
+
+CREATE TABLE user_attrs (
+    uid string(64) NOT NULL,
+    name string(32) NOT NULL,
+    value string(64),
+    type int NOT NULL DEFAULT '0',
+    flags int NOT NULL DEFAULT '0',
+    userattrs_idx UNIQUE (uid, name, value, )
+);
+
+CREATE TABLE domain (
+    did string(64) NOT NULL,
+    domain string(128) NOT NULL,
+    last_modified datetime NOT NULL,
+    flags int NOT NULL DEFAULT '0',
+    domain_idx UNIQUE (did, domain, )
+);
+
+CREATE TABLE location (
+    uid string(64) NOT NULL,
+    contact string(255) NOT NULL,
+    received string(255),
+    expires datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
+    q float NOT NULL DEFAULT '1.0',
+    callid string(255),
+    cseq int,
+    flags int NOT NULL DEFAULT '0',
+    user_agent string(64),
+    location_key UNIQUE (uid, contact, ),
+
+);
+
+CREATE TABLE trusted (
+    src_ip string(39) NOT NULL,
+    proto string(4) NOT NULL,
+    from_pattern string(64) NOT NULL,
+    trusted_idx UNIQUE (src_ip, proto, from_pattern, )
+);
+
+CREATE TABLE server_monitoring (
+    time datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
+    id int NOT NULL DEFAULT '0',
+    param string(32) NOT NULL DEFAULT '',
+    value int NOT NULL DEFAULT '0',
+    increment int NOT NULL DEFAULT '0'
+);
+
+CREATE TABLE server_monitoring_agg (
+    param string(32) NOT NULL DEFAULT '',
+    s_value int NOT NULL DEFAULT '0',
+    s_increment int NOT NULL DEFAULT '0',
+    last_aggregated_increment int NOT NULL DEFAULT '0',
+    av double NOT NULL DEFAULT '0',
+    mv int NOT NULL DEFAULT '0',
+    ad double NOT NULL DEFAULT '0',
+    lv int NOT NULL DEFAULT '0',
+    min_val int NOT NULL DEFAULT '0',
+    max_val int NOT NULL DEFAULT '0',
+    min_inc int NOT NULL DEFAULT '0',
+    max_inc int NOT NULL DEFAULT '0',
+    lastupdate datetime NOT NULL DEFAULT '1970-01-01 00:00:00'
+);
+
+CREATE TABLE phonebook (
+    id int NOT NULL,
+    uid string(64) NOT NULL,
+    fname string(32),
+    lname string(32),
+    sip_uri string(255) NOT NULL,
+    pb_idx UNIQUE (id, ),
+
+);
+
+CREATE TABLE gw (
+    gw_name string(128) NOT NULL,
+    ip_addr int NOT NULL,
+    port short,
+    uri_scheme char,
+    transport short,
+    grp_id int NOT NULL,
+    gw_idx1 UNIQUE (gw_name, ),
+
+);
+
+CREATE TABLE gw_grp (
+    grp_id int NOT NULL,
+    grp_name string(64) NOT NULL,
+    gwgrp_idx UNIQUE (grp_id, )
+);
+
+CREATE TABLE lcr (
+    prefix string(16) NOT NULL,
+    from_uri string(255) NOT NULL DEFAULT '%',
+    grp_id int,
+    priority int
+);
+
+CREATE TABLE silo (
+    mid int NOT NULL,
+    src_addr string(255) NOT NULL,
+    dst_addr string(255) NOT NULL,
+    r_uri string(255) NOT NULL,
+    uid string(64) NOT NULL,
+    inc_time datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
+    exp_time datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
+    ctype string(128) NOT NULL DEFAULT 'text/plain',
+    body binary NOT NULL DEFAULT '',
+    silo_idx1 UNIQUE (mid, )
+);
+
+CREATE TABLE uri (
+    uid string(64) NOT NULL,
+    did string(64) NOT NULL,
+    username string(64) NOT NULL,
+    flags int NOT NULL DEFAULT '0',
+    uri_idx1 UNIQUE (username, did, flags, ),
+    uri_uid UNIQUE (uid, flags, )
+);
+
+CREATE TABLE speed_dial (
+    id int NOT NULL,
+    uid string(64) NOT NULL,
+    dial_username string(64) NOT NULL,
+    dial_did string(64) NOT NULL,
+    new_uri string(255) NOT NULL,
+    speeddial_idx1 UNIQUE (uid, dial_did, dial_username, ),
+    speeddial_id UNIQUE (id, ),
+
+);
+
+CREATE TABLE sd_attrs (
+    id string(64) NOT NULL,
+    name string(32) NOT NULL,
+    value string(64),
+    type int NOT NULL DEFAULT '0',
+    flags int NOT NULL DEFAULT '0',
+    userattrs_idx UNIQUE (id, name, value, )
+);
+
+CREATE TABLE presentity (
+    presid int(10) NOT NULL,
+    uri string(255) NOT NULL,
+    pdomain string(128) NOT NULL,
+    presentity_key UNIQUE (presid, ),
+
+);
+
+CREATE TABLE presentity_contact (
+    contactid int(10) NOT NULL,
+    presid int(10) NOT NULL,
+    basic string(32) NOT NULL DEFAULT 'offline',
+    status string(32) NOT NULL,
+    location string(128) NOT NULL,
+    expires datetime NOT NULL DEFAULT '2020-05-28 21:32:15',
+    placeid int(10),
+    priority float NOT NULL DEFAULT '0.5',
+    contact string(255),
+    tupleid string(64) NOT NULL,
+    prescaps int(10) NOT NULL,
+    pc_idx1 UNIQUE (contactid, ),
+
+);
+
+CREATE TABLE watcherinfo (
+    r_uri string(255) NOT NULL,
+    w_uri string(255) NOT NULL,
+    display_name string(128) NOT NULL,
+    s_id string(64) NOT NULL,
+    package string(32) NOT NULL DEFAULT 'presence',
+    status string(32) NOT NULL DEFAULT 'pending',
+    event string(32) NOT NULL,
+    expires int NOT NULL,
+    accepts int NOT NULL,
+    presid int(10) NOT NULL,
+    server_contact string(255) NOT NULL,
+    dialog binary NOT NULL,
+    doc_index int NOT NULL,
+    wi_idx1 UNIQUE (s_id, ),
+
+);
+

+ 336 - 0
scripts/postgres/pg_create.sql

@@ -0,0 +1,336 @@
+CREATE TABLE version (
+    table_name VARCHAR(32) NOT NULL,
+    table_version INTEGER NOT NULL DEFAULT '0'
+);
+
+INSERT INTO version (table_name, table_version) VALUES ('acc', '3');
+INSERT INTO version (table_name, table_version) VALUES ('missed_calls', '3');
+INSERT INTO version (table_name, table_version) VALUES ('location', '8');
+INSERT INTO version (table_name, table_version) VALUES ('credentials', '6');
+INSERT INTO version (table_name, table_version) VALUES ('domain', '2');
+INSERT INTO version (table_name, table_version) VALUES ('attr_types', '1');
+INSERT INTO version (table_name, table_version) VALUES ('global_attrs', '1');
+INSERT INTO version (table_name, table_version) VALUES ('domain_attrs', '1');
+INSERT INTO version (table_name, table_version) VALUES ('user_attrs', '3');
+INSERT INTO version (table_name, table_version) VALUES ('phonebook', '1');
+INSERT INTO version (table_name, table_version) VALUES ('silo', '3');
+INSERT INTO version (table_name, table_version) VALUES ('uri', '2');
+INSERT INTO version (table_name, table_version) VALUES ('server_monitoring', '1');
+INSERT INTO version (table_name, table_version) VALUES ('trusted', '1');
+INSERT INTO version (table_name, table_version) VALUES ('server_monitoring_agg', '1');
+INSERT INTO version (table_name, table_version) VALUES ('speed_dial', '2');
+INSERT INTO version (table_name, table_version) VALUES ('sd_attrs', '1');
+INSERT INTO version (table_name, table_version) VALUES ('gw', '2');
+INSERT INTO version (table_name, table_version) VALUES ('gw_grp', '2');
+INSERT INTO version (table_name, table_version) VALUES ('lcr', '1');
+INSERT INTO version (table_name, table_version) VALUES ('presentity', '1');
+INSERT INTO version (table_name, table_version) VALUES ('presentity_contact', '1');
+INSERT INTO version (table_name, table_version) VALUES ('watcherinfo', '1');
+
+CREATE TABLE acc (
+    id SERIAL NOT NULL,
+    from_uid VARCHAR(64),
+    to_uid VARCHAR(64),
+    to_did VARCHAR(64),
+    from_did VARCHAR(64),
+    sip_from VARCHAR(255),
+    sip_to VARCHAR(255),
+    sip_status VARCHAR(128),
+    sip_method VARCHAR(16),
+    in_ruri VARCHAR(255),
+    out_ruri VARCHAR(255),
+    from_uri VARCHAR(255),
+    to_uri VARCHAR(255),
+    sip_callid VARCHAR(255),
+    sip_cseq INTEGER,
+    digest_username VARCHAR(64),
+    digest_realm VARCHAR(255),
+    from_tag VARCHAR(128),
+    to_tag VARCHAR(128),
+    src_ip INTEGER,
+    src_port SMALLINT,
+    request_timestamp TIMESTAMP NOT NULL,
+    response_timestamp TIMESTAMP NOT NULL,
+    flags INTEGER NOT NULL DEFAULT '0',
+    attrs VARCHAR(255),
+    CONSTRAINT id_key UNIQUE (id)
+);
+
+CREATE INDEX cid_key ON acc (sip_callid);
+
+CREATE TABLE missed_calls (
+    id SERIAL NOT NULL,
+    from_uid VARCHAR(64),
+    to_uid VARCHAR(64),
+    to_did VARCHAR(64),
+    from_did VARCHAR(64),
+    sip_from VARCHAR(255),
+    sip_to VARCHAR(255),
+    sip_status VARCHAR(128),
+    sip_method VARCHAR(16),
+    inbound_ruri VARCHAR(255),
+    outbound_ruri VARCHAR(255),
+    from_uri VARCHAR(255),
+    to_uri VARCHAR(255),
+    sip_callid VARCHAR(255),
+    sip_cseq INTEGER,
+    digest_username VARCHAR(64),
+    digest_realm VARCHAR(255),
+    from_tag VARCHAR(128),
+    to_tag VARCHAR(128),
+    request_timestamp TIMESTAMP NOT NULL,
+    response_timestamp TIMESTAMP NOT NULL,
+    flags INTEGER NOT NULL DEFAULT '0',
+    attrs VARCHAR(255),
+    CONSTRAINT id_key UNIQUE (id)
+);
+
+CREATE INDEX cid_key ON missed_calls (sip_callid);
+
+CREATE TABLE credentials (
+    auth_username VARCHAR(64) NOT NULL,
+    realm VARCHAR(64) NOT NULL,
+    password VARCHAR(28) NOT NULL DEFAULT '',
+    flags INTEGER NOT NULL DEFAULT '0',
+    ha1 VARCHAR(32) NOT NULL,
+    ha1b VARCHAR(32) NOT NULL DEFAULT '',
+    uid VARCHAR(64) NOT NULL,
+    UNIQUE (auth_username, realm)
+);
+
+CREATE INDEX uid ON credentials (uid);
+
+CREATE TABLE attr_types (
+    name VARCHAR(32) NOT NULL,
+    rich_type VARCHAR(32) NOT NULL DEFAULT 'string',
+    raw_type INTEGER NOT NULL DEFAULT '2',
+    type_spec VARCHAR(255) DEFAULT NULL
+);
+
+CREATE INDEX upt_idx1 ON attr_types (name);
+
+INSERT INTO attr_types (name, raw_type) VALUES ('uid', '2');
+INSERT INTO attr_types (name, raw_type) VALUES ('did', '2');
+INSERT INTO attr_types (name, raw_type) VALUES ('digest_realm', '2');
+INSERT INTO attr_types (name, raw_type) VALUES ('rpid', '2');
+INSERT INTO attr_types (name, raw_type) VALUES ('fr_timer', '0');
+INSERT INTO attr_types (name, raw_type) VALUES ('fr_inv_timer', '2');
+INSERT INTO attr_types (name, raw_type) VALUES ('flags', '0');
+
+CREATE TABLE global_attrs (
+    name VARCHAR(32) NOT NULL,
+    type INTEGER NOT NULL DEFAULT '0',
+    value VARCHAR(64),
+    flags INTEGER NOT NULL DEFAULT '0',
+    CONSTRAINT global_attrs_idx UNIQUE (name, value)
+);
+
+CREATE TABLE domain_attrs (
+    did VARCHAR(64),
+    name VARCHAR(32) NOT NULL,
+    type INTEGER NOT NULL DEFAULT '0',
+    value VARCHAR(64),
+    flags INTEGER NOT NULL DEFAULT '0',
+    CONSTRAINT domain_attr_idx UNIQUE (did, name, value)
+);
+
+CREATE INDEX domain_did ON domain_attrs (did, flags);
+
+CREATE TABLE user_attrs (
+    uid VARCHAR(64) NOT NULL,
+    name VARCHAR(32) NOT NULL,
+    value VARCHAR(64),
+    type INTEGER NOT NULL DEFAULT '0',
+    flags INTEGER NOT NULL DEFAULT '0',
+    CONSTRAINT userattrs_idx UNIQUE (uid, name, value)
+);
+
+CREATE TABLE domain (
+    did VARCHAR(64) NOT NULL,
+    domain VARCHAR(128) NOT NULL,
+    last_modified TIMESTAMP NOT NULL,
+    flags INTEGER NOT NULL DEFAULT '0',
+    CONSTRAINT domain_idx UNIQUE (did, domain)
+);
+
+CREATE TABLE location (
+    uid VARCHAR(64) NOT NULL,
+    contact VARCHAR(255) NOT NULL,
+    received VARCHAR(255),
+    expires TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:00',
+    q REAL NOT NULL DEFAULT '1.0',
+    callid VARCHAR(255),
+    cseq INTEGER,
+    flags INTEGER NOT NULL DEFAULT '0',
+    user_agent VARCHAR(64),
+    CONSTRAINT location_key UNIQUE (uid, contact)
+);
+
+CREATE INDEX location_contact ON location (contact);
+
+CREATE TABLE trusted (
+    src_ip VARCHAR(39) NOT NULL,
+    proto VARCHAR(4) NOT NULL,
+    from_pattern VARCHAR(64) NOT NULL,
+    CONSTRAINT trusted_idx UNIQUE (src_ip, proto, from_pattern)
+);
+
+CREATE TABLE server_monitoring (
+    time TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:00',
+    id INTEGER NOT NULL DEFAULT '0',
+    param VARCHAR(32) NOT NULL DEFAULT '',
+    value INTEGER NOT NULL DEFAULT '0',
+    increment INTEGER NOT NULL DEFAULT '0'
+);
+
+CREATE INDEX sm_idx1 ON server_monitoring (id, param);
+
+CREATE TABLE server_monitoring_agg (
+    param VARCHAR(32) NOT NULL DEFAULT '',
+    s_value INTEGER NOT NULL DEFAULT '0',
+    s_increment INTEGER NOT NULL DEFAULT '0',
+    last_aggregated_increment INTEGER NOT NULL DEFAULT '0',
+    av DOUBLE PRECISION NOT NULL DEFAULT '0',
+    mv INTEGER NOT NULL DEFAULT '0',
+    ad DOUBLE PRECISION NOT NULL DEFAULT '0',
+    lv INTEGER NOT NULL DEFAULT '0',
+    min_val INTEGER NOT NULL DEFAULT '0',
+    max_val INTEGER NOT NULL DEFAULT '0',
+    min_inc INTEGER NOT NULL DEFAULT '0',
+    max_inc INTEGER NOT NULL DEFAULT '0',
+    lastupdate TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:00'
+);
+
+CREATE INDEX smagg_idx1 ON server_monitoring_agg (param);
+
+CREATE TABLE phonebook (
+    id SERIAL NOT NULL,
+    uid VARCHAR(64) NOT NULL,
+    fname VARCHAR(32),
+    lname VARCHAR(32),
+    sip_uri VARCHAR(255) NOT NULL,
+    CONSTRAINT pb_idx UNIQUE (id)
+);
+
+CREATE INDEX pb_uid ON phonebook (uid);
+
+CREATE TABLE gw (
+    gw_name VARCHAR(128) NOT NULL,
+    ip_addr INTEGER NOT NULL,
+    port SMALLINT,
+    uri_scheme SMALLINT,
+    transport SMALLINT,
+    grp_id INTEGER NOT NULL,
+    CONSTRAINT gw_idx1 UNIQUE (gw_name)
+);
+
+CREATE INDEX gw_idx2 ON gw (grp_id);
+
+CREATE TABLE gw_grp (
+    grp_id SERIAL NOT NULL,
+    grp_name VARCHAR(64) NOT NULL,
+    CONSTRAINT gwgrp_idx UNIQUE (grp_id)
+);
+
+CREATE TABLE lcr (
+    prefix VARCHAR(16) NOT NULL,
+    from_uri VARCHAR(255) NOT NULL DEFAULT '%',
+    grp_id INTEGER,
+    priority INTEGER
+);
+
+CREATE INDEX lcr_idx1 ON lcr (prefix);
+CREATE INDEX lcr_idx2 ON lcr (from_uri);
+CREATE INDEX lcr_idx3 ON lcr (grp_id);
+
+CREATE TABLE silo (
+    mid SERIAL NOT NULL,
+    src_addr VARCHAR(255) NOT NULL,
+    dst_addr VARCHAR(255) NOT NULL,
+    r_uri VARCHAR(255) NOT NULL,
+    uid VARCHAR(64) NOT NULL,
+    inc_time TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:00',
+    exp_time TIMESTAMP NOT NULL DEFAULT '1970-01-01 00:00:00',
+    ctype VARCHAR(128) NOT NULL DEFAULT 'text/plain',
+    body BYTEA NOT NULL DEFAULT '',
+    CONSTRAINT silo_idx1 UNIQUE (mid)
+);
+
+CREATE TABLE uri (
+    uid VARCHAR(64) NOT NULL,
+    did VARCHAR(64) NOT NULL,
+    username VARCHAR(64) NOT NULL,
+    flags INTEGER NOT NULL DEFAULT '0',
+    CONSTRAINT uri_idx1 UNIQUE (username, did, flags),
+    CONSTRAINT uri_uid UNIQUE (uid, flags)
+);
+
+CREATE TABLE speed_dial (
+    id SERIAL NOT NULL,
+    uid VARCHAR(64) NOT NULL,
+    dial_username VARCHAR(64) NOT NULL,
+    dial_did VARCHAR(64) NOT NULL,
+    new_uri VARCHAR(255) NOT NULL,
+    CONSTRAINT speeddial_idx1 UNIQUE (uid, dial_did, dial_username),
+    CONSTRAINT speeddial_id UNIQUE (id)
+);
+
+CREATE INDEX speeddial_uid ON speed_dial (uid);
+
+CREATE TABLE sd_attrs (
+    id VARCHAR(64) NOT NULL,
+    name VARCHAR(32) NOT NULL,
+    value VARCHAR(64),
+    type INTEGER NOT NULL DEFAULT '0',
+    flags INTEGER NOT NULL DEFAULT '0',
+    CONSTRAINT userattrs_idx UNIQUE (id, name, value)
+);
+
+CREATE TABLE presentity (
+    presid SERIAL NOT NULL,
+    uri VARCHAR(255) NOT NULL,
+    pdomain VARCHAR(128) NOT NULL,
+    CONSTRAINT presentity_key UNIQUE (presid)
+);
+
+CREATE INDEX presentity_key2 ON presentity (uri);
+
+CREATE TABLE presentity_contact (
+    contactid SERIAL NOT NULL,
+    presid INTEGER NOT NULL,
+    basic VARCHAR(32) NOT NULL DEFAULT 'offline',
+    status VARCHAR(32) NOT NULL,
+    location VARCHAR(128) NOT NULL,
+    expires TIMESTAMP NOT NULL DEFAULT '2020-05-28 21:32:15',
+    placeid INTEGER,
+    priority REAL NOT NULL DEFAULT '0.5',
+    contact VARCHAR(255),
+    tupleid VARCHAR(64) NOT NULL,
+    prescaps INTEGER NOT NULL,
+    CONSTRAINT pc_idx1 UNIQUE (contactid)
+);
+
+CREATE INDEX presid_index ON presentity_contact (presid);
+CREATE INDEX location_index ON presentity_contact (location);
+CREATE INDEX placeid_index ON presentity_contact (placeid);
+
+CREATE TABLE watcherinfo (
+    r_uri VARCHAR(255) NOT NULL,
+    w_uri VARCHAR(255) NOT NULL,
+    display_name VARCHAR(128) NOT NULL,
+    s_id VARCHAR(64) NOT NULL,
+    package VARCHAR(32) NOT NULL DEFAULT 'presence',
+    status VARCHAR(32) NOT NULL DEFAULT 'pending',
+    event VARCHAR(32) NOT NULL,
+    expires INTEGER NOT NULL,
+    accepts INTEGER NOT NULL,
+    presid INTEGER NOT NULL,
+    server_contact VARCHAR(255) NOT NULL,
+    dialog BYTEA NOT NULL,
+    doc_index INTEGER NOT NULL,
+    CONSTRAINT wi_idx1 UNIQUE (s_id)
+);
+
+CREATE INDEX wi_ruri_idx ON watcherinfo (r_uri);
+CREATE INDEX wi_wuri_idx ON watcherinfo (w_uri);
+

+ 265 - 0
scripts/postgres/ser_postgres.sh

@@ -0,0 +1,265 @@
+#!/bin/sh
+#
+# $Id$
+#
+# Script for adding and dropping ser MySQL tables
+#
+
+#################################################################
+# config vars
+#################################################################
+DEFAULT_DBHOST="localhost"
+DEFAULT_DBNAME="ser"
+DEFAULT_SQLUSER="root"
+
+DEFAULT_MYSQL="/usr/bin/mysql"
+DEFAULT_MYSQLDUMP="/usr/bin/mysqldump"
+
+DEFAULT_CREATE_SCRIPT="my_create.sql"
+DEFAULT_DROP_SCRIPT="my_drop.sql"
+
+CMD="$MYSQL -f -h$DBHOST -u$SQLUSER"
+
+usage() {
+cat <<EOF
+Usage: $COMMAND create 
+       $COMMAND drop   
+       $COMMAND backup [database] <file> 
+       $COMMAND restore [database] <file>
+       $COMMAND copy <source_db> <dest_db>
+   
+  Command 'create' creates database named '${DBNAME}' containing tables 
+  needed for SER and SERWeb. In addition to that two users are created, 
+  one with read/write permissions and one with read-only permissions.
+
+  Commmand 'drop' deletes database named '${DBNAME}' and associated users.
+
+  Command 'backup' Dumps the contents of the database in <file>. If no
+  database name is provided on the command line then the default '${DBNAME}'
+  database will be used.
+
+  Command 'restore' will load the datata previously saved with 'backup'
+  command in the database. If no database name is provided on the command
+  line then '${DBNAME}' database will be loaded.
+    Note: Make sure that you have no conflicting data in the database before
+          you execute 'restore' command.
+
+  Command 'copy' will copy the contents of <source_db> to database <dest_db>.
+  The destination database must not exist -- it will be created.
+    Note: The default users (ser, serro) will not have sufficient permissions
+          to access the new database.
+
+  Environment variables:
+    DBHOST    Hostname of the MySQL server (${DBHOST})
+    DBNAME    Default name of SER database (${DBNAME})
+    SQLUSER   Database username with administrator privileges (${SQLUSER})
+              (Make sure that the specified user has sufficient permissions
+               to create databases, tables, and users)
+    MYSQL     Full path to mysql command (${MYSQL})
+    MYSQLDUMP Full path to mysqldump command (${MYSQLDUMP})
+           
+Report bugs to <[email protected]>
+EOF
+} #usage
+
+
+# read password
+prompt_pw()
+{
+	savetty=`stty -g`
+	printf "Enter password for MySQL user ${SQLUSER} (hit enter for no password): "
+	stty -echo
+	read PW
+	stty $savetty
+	echo
+}
+
+# execute sql command
+sql_query()
+{
+    $CMD $PW "$@"
+}
+
+
+# Dump the contents of the database to stdout
+db_save() 
+{
+    if [ $# -ne 2 ] ; then
+	echo "ERROR: Bug in $COMMAND"
+	exit 1
+    fi
+    $DUMP_CMD -t $PW $1 > $2
+}
+
+
+# Load the contents of the database from a file
+db_load() #pars: <database name> <filename>
+{
+    if [ $# -ne 2 ] ; then
+	echo "ERROR: Bug in $COMMAND"
+	exit 1
+    fi
+    sql_query $1 < $2
+}
+
+
+# copy a database to database_bak
+db_copy() # par: <source_database> <destination_database>
+{
+	if [ $# -ne 2 ] ; then
+		echo  "ERROR: Bug in $COMMAND"
+		exit 1
+	fi
+
+	BU=/tmp/mysql_bup.$$
+	$DUMP_CMD $PW $1 > $BU
+	if [ "$?" -ne 0 ] ; then
+		echo "ERROR: Failed to copy the source database"
+		exit 1
+	fi
+	sql_query <<EOF
+	CREATE DATABASE $2;
+EOF
+
+	db_load $2 $BU
+	if [ "$?" -ne 0 ]; then
+		echo "ERROR: Failed to create the destination database (database exists or insuffucient permissions)"
+		rm -f $BU
+		exit 1
+	fi
+}
+
+
+# Drop SER database
+ser_drop()
+{
+    # Drop dabase
+    # Revoke user permissions
+
+    echo "Dropping SER database"
+    sql_query < $DROP_SCRIPT
+} #ser_drop
+
+
+# Create SER database
+ser_create ()
+{
+    echo "Creating SER database"
+    sql_query < $CREATE_SCRIPT
+} # ser_create
+
+
+
+# Main program
+
+COMMAND=`basename $0`
+
+if [ -z "$DBHOST" ]; then
+    DBHOST=$DEFAULT_DBHOST;
+fi
+
+if [ -z "$DBNAME" ]; then
+    DBNAME=$DEFAULT_DBNAME;
+fi
+
+if [ -z "$SQLUSER" ]; then
+    SQLUSER=$DEFAULT_SQLUSER;
+fi
+
+if [ -z "$MYSQL" ]; then
+    MYSQL=$DEFAULT_MYSQL;
+fi
+
+if [ -z "$MYSQLDUMP" ]; then
+    MYSQLDUMP=$DEFAULT_MYSQLDUMP;
+fi
+
+if [ -z "$CREATE_SCRIPT" ]; then
+    CREATE_SCRIPT=$DEFAULT_CREATE_SCRIPT;
+fi
+
+if [ -z "$DROP_SCRIPT" ]; then
+    DROP_SCRIPT=$DEFAULT_DROP_SCRIPT;
+fi
+
+if [ $# -eq 0 ]; then
+    usage
+    exit 1
+fi
+
+if [ ! -x $MYSQL ]; then
+    echo "ERROR: Could not execute MySQL tool $MYSQL, please set MYSQL variable"
+    echo "       Run ($COMMAND without parameters for more information)"
+    exit 1
+fi
+
+if [ ! -x $MYSQLDUMP ]; then
+    echo "ERROR: Could not execute MySQL tool $MYSQLDUMP, please set MYSQLDUMP variable"
+    echo "       (Run $COMMAND without parameters for more information"
+    exit 1
+fi
+
+CMD="$MYSQL -h$DBHOST -u$SQLUSER"
+DUMP_CMD="${MYSQLDUMP} -h$DBHOST -u$SQLUSER -c -a -e --add-locks --all"
+
+export PW
+prompt_pw
+
+if [ -z "$PW" ]; then
+    unset PW
+else
+    PW="-p$PW"
+fi
+
+case $1 in
+    create) # Create SER database and users
+	ser_create
+	exit $?
+		;;
+    
+    drop) # Drop SER database and users
+	ser_drop
+	exit $?
+	;;
+
+    backup) # backup SER database
+	shift
+	if [ $# -eq 1 ]; then
+	    db_save $DBNAME $1
+	elif [ $# -eq 2 ]; then
+	    db_save $1 $2
+	else
+	    usage
+	    exit 1
+	fi
+	exit $?
+	;;
+
+    restore) # restore SER database
+	shift
+	if [ $# -eq 1 ]; then
+	    db_load $DBNAME $1
+	elif [ $# -eq 2 ]; then
+	    db_load $1 $2
+	else
+	    usage
+	    exit 1
+	fi
+	exit $?
+	;;
+        
+    copy)
+	shift
+	if [ $# -ne 2 ]; then
+	    usage
+	    exit 1
+	fi
+	db_copy $1 $2
+	exit $?
+	;;
+    
+    *)
+	usage
+	exit 1;
+	;;
+esac