On Thursday 18 December 2003 20:16, Robert Treat wrote:
> On Wed, 2003-12-17 at 21:37, Bruce Momjian wrote:
> > I have put up a list of projects being worked on and their TODO lists in
> > hope that people will find it easier to work on them:
> >
> >     http://momjian.postgresql.org/main/writings/pgsql/project

Browsing that page I noticed tablespaces item. I have this file we have 
prepared long time back. I think it deserves a mention on that page.

May be I should edit it to completion and then send. But this is for review 
for others so that any bugs are ironed out..

 Shridhar
POSTGRESQL LOCATIONS DESIGN DOCUMENT
------------------------------------

Authors:
Christopher Kings-Lynne ([EMAIL PROTECTED])

Writtem:
30th June 2003

Version:
0.1

REQUIREMENTS

1. To be able to specify the physical location of tables and indexes 
   from within the PostgreSQL SQL environment.

2. Databases and schemas will be able to have a default table and 
   default index location specified.  Unless overridden at creation 
   time, a new object will inherit its location from, first, its 
   schema and second, its database. ** Is a default temporary 
   tablespace required?

3. At creation time of all tables and indexes, it should be possible 
   to specify a location.  This includes UNIQUE and PRIMARY KEY 
   declarations.

4. We should allow anonymous locations wherever we allow a <locname>.  
   This means that PsotgreSQL will create a new location on the fly, 
   with a generated name.  This could help with backward compatibility 
   with the CREATE DATABASE location clause.

5. If you don't like 'location', then s/location/storage/g.

CATALOG CHANGES
---------------

A new (global) catalog will need to be created, pg_location.

It will need to have the following fields:

locoid          OID     UNIQUE  NOT NULL        Location identifier
locname         TEXT    UNIQUE  NOT NULL        Location name
locpath         TEXT            NOT NULL        Location path (eg. /spaces/ind1)
locconfig       TEXT[]                          GUC variables for objects
                                                   in this location.
locacl          ACLITEM[]                       Access controls for location.

New fields will be required in pg_database:

datrellocid     OID                                                     Default table 
location identifier
datindlocid     OID                                                     Default index 
location identifier

New fields will be required in pg_namespace:

nsprellocid     OID                                                     Default table 
location identifier
nspindlocid     OID                                                     Default index 
location identifier

The default location fields above can be NULL, in which case objects
default to datpath for the database.

*** Should we just remove datpath and make datrellocid NOT NULL???

PERMISSIONS
-----------

Locations will have a single permission - USAGE.  By default, the creator of a 
tablespace will be its owner and will have USAGE rights.

Locations can only be created and altered by a superuser.

GRAMMAR
-------

For direct manipulation of locations:

CREATE LOCATION <locname> AS '<locpath>';

DROP LOCATION <locname> [ CASCADE | RESTRICT ];

ALTER LOCATION <locname> SET <variable> { TO | = } { <value> | DEFAULT };
ALTER LOCATION <locname> RESET <variable>;
ALTER LOCATION <locname> RENAME TO <newname>;

For the specification of default locations:

CREATE DATABASE <datname> [ WITH ] { TABLE | INDEX } LOCATION <locname>;
ALTER DATABASE <datname> { TABLE | INDEX } LOCATION { <locname> | DEFAULT };

*** How do we handle existing LOCATION clause?

CREATE SCHEMA <nspname> { TABLE | INDEX } LOCATION <locname>;
ALTER SCHEMA <nspname> { TABLE | INDEX } LOCATION { <locname> | DEFAULT };

Object creation:

CREATE TABLE ... ( ... PRIMARY KEY LOCATION <locname>, UNIQUE LOCATION <locname> ... ) 
... LOCATION <locname>;
CREATE INDEX ... LOCATION <locname>;
ALTER TABLE ... ADD { UNIQUE | PRIMARY KEY } ... LOCATION <locname>;

DIAGNOSTICS
-----------

These are the result strings for location manipulation:

CREATE LOCATION
DROP LOCATION
ALTER LOCATION

EXOTIC FEATURES
---------------

These features are cool, but won't make it into the initial implementation
most likely:

1. The SET <variable> stuff above.
2. WAL location
3. Location quotas

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to