enum.sql

来自「postgresql8.3.4源码,开源数据库」· SQL 代码 · 共 172 行

SQL
172
字号
---- Enum tests--CREATE TYPE rainbow AS ENUM ('red', 'orange', 'yellow', 'green', 'blue', 'purple');---- Did it create the right number of rows?--SELECT COUNT(*) FROM pg_enum WHERE enumtypid = 'rainbow'::regtype;---- I/O functions--SELECT 'red'::rainbow;SELECT 'mauve'::rainbow;---- Basic table creation, row selection--CREATE TABLE enumtest (col rainbow);INSERT INTO enumtest values ('red'), ('orange'), ('yellow'), ('green');COPY enumtest FROM stdin;bluepurple\.SELECT * FROM enumtest;---- Operators, no index--SELECT * FROM enumtest WHERE col = 'orange';SELECT * FROM enumtest WHERE col <> 'orange' ORDER BY col;SELECT * FROM enumtest WHERE col > 'yellow' ORDER BY col;SELECT * FROM enumtest WHERE col >= 'yellow' ORDER BY col;SELECT * FROM enumtest WHERE col < 'green' ORDER BY col;SELECT * FROM enumtest WHERE col <= 'green' ORDER BY col;---- Cast to/from text--SELECT 'red'::rainbow::text || 'hithere';SELECT 'red'::text::rainbow = 'red'::rainbow;---- Aggregates--SELECT min(col) FROM enumtest;SELECT max(col) FROM enumtest;SELECT max(col) FROM enumtest WHERE col < 'green';---- Index tests, force use of index--SET enable_seqscan = off;SET enable_bitmapscan = off;---- Btree index / opclass with the various operators--CREATE UNIQUE INDEX enumtest_btree ON enumtest USING btree (col);SELECT * FROM enumtest WHERE col = 'orange';SELECT * FROM enumtest WHERE col <> 'orange' ORDER BY col;SELECT * FROM enumtest WHERE col > 'yellow' ORDER BY col;SELECT * FROM enumtest WHERE col >= 'yellow' ORDER BY col;SELECT * FROM enumtest WHERE col < 'green' ORDER BY col;SELECT * FROM enumtest WHERE col <= 'green' ORDER BY col;SELECT min(col) FROM enumtest;SELECT max(col) FROM enumtest;SELECT max(col) FROM enumtest WHERE col < 'green';DROP INDEX enumtest_btree;---- Hash index / opclass with the = operator--CREATE INDEX enumtest_hash ON enumtest USING hash (col);SELECT * FROM enumtest WHERE col = 'orange';DROP INDEX enumtest_hash;---- End index tests--RESET enable_seqscan;RESET enable_bitmapscan;---- Domains over enums--CREATE DOMAIN rgb AS rainbow CHECK (VALUE IN ('red', 'green', 'blue'));SELECT 'red'::rgb;SELECT 'purple'::rgb;SELECT 'purple'::rainbow::rgb;DROP DOMAIN rgb;---- Arrays--SELECT '{red,green,blue}'::rainbow[];SELECT ('{red,green,blue}'::rainbow[])[2];SELECT 'red' = ANY ('{red,green,blue}'::rainbow[]);SELECT 'yellow' = ANY ('{red,green,blue}'::rainbow[]);SELECT 'red' = ALL ('{red,green,blue}'::rainbow[]);SELECT 'red' = ALL ('{red,red}'::rainbow[]);---- Support functions--SELECT enum_first(NULL::rainbow);SELECT enum_last('green'::rainbow);SELECT enum_range(NULL::rainbow);SELECT enum_range('orange'::rainbow, 'green'::rainbow);SELECT enum_range(NULL, 'green'::rainbow);SELECT enum_range('orange'::rainbow, NULL);SELECT enum_range(NULL::rainbow, NULL);---- User functions, can't test perl/python etc here since may not be compiled.--CREATE FUNCTION echo_me(anyenum) RETURNS text AS $$BEGINRETURN $1::text || 'omg';END$$ LANGUAGE plpgsql;SELECT echo_me('red'::rainbow);---- Concrete function should override generic one--CREATE FUNCTION echo_me(rainbow) RETURNS text AS $$BEGINRETURN $1::text || 'wtf';END$$ LANGUAGE plpgsql;SELECT echo_me('red'::rainbow);---- If we drop the original generic one, we don't have to qualify the type-- anymore, since there's only one match--DROP FUNCTION echo_me(anyenum);SELECT echo_me('red');DROP FUNCTION echo_me(rainbow);---- RI triggers on enum types--CREATE TABLE enumtest_parent (id rainbow PRIMARY KEY);CREATE TABLE enumtest_child (parent rainbow REFERENCES enumtest_parent);INSERT INTO enumtest_parent VALUES ('red');INSERT INTO enumtest_child VALUES ('red');INSERT INTO enumtest_child VALUES ('blue');  -- failDELETE FROM enumtest_parent;  -- fail---- cross-type RI should fail--CREATE TYPE bogus AS ENUM('good', 'bad', 'ugly');CREATE TABLE enumtest_bogus_child(parent bogus REFERENCES enumtest_parent);DROP TYPE bogus;---- Cleanup--DROP TABLE enumtest_child;DROP TABLE enumtest_parent;DROP TABLE enumtest;DROP TYPE rainbow;---- Verify properly cleaned up--SELECT COUNT(*) FROM pg_type WHERE typname = 'rainbow';SELECT * FROM pg_enum WHERE NOT EXISTS  (SELECT 1 FROM pg_type WHERE pg_type.oid = enumtypid);

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?