more spelling issues cleared
[freeradius.git] / raddb / mods-config / sql / main / postgresql / schema.sql
1 /*
2  * $Id$
3  *
4  * Postgresql schema for FreeRADIUS
5  *
6  * All field lengths need checking as some are still suboptimal. -pnixon 2003-07-13
7  *
8  */
9
10 /*
11  * Table structure for table 'radacct'
12  *
13  * Note: Column type BIGSERIAL does not exist prior to Postgres 7.2
14  *       If you run an older version you need to change this to SERIAL
15  */
16 CREATE TABLE radacct (
17         RadAcctId               BIGSERIAL PRIMARY KEY,
18         AcctSessionId           VARCHAR(64) NOT NULL,
19         AcctUniqueId            VARCHAR(32) NOT NULL UNIQUE,
20         UserName                VARCHAR(253),
21         GroupName               VARCHAR(253),
22         Realm                   VARCHAR(64),
23         NASIPAddress            INET NOT NULL,
24         NASPortId               VARCHAR(15),
25         NASPortType             VARCHAR(32),
26         AcctStartTime           TIMESTAMP with time zone,
27         AcctStopTime            TIMESTAMP with time zone,
28         AcctSessionTime         BIGINT,
29         AcctAuthentic           VARCHAR(32),
30         ConnectInfo_start       VARCHAR(50),
31         ConnectInfo_stop        VARCHAR(50),
32         AcctInputOctets         BIGINT,
33         AcctOutputOctets        BIGINT,
34         CalledStationId         VARCHAR(50),
35         CallingStationId        VARCHAR(50),
36         AcctTerminateCause      VARCHAR(32),
37         ServiceType             VARCHAR(32),
38         XAscendSessionSvrKey    VARCHAR(10),
39         FramedProtocol          VARCHAR(32),
40         FramedIPAddress         INET,
41         AcctStartDelay          INTEGER,
42         AcctStopDelay           INTEGER 
43 );
44 -- This index may be useful..
45 -- CREATE UNIQUE INDEX radacct_whoson on radacct (AcctStartTime, nasipaddress);
46
47 -- For use by onoff-, update-, stop- and simul_* queries
48 CREATE INDEX radacct_active_user_idx ON radacct (UserName, NASIPAddress, AcctSessionId) WHERE AcctStopTime IS NULL;
49 -- and for common statistic queries:
50 CREATE INDEX radacct_start_user_idx ON radacct (AcctStartTime, UserName);
51 -- and, optionally
52 -- CREATE INDEX radacct_stop_user_idx ON radacct (acctStopTime, UserName);
53
54 /*
55  * There was WAAAY too many indexes previously. This combo index
56  * should take care of the most common searches.
57  * I have commented out all the old indexes, but left them in case
58  * someone wants them. I don't recomend anywone use them all at once
59  * as they will slow down your DB too much.
60  *  - pnixon 2003-07-13
61  */
62
63 /*
64  * create index radacct_UserName on radacct (UserName);
65  * create index radacct_AcctSessionId on radacct (AcctSessionId);
66  * create index radacct_AcctUniqueId on radacct (AcctUniqueId);
67  * create index radacct_FramedIPAddress on radacct (FramedIPAddress);
68  * create index radacct_NASIPAddress on radacct (NASIPAddress);
69  * create index radacct_AcctStartTime on radacct (AcctStartTime);
70  * create index radacct_AcctStopTime on radacct (AcctStopTime);
71 */
72
73
74
75 /*
76  * Table structure for table 'radcheck'
77  */
78 CREATE TABLE radcheck (
79         id              SERIAL PRIMARY KEY,
80         UserName        VARCHAR(64) NOT NULL DEFAULT '',
81         Attribute       VARCHAR(64) NOT NULL DEFAULT '',
82         op              CHAR(2) NOT NULL DEFAULT '==',
83         Value           VARCHAR(253) NOT NULL DEFAULT ''
84 );
85 create index radcheck_UserName on radcheck (UserName,Attribute);
86 /*
87  * Use this index if you use case insensitive queries
88  */
89 -- create index radcheck_UserName_lower on radcheck (lower(UserName),Attribute);
90
91 /*
92  * Table structure for table 'radgroupcheck'
93  */
94 CREATE TABLE radgroupcheck (
95         id              SERIAL PRIMARY KEY,
96         GroupName       VARCHAR(64) NOT NULL DEFAULT '',
97         Attribute       VARCHAR(64) NOT NULL DEFAULT '',
98         op              CHAR(2) NOT NULL DEFAULT '==',
99         Value           VARCHAR(253) NOT NULL DEFAULT ''
100 );
101 create index radgroupcheck_GroupName on radgroupcheck (GroupName,Attribute);
102
103 /*
104  * Table structure for table 'radgroupreply'
105  */
106 CREATE TABLE radgroupreply (
107         id              SERIAL PRIMARY KEY,
108         GroupName       VARCHAR(64) NOT NULL DEFAULT '',
109         Attribute       VARCHAR(64) NOT NULL DEFAULT '',
110         op              CHAR(2) NOT NULL DEFAULT '=',
111         Value           VARCHAR(253) NOT NULL DEFAULT ''
112 );
113 create index radgroupreply_GroupName on radgroupreply (GroupName,Attribute);
114
115 /*
116  * Table structure for table 'radreply'
117  */
118 CREATE TABLE radreply (
119         id              SERIAL PRIMARY KEY,
120         UserName        VARCHAR(64) NOT NULL DEFAULT '',
121         Attribute       VARCHAR(64) NOT NULL DEFAULT '',
122         op              CHAR(2) NOT NULL DEFAULT '=',
123         Value           VARCHAR(253) NOT NULL DEFAULT ''
124 );
125 create index radreply_UserName on radreply (UserName,Attribute);
126 /*
127  * Use this index if you use case insensitive queries
128  */
129 -- create index radreply_UserName_lower on radreply (lower(UserName),Attribute);
130
131 /*
132  * Table structure for table 'radusergroup'
133  */
134 CREATE TABLE radusergroup (
135         UserName        VARCHAR(64) NOT NULL DEFAULT '',
136         GroupName       VARCHAR(64) NOT NULL DEFAULT '',
137         priority        INTEGER NOT NULL DEFAULT 0
138 );
139 create index radusergroup_UserName on radusergroup (UserName);
140 /*
141  * Use this index if you use case insensitive queries
142  */
143 -- create index radusergroup_UserName_lower on radusergroup (lower(UserName));
144
145 /*
146  * Table structure for table 'realmgroup'
147  * Commented out because currently not used
148  */
149 --CREATE TABLE realmgroup (
150 --      id              SERIAL PRIMARY KEY,
151 --      RealmName       VARCHAR(30) DEFAULT '' NOT NULL,
152 --      GroupName       VARCHAR(30)
153 --);
154 --create index realmgroup_RealmName on realmgroup (RealmName);
155
156 /*
157  * Table structure for table 'realms'
158  * This is not yet used by FreeRADIUS
159  */
160 --CREATE TABLE realms (
161 --      id              SERIAL PRIMARY KEY,
162 --      realmname       VARCHAR(64),
163 --      nas             VARCHAR(128),
164 --      authport        int4,
165 --      options         VARCHAR(128) DEFAULT ''
166 --);
167
168 --
169 -- Table structure for table 'radpostauth'
170 --
171
172 CREATE TABLE radpostauth (
173         id                      BIGSERIAL PRIMARY KEY,
174         username                VARCHAR(253) NOT NULL,
175         pass                    VARCHAR(128),
176         reply                   VARCHAR(32),
177         CalledStationId         VARCHAR(50),
178         CallingStationId        VARCHAR(50),
179         authdate                TIMESTAMP with time zone NOT NULL default 'now()'
180 );
181
182 /*
183  * Table structure for table 'nas'
184  */
185 CREATE TABLE nas (
186         id              SERIAL PRIMARY KEY,
187         nasname         VARCHAR(128) NOT NULL,
188         shortname       VARCHAR(32) NOT NULL,
189         type            VARCHAR(30) NOT NULL DEFAULT 'other',
190         ports           int4,
191         secret          VARCHAR(60) NOT NULL,
192         server          VARCHAR(64),
193         community       VARCHAR(50),
194         description     VARCHAR(200)
195 );
196 create index nas_nasname on nas (nasname);