cluster.out
来自「postgresql8.3.4源码,开源数据库」· OUT 代码 · 共 444 行 · 第 1/2 页
OUT
444 行
25 | 9 | nueve | | 31 | 8 | ocho | | 1 | 11 | once | | 28 | 15 | quince | | 32 | 6 | seis | xyzzyxyzzyxyzzyxyzzyxyzzyxyzzy | 500000 29 | 7 | siete | | 15 | 13 | trece | | 22 | 30 | treinta | | 17 | 32 | treinta y dos | | 3 | 31 | treinta y uno | | 5 | 3 | tres | | 20 | 1 | uno | | 6 | 20 | veinte | | 14 | 25 | veinticinco | | 21 | 24 | veinticuatro | | 4 | 22 | veintidos | | 19 | 29 | veintinueve | | 16 | 28 | veintiocho | | 27 | 26 | veintiseis | | 13 | 27 | veintisiete | | 7 | 23 | veintitres | | 8 | 21 | veintiuno | | 0 | 100 | in child table | | (33 rows)-- Verify that foreign key link still worksINSERT INTO clstr_tst (b, c) VALUES (1111, 'this should fail');ERROR: insert or update on table "clstr_tst" violates foreign key constraint "clstr_tst_con"DETAIL: Key (b)=(1111) is not present in table "clstr_tst_s".SELECT conname FROM pg_constraint WHERE conrelid = 'clstr_tst'::regclassORDER BY 1; conname ---------------- clstr_tst_con clstr_tst_pkey(2 rows)SELECT relname, relkind, EXISTS(SELECT 1 FROM pg_class WHERE oid = c.reltoastrelid) AS hastoastFROM pg_class c WHERE relname LIKE 'clstr_tst%' ORDER BY relname; relname | relkind | hastoast ----------------------+---------+---------- clstr_tst | r | t clstr_tst_a_seq | S | f clstr_tst_b | i | f clstr_tst_b_c | i | f clstr_tst_c | i | f clstr_tst_c_b | i | f clstr_tst_inh | r | t clstr_tst_pkey | i | f clstr_tst_s | r | f clstr_tst_s_pkey | i | f clstr_tst_s_rf_a_seq | S | f(11 rows)-- Verify that indisclustered is correctly setSELECT pg_class.relname FROM pg_index, pg_class, pg_class AS pg_class_2WHERE pg_class.oid=indexrelid AND indrelid=pg_class_2.oid AND pg_class_2.relname = 'clstr_tst' AND indisclustered; relname ------------- clstr_tst_c(1 row)-- Try changing indisclusteredALTER TABLE clstr_tst CLUSTER ON clstr_tst_b_c;SELECT pg_class.relname FROM pg_index, pg_class, pg_class AS pg_class_2WHERE pg_class.oid=indexrelid AND indrelid=pg_class_2.oid AND pg_class_2.relname = 'clstr_tst' AND indisclustered; relname --------------- clstr_tst_b_c(1 row)-- Try turning off all clusteringALTER TABLE clstr_tst SET WITHOUT CLUSTER;SELECT pg_class.relname FROM pg_index, pg_class, pg_class AS pg_class_2WHERE pg_class.oid=indexrelid AND indrelid=pg_class_2.oid AND pg_class_2.relname = 'clstr_tst' AND indisclustered; relname ---------(0 rows)-- Verify that clustering all tables does in fact cluster the right onesCREATE USER clstr_user;CREATE TABLE clstr_1 (a INT PRIMARY KEY);NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "clstr_1_pkey" for table "clstr_1"CREATE TABLE clstr_2 (a INT PRIMARY KEY);NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "clstr_2_pkey" for table "clstr_2"CREATE TABLE clstr_3 (a INT PRIMARY KEY);NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "clstr_3_pkey" for table "clstr_3"ALTER TABLE clstr_1 OWNER TO clstr_user;ALTER TABLE clstr_3 OWNER TO clstr_user;GRANT SELECT ON clstr_2 TO clstr_user;INSERT INTO clstr_1 VALUES (2);INSERT INTO clstr_1 VALUES (1);INSERT INTO clstr_2 VALUES (2);INSERT INTO clstr_2 VALUES (1);INSERT INTO clstr_3 VALUES (2);INSERT INTO clstr_3 VALUES (1);-- "CLUSTER <tablename>" on a table that hasn't been clusteredCLUSTER clstr_2;ERROR: there is no previously clustered index for table "clstr_2"CLUSTER clstr_1_pkey ON clstr_1;CLUSTER clstr_2 USING clstr_2_pkey;SELECT * FROM clstr_1 UNION ALL SELECT * FROM clstr_2 UNION ALL SELECT * FROM clstr_3; a --- 1 2 1 2 2 1(6 rows)-- revert to the original stateDELETE FROM clstr_1;DELETE FROM clstr_2;DELETE FROM clstr_3;INSERT INTO clstr_1 VALUES (2);INSERT INTO clstr_1 VALUES (1);INSERT INTO clstr_2 VALUES (2);INSERT INTO clstr_2 VALUES (1);INSERT INTO clstr_3 VALUES (2);INSERT INTO clstr_3 VALUES (1);-- this user can only cluster clstr_1 and clstr_3, but the latter-- has not been clusteredSET SESSION AUTHORIZATION clstr_user;CLUSTER;SELECT * FROM clstr_1 UNION ALL SELECT * FROM clstr_2 UNION ALL SELECT * FROM clstr_3; a --- 1 2 2 1 2 1(6 rows)-- cluster a single table using the indisclustered bit previously setDELETE FROM clstr_1;INSERT INTO clstr_1 VALUES (2);INSERT INTO clstr_1 VALUES (1);CLUSTER clstr_1;SELECT * FROM clstr_1; a --- 1 2(2 rows)-- Test MVCC-safety of cluster. There isn't much we can do to verify the-- results with a single backend...CREATE TABLE clustertest (key int PRIMARY KEY);NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "clustertest_pkey" for table "clustertest"INSERT INTO clustertest VALUES (10);INSERT INTO clustertest VALUES (20);INSERT INTO clustertest VALUES (30);INSERT INTO clustertest VALUES (40);INSERT INTO clustertest VALUES (50);-- Use a transaction so that updates are not committed when CLUSTER sees 'emBEGIN;-- Test update where the old row version is found first in the scanUPDATE clustertest SET key = 100 WHERE key = 10;-- Test update where the new row version is found first in the scanUPDATE clustertest SET key = 35 WHERE key = 40;-- Test longer update chain UPDATE clustertest SET key = 60 WHERE key = 50;UPDATE clustertest SET key = 70 WHERE key = 60;UPDATE clustertest SET key = 80 WHERE key = 70;SELECT * FROM clustertest; key ----- 20 30 100 35 80(5 rows)CLUSTER clustertest_pkey ON clustertest;SELECT * FROM clustertest; key ----- 20 30 35 80 100(5 rows)COMMIT;SELECT * FROM clustertest; key ----- 20 30 35 80 100(5 rows)-- clean up\c -DROP TABLE clustertest;DROP TABLE clstr_1;DROP TABLE clstr_2;DROP TABLE clstr_3;DROP USER clstr_user;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?