OpenResty::Spec::MetaModel - Metamodel for OpenResty backends
This document describes the 0.005 version of the metamodel used in the OpenResty 0.3.12.
The metamodel in OpenResty is a set of internal database schemas or tables for storing meta information regarding the user data. They're usually invisible to the outside users and their names are carefully chosen so as to prevent potential naming conflicts with users' objects.
The global metamodel stores the global (system-wide) information about the OpenResty users.
It sits in a separate PostgreSQL schema named
_global. It owns the following meta tables:
The definition of the
create table _general ( version varchar(10), captcha_key char(16) )
Usually it stores the version and other general information of the global metamodel itself. Note that the version of the metamodel is independent of the version number of the whole OpenResty server implementation. For instance, the OpenResty 0.1.8 uses metamodel 0.001 while the versions earlier does not have a versioned metamodel.
This table usually has only 1 row. But it's also fine to keep track of all the version history. The largest version number will be considered the current version of the metamodel in the current user schema.
captcha_keycolumn stores the secret key used in captcha generation, whose value must be exactly 16 bytes long and contains only characters in
_accountstable stores the list of all the available OpenResty accounts in the whole system. It has the following definition:
create table _accounts ( id serial primary key, name text unique not null, )
namecolumn specifies the name of the account.
Each OpenResty account registered by an outside user has a PostgreSQL schema for storing its models, views, roles, actions, and other user objects. Such schema has the same name as the account name. For instance, account
carrie has a corresponding database schema (or namespace) named
carrie schema has the following meta tables:
The definition of the
create table _general ( version varchar(10), created timestamp (0) with time zone default now() )
versioncolumn keeps the metamodel version number for the current account while the
createdcolumn records its creation time.
_rolestable stores the meta information of the OpenResty Role objects.
create table _roles ( id serial primary key, name text unique not null, login text not null, password text, description text not null, created timestamp(0) with time zone default now() );
logincolumn specifies the login method used by the role. Allowed values are
passwordcolumn must be not null when the
logincolumn has the value of
'password'. Its values should be null otherwise.
_accesstable stores the information of the access rules associated with the OpenResty Role objects.
create table _access ( id serial primary key, role text not null, method varchar(10) not null, url text not null );
rolecolumn stores the name of the role which owns the current rule.
Each access rule has two components, HTTP method and the (abbreviated) URL, which are saved in the columns
url, respectively. An example is that
methodhas a value of
urlhas a value of
_modelstable stores the meta information regarding the OpenResty models.
The definition of _models is
create table _models ( id serial primary key, name text unique not null, description text, created timestamp(0) with time zone default now() );
namecolumn stores the names of user models. Every user model is represented by a physical PostgreSQL table under the same schema and the leading character of its name must be case-sensitive letters. Table names leading by an underscore are preserved for meta tables.
descriptioncolumn stores users' textual description for their models.
descriptioncan be null.
_columnstable stores the meta information regarding OpenResty models' columns.
create table _columns ( id serial primary key, name text not null, table_name text not null, label text not null, type text not null, "default" text, indexed text, unique(table_name, name) );
namecolumn keeps the names of user models' columns and the
table_namecolumn stores the names of the corresponding models.
lablecolumn stores the textual label provided by the user who created the column and types of the model columns are stored in the
None of the columns above but
indexedcan be null and in addition, the combination of the columns
nameshould be unique.
User columns have default values and the corresponding JSON representation is stored in the
defaultcolumn. Note that the values for
defaultare JSON literals, for instance,
["now()"], and etc.
indexedcolumn stores the index method applied to the current user column if any; null otherwise. Possible values are 'fulltext', 'btree', 'rtree', 'gist', and 'hash'.
_viewstable stores the information of the OpenResty View objects.
create table _views ( id serial primary key, description text, name text unique not null, definition text not null, created timestamp(0) with time zone default now() );
All of the columns have similar meaning as the
_modeltable except that the
definitioncolumn stores the minisql string defining the functionality of the view.
_actionstable stores the information of the OpenResty Action objects.
create table _action ( id serial primary key, name text unique not null, description text, definition text unique not null, confirmed_by text );
Most of the columns are similar to those in the
_viewtable except that the last
confirmed_bycolumn specifies the confirmation method used to fire the action. Allowed values for this column are "email", "cellphone", and "captcha".
WARNING This part deserves more treatment. As of OpenResty 0.2.x, the _action table has not been included in the MetaModel implementation yet.
_feedstable stores the meta information for the OpenResty Feed objects.
create table _feeds ( id serial primary key, name text unique not null, description text not null, view text not null, title text not null, link text not null, logo text, copyright text, language text, author text, created timestamp (0) with time zone default now() );
viewargument specifies the OpenResty view name from which the RSS/Atom feed is generated.
authorare properties of the web site the current feed is referred to.
Copyright (c) 2008 Yahoo! China EEEE Works, Alibaba Inc.
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license can be found at