X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetlab4.sql;h=22599862f8d68bf9a6f89f9376397ab3f5ebc37e;hb=c0d164b1e0329b22638c4f5b0250364084ea70cc;hp=1ae1461cd1b0a2e83d01c59b4e268284d1ddc44b;hpb=7e87a2ec0638e9116253ff73b207b6f4f6cd8c60;p=plcapi.git diff --git a/planetlab4.sql b/planetlab4.sql index 1ae1461..2259986 100644 --- a/planetlab4.sql +++ b/planetlab4.sql @@ -9,7 +9,7 @@ -- -- Copyright (C) 2006 The Trustees of Princeton University -- --- $Id: planetlab4.sql,v 1.35 2006/11/15 10:59:54 thierry Exp $ +-- $Id: planetlab4.sql,v 1.60 2007/01/09 16:23:47 mlhuang Exp $ -- -------------------------------------------------------------------------------- @@ -29,7 +29,7 @@ CREATE AGGREGATE array_accum ( -- Version -------------------------------------------------------------------------------- ---version +-- Database version CREATE TABLE plc_db_version ( version integer NOT NULL ) WITH OIDS; @@ -51,7 +51,7 @@ CREATE TABLE persons ( enabled boolean NOT NULL DEFAULT false, -- Has been disabled -- Password - password text NOT NULL, -- Password (md5crypted) + password text NOT NULL DEFAULT 'nopass', -- Password (md5crypted) verification_key text, -- Reset password key verification_expires timestamp without time zone, @@ -202,12 +202,10 @@ CREATE TABLE keys ( -- Account authentication key(s) CREATE TABLE person_key ( - person_id integer REFERENCES persons NOT NULL, -- Account identifier - key_id integer REFERENCES keys NOT NULL, -- Key identifier - PRIMARY KEY (person_id, key_id) + key_id integer REFERENCES keys PRIMARY KEY, -- Key identifier + person_id integer REFERENCES persons NOT NULL -- Account identifier ) WITH OIDS; CREATE INDEX person_key_person_id_idx ON person_key (person_id); -CREATE INDEX person_key_key_id_idx ON person_key (key_id); CREATE VIEW person_keys AS SELECT person_id, @@ -228,10 +226,6 @@ INSERT INTO roles (role_id, name) VALUES (10, 'admin'); INSERT INTO roles (role_id, name) VALUES (20, 'pi'); INSERT INTO roles (role_id, name) VALUES (30, 'user'); INSERT INTO roles (role_id, name) VALUES (40, 'tech'); -INSERT INTO roles (role_id, name) VALUES (1000, 'node'); -INSERT INTO roles (role_id, name) VALUES (2000, 'anonymous'); --- xxx not sure this us useful yet ---INSERT INTO roles (role_id, name) VALUES (3000, 'peer'); CREATE TABLE person_role ( person_id integer REFERENCES persons NOT NULL, -- Account identifier @@ -264,23 +258,13 @@ INSERT INTO boot_states (boot_state) VALUES ('rins'); INSERT INTO boot_states (boot_state) VALUES ('rcnf'); INSERT INTO boot_states (boot_state) VALUES ('new'); --- Peers -CREATE TABLE peers ( - peer_id serial PRIMARY KEY, -- identifier - peername text NOT NULL, -- free text - peer_url text NOT NULL, -- the url of that peer's API - person_id integer REFERENCES persons NOT NULL, -- the account we use for logging in - - deleted boolean NOT NULL DEFAULT false -) WITH OIDS; - - -- Nodes CREATE TABLE nodes ( -- Mandatory node_id serial PRIMARY KEY, -- Node identifier hostname text NOT NULL, -- Node hostname - site_id integer REFERENCES sites, -- At which site (clause NOT NULL removed for foreign_nodes) + site_id integer REFERENCES sites NOT NULL, -- At which site + boot_state text REFERENCES boot_states NOT NULL DEFAULT 'inst', -- Node boot state deleted boolean NOT NULL DEFAULT false, -- Is deleted @@ -288,7 +272,6 @@ CREATE TABLE nodes ( model text, -- Hardware make and model boot_nonce text, -- Random nonce updated by Boot Manager version text, -- Boot CD version string updated by Boot Manager - -- XXX Should be key_id integer REFERENCES keys ssh_rsa_key text, -- SSH host key updated by Boot Manager key text, -- Node key generated by API when configuration file is downloaded @@ -306,22 +289,6 @@ array_accum(node_id) AS node_ids FROM nodes GROUP BY site_id; --- Nodes - peers relationship -CREATE TABLE peer_node ( - peer_id integer REFERENCES peers NOT NULL, -- Peer identifier - node_id integer REFERENCES nodes NOT NULL, -- (Local) node identifier - PRIMARY KEY (peer_id, node_id), - UNIQUE (node_id) -- Nodes can only be at one peer -) WITH OIDS; -CREATE INDEX peer_node_peer_id_idx ON peer_node (peer_id); - --- Nodes at each peer -CREATE VIEW peer_nodes AS -SELECT peer_id, -array_accum(node_id) AS node_ids -FROM peer_node -GROUP BY peer_id; - -------------------------------------------------------------------------------- -- Node groups -------------------------------------------------------------------------------- @@ -540,8 +507,8 @@ INSERT INTO slice_instantiations (instantiation) VALUES ('delegated'); -- Manual -- Slices CREATE TABLE slices ( slice_id serial PRIMARY KEY, -- Slice identifier --- xxx temporarily remove the NOT NULL constraint - site_id integer REFERENCES sites, -- Site identifier + site_id integer REFERENCES sites NOT NULL, -- Site identifier + name text NOT NULL, -- Slice name instantiation text REFERENCES slice_instantiations NOT NULL DEFAULT 'plc-instantiated', -- Slice state, e.g. plc-instantiated url text, -- Project URL @@ -549,15 +516,14 @@ CREATE TABLE slices ( max_nodes integer NOT NULL DEFAULT 100, -- Maximum number of nodes that can be assigned to this slice --- xxx temporarily remove the NOT NULL constraint - creator_person_id integer REFERENCES persons, -- Creator + creator_person_id integer REFERENCES persons NOT NULL, -- Creator created timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP, -- Creation date expires timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP + '2 weeks', -- Expiration date - deleted boolean NOT NULL DEFAULT false + is_deleted boolean NOT NULL DEFAULT false ) WITH OIDS; -CREATE INDEX slices_site_id_idx ON slices (site_id) WHERE deleted IS false; -CREATE INDEX slices_name_idx ON slices (name) WHERE deleted IS false; +CREATE INDEX slices_site_id_idx ON slices (site_id) WHERE is_deleted IS false; +CREATE INDEX slices_name_idx ON slices (name) WHERE is_deleted IS false; -- Slivers CREATE TABLE slice_node ( @@ -591,23 +557,9 @@ CREATE VIEW site_slices AS SELECT site_id, array_accum(slice_id) AS slice_ids FROM slices +WHERE is_deleted is false GROUP BY site_id; --- Slices - peer relationship -CREATE TABLE peer_slice ( - peer_id integer REFERENCES peers NOT NULL, -- peer primary key - slice_id integer REFERENCES slices NOT NULL, -- node primary key - PRIMARY KEY (peer_id, slice_id) -) WITH OIDS; -CREATE INDEX peer_slice_peer_id_idx ON peer_slice (peer_id); -CREATE INDEX peer_slice_slice_id_idx ON peer_slice (slice_id); - -CREATE VIEW peer_slices AS -SELECT peer_id, -array_accum(slice_id) AS slice_ids -FROM peer_slice -GROUP BY peer_id; - -- Slice membership CREATE TABLE slice_person ( slice_id integer REFERENCES slices NOT NULL, -- Slice identifier @@ -660,6 +612,97 @@ array_accum(slice_attribute_id) AS slice_attribute_ids FROM slice_attribute GROUP BY slice_id; +-------------------------------------------------------------------------------- +-- Peers +-------------------------------------------------------------------------------- + +-- Peers +CREATE TABLE peers ( + peer_id serial PRIMARY KEY, -- Peer identifier + peername text NOT NULL, -- Peer name + peer_url text NOT NULL, -- (HTTPS) URL of the peer PLCAPI interface + cacert text, -- (SSL) Public certificate of peer API server + key text, -- (GPG) Public key used for authentication + deleted boolean NOT NULL DEFAULT false +) WITH OIDS; +CREATE INDEX peers_peername_idx ON peers (peername) WHERE deleted IS false; + +-- Objects at each peer +CREATE TABLE peer_site ( + site_id integer REFERENCES sites PRIMARY KEY, -- Local site identifier + peer_id integer REFERENCES peers NOT NULL, -- Peer identifier + peer_site_id integer NOT NULL, -- Foreign site identifier at peer + UNIQUE (peer_id, peer_site_id) -- The same foreign site should not be cached twice +) WITH OIDS; +CREATE INDEX peer_site_peer_id_idx ON peers (peer_id); + +CREATE VIEW peer_sites AS +SELECT peer_id, +array_accum(site_id) AS site_ids, +array_accum(peer_site_id) AS peer_site_ids +FROM peer_site +GROUP BY peer_id; + +CREATE TABLE peer_person ( + person_id integer REFERENCES persons PRIMARY KEY, -- Local user identifier + peer_id integer REFERENCES peers NOT NULL, -- Peer identifier + peer_person_id integer NOT NULL, -- Foreign user identifier at peer + UNIQUE (peer_id, peer_person_id) -- The same foreign user should not be cached twice +) WITH OIDS; +CREATE INDEX peer_person_peer_id_idx ON peer_person (peer_id); + +CREATE VIEW peer_persons AS +SELECT peer_id, +array_accum(person_id) AS person_ids, +array_accum(peer_person_id) AS peer_person_ids +FROM peer_person +GROUP BY peer_id; + +CREATE TABLE peer_key ( + key_id integer REFERENCES keys PRIMARY KEY, -- Local key identifier + peer_id integer REFERENCES peers NOT NULL, -- Peer identifier + peer_key_id integer NOT NULL, -- Foreign key identifier at peer + UNIQUE (peer_id, peer_key_id) -- The same foreign key should not be cached twice +) WITH OIDS; +CREATE INDEX peer_key_peer_id_idx ON peer_key (peer_id); + +CREATE VIEW peer_keys AS +SELECT peer_id, +array_accum(key_id) AS key_ids, +array_accum(peer_key_id) AS peer_key_ids +FROM peer_key +GROUP BY peer_id; + +CREATE TABLE peer_node ( + node_id integer REFERENCES nodes PRIMARY KEY, -- Local node identifier + peer_id integer REFERENCES peers NOT NULL, -- Peer identifier + peer_node_id integer NOT NULL, -- Foreign node identifier + UNIQUE (peer_id, peer_node_id) -- The same foreign node should not be cached twice +) WITH OIDS; +CREATE INDEX peer_node_peer_id_idx ON peer_node (peer_id); + +CREATE VIEW peer_nodes AS +SELECT peer_id, +array_accum(node_id) AS node_ids, +array_accum(peer_node_id) AS peer_node_ids +FROM peer_node +GROUP BY peer_id; + +CREATE TABLE peer_slice ( + slice_id integer REFERENCES slices PRIMARY KEY, -- Local slice identifier + peer_id integer REFERENCES peers NOT NULL, -- Peer identifier + peer_slice_id integer NOT NULL, -- Slice identifier at peer + UNIQUE (peer_id, peer_slice_id) -- The same foreign slice should not be cached twice +) WITH OIDS; +CREATE INDEX peer_slice_peer_id_idx ON peer_slice (peer_id); + +CREATE VIEW peer_slices AS +SELECT peer_id, +array_accum(slice_id) AS slice_ids, +array_accum(peer_slice_id) AS peer_slice_ids +FROM peer_slice +GROUP BY peer_id; + -------------------------------------------------------------------------------- -- Authenticated sessions -------------------------------------------------------------------------------- @@ -693,6 +736,7 @@ CREATE TABLE node_session ( CREATE TABLE messages ( message_id text PRIMARY KEY, -- Message name + subject text, -- Message summary template text, -- Message template enabled bool NOT NULL DEFAULT true -- Whether message is enabled ) WITH OIDS; @@ -701,58 +745,20 @@ CREATE TABLE messages ( -- Events -------------------------------------------------------------------------------- --- Event types -CREATE TABLE event_types ( - event_type text PRIMARY KEY -- Event type -) WITH OIDS; -INSERT INTO event_types (event_type) VALUES ('Add'); -INSERT INTO event_types (event_type) VALUES ('AddTo'); -INSERT INTO event_types (event_type) VALUES ('Get'); -INSERT INTO event_types (event_type) VALUES ('Update'); -INSERT INTO event_types (event_type) VALUES ('Delete'); -INSERT INTO event_types (event_type) VALUES ('DeleteFrom'); -INSERT INTO event_types (event_type) VALUES ('Unknown'); - --- Object types -CREATE TABLE object_types ( - object_type text PRIMARY KEY -- Object type -) WITH OIDS; -INSERT INTO object_types (object_type) VALUES ('AddressType'); -INSERT INTO object_types (object_type) VALUES ('Address'); -INSERT INTO object_types (object_type) VALUES ('BootState'); -INSERT INTO object_types (object_type) VALUES ('ConfFile'); -INSERT INTO object_types (object_type) VALUES ('KeyType'); -INSERT INTO object_types (object_type) VALUES ('Key'); -INSERT INTO object_types (object_type) VALUES ('NetworkMethod'); -INSERT INTO object_types (object_type) VALUES ('NetworkType'); -INSERT INTO object_types (object_type) VALUES ('Network'); -INSERT INTO object_types (object_type) VALUES ('NodeGroup'); -INSERT INTO object_types (object_type) VALUES ('NodeNetwork'); -INSERT INTO object_types (object_type) VALUES ('Node'); -INSERT INTO object_types (object_type) VALUES ('PCU'); -INSERT INTO object_types (object_type) VALUES ('Person'); -INSERT INTO object_types (object_type) VALUES ('Role'); -INSERT INTO object_types (object_type) VALUES ('Session'); -INSERT INTO object_types (object_type) VALUES ('Site'); -INSERT INTO object_types (object_type) VALUES ('SliceAttributeType'); -INSERT INTO object_types (object_type) VALUES ('SliceAttribute'); -INSERT INTO object_types (object_type) VALUES ('Slice'); -INSERT INTO object_types (object_type) VALUES ('Unknown'); - -- Events CREATE TABLE events ( event_id serial PRIMARY KEY, -- Event identifier person_id integer REFERENCES persons, -- Person responsible for event, if any node_id integer REFERENCES nodes, -- Node responsible for event, if any - event_type text REFERENCES event_types NOT NULL DEFAULT 'Unknown', -- Event type - object_type text REFERENCES object_types NOT NULL DEFAULT 'Unknown', -- Object type associated with event fault_code integer NOT NULL DEFAULT 0, -- Did this event result in error - call text NOT NULL, -- Call responsible for this event - runtime float, -- Event run time - time timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP -- Event timestamp + call_name text NOT NULL, -- Call responsible for this event + call text NOT NULL, -- Call responsible for this event, including parameters + message text, -- High level description of this event + runtime float DEFAULT 0, -- Event run time + time timestamp without time zone NOT NULL DEFAULT CURRENT_TIMESTAMP -- Event timestamp ) WITH OIDS; --- Event objects +-- Database object(s) that may have been affected by a particular event CREATE TABLE event_object ( event_id integer REFERENCES events NOT NULL, -- Event identifier object_id integer NOT NULL -- Object identifier @@ -775,10 +781,10 @@ SELECT events.event_id, events.person_id, events.node_id, -events.event_type, -events.object_type, events.fault_code, +events.call_name, events.call, +events.message, events.runtime, CAST(date_part('epoch', events.time) AS bigint) AS time, COALESCE(event_objects.object_ids, '{}') AS object_ids @@ -802,17 +808,40 @@ persons.url, persons.bio, CAST(date_part('epoch', persons.date_created) AS bigint) AS date_created, CAST(date_part('epoch', persons.last_updated) AS bigint) AS last_updated, +peer_person.peer_id, +peer_person.peer_person_id, COALESCE(person_roles.role_ids, '{}') AS role_ids, COALESCE(person_roles.roles, '{}') AS roles, COALESCE(person_sites.site_ids, '{}') AS site_ids, COALESCE(person_keys.key_ids, '{}') AS key_ids, COALESCE(person_slices.slice_ids, '{}') AS slice_ids FROM persons +LEFT JOIN peer_person USING (person_id) LEFT JOIN person_roles USING (person_id) LEFT JOIN person_sites USING (person_id) LEFT JOIN person_keys USING (person_id) LEFT JOIN person_slices USING (person_id); +CREATE VIEW view_peers AS +SELECT +peers.*, +COALESCE(peer_sites.site_ids, '{}') AS site_ids, +COALESCE(peer_sites.peer_site_ids, '{}') AS peer_site_ids, +COALESCE(peer_persons.person_ids, '{}') AS person_ids, +COALESCE(peer_persons.peer_person_ids, '{}') AS peer_person_ids, +COALESCE(peer_keys.key_ids, '{}') AS key_ids, +COALESCE(peer_keys.peer_key_ids, '{}') AS peer_key_ids, +COALESCE(peer_nodes.node_ids, '{}') AS node_ids, +COALESCE(peer_nodes.peer_node_ids, '{}') AS peer_node_ids, +COALESCE(peer_slices.slice_ids, '{}') AS slice_ids, +COALESCE(peer_slices.peer_slice_ids, '{}') AS peer_slice_ids +FROM peers +LEFT JOIN peer_sites USING (peer_id) +LEFT JOIN peer_persons USING (peer_id) +LEFT JOIN peer_keys USING (peer_id) +LEFT JOIN peer_nodes USING (peer_id) +LEFT JOIN peer_slices USING (peer_id); + CREATE VIEW view_nodes AS SELECT nodes.node_id, @@ -827,6 +856,8 @@ nodes.ssh_rsa_key, nodes.key, CAST(date_part('epoch', nodes.date_created) AS bigint) AS date_created, CAST(date_part('epoch', nodes.last_updated) AS bigint) AS last_updated, +peer_node.peer_id, +peer_node.peer_node_id, COALESCE(node_nodenetworks.nodenetwork_ids, '{}') AS nodenetwork_ids, COALESCE(node_nodegroups.nodegroup_ids, '{}') AS nodegroup_ids, COALESCE(node_slices.slice_ids, '{}') AS slice_ids, @@ -835,46 +866,17 @@ COALESCE(node_pcus.ports, '{}') AS ports, COALESCE(node_conf_files.conf_file_ids, '{}') AS conf_file_ids, node_session.session_id AS session FROM nodes -LEFT JOIN peer_node USING (node_id) +LEFT JOIN peer_node USING (node_id) LEFT JOIN node_nodenetworks USING (node_id) LEFT JOIN node_nodegroups USING (node_id) LEFT JOIN node_slices USING (node_id) LEFT JOIN node_pcus USING (node_id) LEFT JOIN node_conf_files USING (node_id) -LEFT JOIN node_session USING (node_id) -WHERE peer_node.peer_id IS NULL; - -CREATE VIEW view_peers AS -SELECT -peers.*, -peer_nodes.node_ids, -peer_slices.slice_ids -FROM peers -LEFT JOIN peer_nodes USING (peer_id) -LEFT JOIN peer_slices USING (peer_id); - -CREATE VIEW view_foreign_nodes AS -SELECT -nodes.node_id, -nodes.hostname, -peer_node.peer_id, -nodes.boot_state, -nodes.model, -nodes.version, -CAST(date_part('epoch', nodes.date_created) AS bigint) AS date_created, -CAST(date_part('epoch', nodes.last_updated) AS bigint) AS last_updated, -COALESCE(node_slices.slice_ids, '{}') AS slice_ids, -nodes.deleted -FROM nodes -LEFT JOIN peer_node USING (node_id) -LEFT JOIN node_slices USING (node_id) -WHERE peer_node.peer_id IS NOT NULL; +LEFT JOIN node_session USING (node_id); CREATE VIEW view_nodegroups AS SELECT -nodegroups.nodegroup_id, -nodegroups.name, -nodegroups.description, +nodegroups.*, COALESCE(nodegroup_nodes.node_ids, '{}') AS node_ids, COALESCE(nodegroup_conf_files.conf_file_ids, '{}') AS conf_file_ids FROM nodegroups @@ -883,18 +885,7 @@ LEFT JOIN nodegroup_conf_files USING (nodegroup_id); CREATE VIEW view_conf_files AS SELECT -conf_files.conf_file_id, -conf_files.enabled, -conf_files.source, -conf_files.dest, -conf_files.file_permissions, -conf_files.file_owner, -conf_files.file_group, -conf_files.preinstall_cmd, -conf_files.postinstall_cmd, -conf_files.error_cmd, -conf_files.ignore_cmd_errors, -conf_files.always_update, +conf_files.*, COALESCE(conf_file_nodes.node_ids, '{}') AS node_ids, COALESCE(conf_file_nodegroups.nodegroup_ids, '{}') AS nodegroup_ids FROM conf_files @@ -903,15 +894,7 @@ LEFT JOIN conf_file_nodegroups USING (conf_file_id); CREATE VIEW view_pcus AS SELECT -pcus.pcu_id, -pcus.site_id, -pcus.hostname, -pcus.ip, -pcus.protocol, -pcus.username, -pcus.password, -pcus.model, -pcus.notes, +pcus.*, COALESCE(pcu_nodes.node_ids, '{}') AS node_ids, COALESCE(pcu_nodes.ports, '{}') AS ports FROM pcus @@ -932,12 +915,15 @@ sites.longitude, sites.url, CAST(date_part('epoch', sites.date_created) AS bigint) AS date_created, CAST(date_part('epoch', sites.last_updated) AS bigint) AS last_updated, +peer_site.peer_id, +peer_site.peer_site_id, COALESCE(site_persons.person_ids, '{}') AS person_ids, COALESCE(site_nodes.node_ids, '{}') AS node_ids, COALESCE(site_addresses.address_ids, '{}') AS address_ids, COALESCE(site_slices.slice_ids, '{}') AS slice_ids, COALESCE(site_pcus.pcu_ids, '{}') AS pcu_ids FROM sites +LEFT JOIN peer_site USING (site_id) LEFT JOIN site_persons USING (site_id) LEFT JOIN site_nodes USING (site_id) LEFT JOIN site_addresses USING (site_id) @@ -946,19 +932,22 @@ LEFT JOIN site_pcus USING (site_id); CREATE VIEW view_addresses AS SELECT -addresses.address_id, -addresses.line1, -addresses.line2, -addresses.line3, -addresses.city, -addresses.state, -addresses.postalcode, -addresses.country, +addresses.*, COALESCE(address_address_types.address_type_ids, '{}') AS address_type_ids, COALESCE(address_address_types.address_types, '{}') AS address_types FROM addresses LEFT JOIN address_address_types USING (address_id); +CREATE VIEW view_keys AS +SELECT +keys.*, +person_key.person_id, +peer_key.peer_id, +peer_key.peer_key_id +FROM keys +LEFT JOIN person_key USING (key_id) +LEFT JOIN peer_key USING (key_id); + CREATE VIEW view_slices AS SELECT slices.slice_id, @@ -969,9 +958,11 @@ slices.url, slices.description, slices.max_nodes, slices.creator_person_id, -slices.deleted, +slices.is_deleted, CAST(date_part('epoch', slices.created) AS bigint) AS created, CAST(date_part('epoch', slices.expires) AS bigint) AS expires, +peer_slice.peer_id, +peer_slice.peer_slice_id, COALESCE(slice_nodes.node_ids, '{}') AS node_ids, COALESCE(slice_persons.person_ids, '{}') AS person_ids, COALESCE(slice_attributes.slice_attribute_ids, '{}') AS slice_attribute_ids @@ -979,30 +970,8 @@ FROM slices LEFT JOIN peer_slice USING (slice_id) LEFT JOIN slice_nodes USING (slice_id) LEFT JOIN slice_persons USING (slice_id) -LEFT JOIN slice_attributes USING (slice_id) -WHERE peer_slice.peer_id IS NULL -AND slices.site_id IS NOT NULL -AND slices.creator_person_id IS NOT NULL; - -CREATE VIEW view_foreign_slices AS -SELECT -slices.slice_id, -slices.name, -peer_slice.peer_id, -slices.instantiation, -slices.url, -slices.description, -slices.max_nodes, -slices.deleted, -CAST(date_part('epoch', slices.created) AS bigint) AS created, -CAST(date_part('epoch', slices.expires) AS bigint) AS expires, -COALESCE(slice_nodes.node_ids, '{}') AS node_ids -FROM slices -LEFT JOIN peer_slice USING (slice_id) -LEFT JOIN slice_nodes USING (slice_id) -WHERE peer_slice.peer_id IS NOT NULL; +LEFT JOIN slice_attributes USING (slice_id); --- CREATE VIEW view_slice_attributes AS SELECT slice_attribute.slice_attribute_id, @@ -1044,6 +1013,3 @@ INSERT INTO sites (login_base, name, abbreviated_name, max_slices) VALUES ('pl', 'PlanetLab Central', 'PLC', 100); - - -