create sequence test1_seq ;
create table test1 (
t_1_id int4 default nextval('test1_seq') ,
t_1_name text default 'N/A',
primary key(t_1_id)
);
create table test2 (
t_2_id int4 ,
t_2_name text default 'N/A',
t_2_item text default 'N/A',
CONSTRAINT const_test2
FOREIGN KEY(t_2_id) REFERENCES test1
ON DELETE CASCADE
ON UPDATE CASCADE
);
insert into test1(t_1_name) values('jone');
insert into test2 values(currval('test1_seq'),'jone','A-100');
insert into test1(t_1_name) values('sam');
insert into test2 values(currval('test1_seq'),'sam','B-500');
select * from test1;
t_1_id | t_1_name
--------+----------
1 | jone
2 | sam
(2 rows)
select * from test2;
t_2_id | t_2_name | t_2_item
--------+----------+----------
1 | jone | A-100
2 | sam | B-500
(2 rows)
delete from test1 where t_1_id=1;
select * from test1;
t_1_id | t_1_name
--------+----------
2 | sam
(1 row)
select * from test2;
t_2_id | t_2_name | t_2_item
--------+----------+----------
2 | sam | B-500
(1 row)
update test1 set t_1_id=10 , t_1_name='abc' where t_1_id=2;
select * from test1;
t_1_id | t_1_name
--------+----------
10 | abc
(1 row)
select * from test2;
t_2_id | t_2_name | t_2_item
--------+----------+----------
10 | sam | B-500
(1 row)
´ÙÀ½ÀÇ ¿¹Á¦´Â À§ÀÇ Example 1 ¿¹Á¦¿Í °ÅÀÇ ºñ½ÁÇÕ´Ï´Ù. ´ÜÁö, Primary, Foreign Key¿¡ µÎ°³ÀÇ columnÀ» »ç¿ëÇÑ °Í¸¸ »©°í¿ä..
----Example 2
create sequence test1_seq ;
create table test1 (
t_1_id int4 default nextval('test1_seq') ,
t_1_name text default 'N/A',
primary key(t_1_id, t_1_name)
);
create table test2 (
t_2_id int4 ,
t_2_name text default 'N/A',
t_2_item text default 'N/A',
CONSTRAINT const_test2
FOREIGN KEY(t_2_id, t_2_name) REFERENCES test1
ON DELETE CASCADE
ON UPDATE CASCADE
);
insert into test1(t_1_name) values('jane');
insert into test2 values(currval('test1_seq'),'jane','A-100');
insert into test1(t_1_name) values('sam');
insert into test2 values(currval('test1_seq'),'sam','B-500');
insert into test1(t_1_name) values('tom');
insert into test2 values(currval('test1_seq'),'tom','C-150');
select * from test1;
t_1_id | t_1_name
--------+----------
1 | jane
2 | sam
3 | tom
(3 rows)
select * from test2;
t_2_id | t_2_name | t_2_item
--------+----------+----------
1 | jane | A-100
2 | sam | B-500
3 | tom | C-150
(3 rows)
delete from test1 where t_1_id=1;
select * from test1;
t_1_id | t_1_name
--------+----------
2 | sam
3 | tom
(2 rows)
select * from test2;
t_2_id | t_2_name | t_2_item
--------+----------+----------
2 | sam | B-500
3 | tom | C-150
(2 rows)
update test1 set t_1_id=10 , t_1_name='abc' where t_1_id=3;
select * from test1;
t_1_id | t_1_name
--------+----------
2 | sam
10 | abc
(2 rows)
select * from test2;
t_2_id | t_2_name | t_2_item
--------+----------+----------
2 | sam | B-500
10 | abc | C-150
(2 rows)
--°í°´°ú »óǰ¿¡´Â ÆÇ¸Å¶ó´Â °ü°è°¡ ¼º¸³ÇÑ´Ù.
°í°´ TABLE »óǰ TABLE
+-----------+ +------------+ Primary Key
| °í°´_¹øÈ£ +--+ Primary | »óǰ_¹øÈ£ +---+
+-----------+ | +------------+ |
| °í°´_¼ºº° | | | »óǰ_À̸§ | |
+-----------+ | +------------+ |
| °í°´_ÀüÈ | | | »óǰ_ȸ»ç | |
+-----------+ | +------------+ |
| °í°´_ÁÖ¼Ò | | | »óǰ_°¡°Ý | |
+-----------+ | +------------+ |
| |
| |
| |
| ÆÇ¸Å TABLE |
| +----------------+ |
| | ÆÇ¸Å_¹øÈ£ | |
| +----------------+ |
+----+ ÆÇ¸Å_°í°´_¹øÈ£ | |
Foreign +----------------+ |
| ÆÇ¸Å_»óǰ_¹øÈ£ +------+
+----------------+ Foreign Key
| ÆÇ¸Å_³¯Â¥ |
+----------------+
| ÆÇ¸Å_°³¼ö |
+----------------+
´ÙÀ½Àº À§ÀÇ ±×¸²¿¡ ´ëÇÑ ¿¹Á¦ÀÔ´Ï´Ù.
create table °í°´ (
°í°´_¹øÈ£ text ,
°í°´_À̸§ text,
°í°´_¼ºº° bool,
°í°´_ÀüÈ text,
°í°´_ÁÖ¼Ò text,
primary key(°í°´_¹øÈ£)
);
create table »óǰ (
»óǰ_¹øÈ£ text,
»óǰ_À̸§ text,
»óǰ_ȸ»ç text,
»óǰ_°¡°Ý int4,
primary key(»óǰ_¹øÈ£)
);
create table ÆÇ¸Å (
ÆÇ¸Å_¹øÈ£ text,
ÆÇ¸Å_°í°´_¹øÈ£ text,
ÆÇ¸Å_»óǰ_¹øÈ£ text,
ÆÇ¸Å_³¯Â¥ date,
ÆÇ¸Å_°³¼ö int4,
constraint °í°´_con
foreign key(ÆÇ¸Å_°í°´_¹øÈ£) references °í°´(°í°´_¹øÈ£) ,
constraint »óǰ_con
foreign key(ÆÇ¸Å_»óǰ_¹øÈ£) references »óǰ(»óǰ_¹øÈ£)
);
insert into °í°´ values (
'ÇØ¿î´ë±¸-001-³²-30', 'nogadax', 't',
'051-729-7777', 'ºÎ»ê½Ã ÇØ¿î´ë±¸ ÇØ¿î´ë µ¿¹é¼¶ 1/1'
);
insert into °í°´ values (
'³²±¸-002-³²-27', 'ogler', 't',
'051-629-7887', 'ºÎ»ê½Ã ³²±¸ ¿ëÈ£µ¿ 2/1'
);
insert into °í°´ values (
'³²±¸-003-³²-32', 'winob', 't',
'051-629-2111', 'ºÎ»ê½Ã ³²±¸ ´ë¿¬µ¿ 8/8'
);
insert into »óǰ values
('co-001-e-01' , 'TV' , 'NGD co.' , 90000);
insert into »óǰ values
('co-008-e-02' , 'RADIO' , 'NGD co.' , 20000);
insert into »óǰ values
('co-011-e-01' , 'AUDIO' , 'NGD co.' , 70000);
select * from °í°´;
°í°´_¹øÈ£ | °í°´_À̸§ |..| °í°´_ÁÖ¼Ò
-------------------+-----------+..+-----------------------------------
ÇØ¿î´ë±¸-001-³²-30 | nogadax |..| ºÎ»ê½Ã ÇØ¿î´ë±¸ ÇØ¿î´ë µ¿¹é¼¶ 1/1
³²±¸-002-³²-27 | ogler |..| ºÎ»ê½Ã ³²±¸ ¿ëÈ£µ¿ 2/1
³²±¸-003-³²-32 | winob |..| ºÎ»ê½Ã ³²±¸ ´ë¿¬µ¿ 8/8
(3 rows)
select * from »óǰ;
»óǰ_¹øÈ£ | »óǰ_À̸§ | »óǰ_ȸ»ç | »óǰ_°¡°Ý
-------------+-----------+-----------+-----------
co-001-e-01 | TV | NGD co. | 90000
co-008-e-02 | RADIO | NGD co. | 20000
co-011-e-01 | AUDIO | NGD co. | 70000
(3 rows)
--integrity(¹«°á¼º)¿¡ ¹®Á¦°¡ ¾øÀ¸¹Ç·Î.. ÀÔ·ÂÀÌ ÀÌ·ç¾îÁø´Ù.
insert into ÆÇ¸Å values (
'ÆÇ¸Å_001_S_Branch' , '³²±¸-002-³²-27',
'co-001-e-01' ,'2001-03-27',2
);
--integrity(¹«°á¼º) error ..ÀÔ·ÂÀÌ µÇÁö ¾Ê´Â´Ù.
--"³²±¸-003-³²-27"À̶õ °ªÀº "°í°´" Å×À̺íÀÇ "°í°´_¹øÈ£"¿¡ ¾øÀ½.
--"co-001-e-02" À̶õ °ªÀº "»óǰ" Å×À̺íÀÇ "»óǰ_¹øÈ£"¿¡ ¾øÀ½
insert into ÆÇ¸Å values ('ÆÇ¸Å_001_S_Branch' , '³²±¸-003-³²-27',
'co-011-e-01' ,'2001-03-28',1
);
insert into ÆÇ¸Å values ('ÆÇ¸Å_001_S_Branch' , '³²±¸-003-³²-32',
'co-001-e-02' ,'2001-03-29',3
);
select * from ÆÇ¸Å;
ÆÇ¸Å_¹øÈ£ | ÆÇ¸Å_°í°´_¹øÈ£ | ÆÇ¸Å_»óǰ_¹øÈ£ | ÆÇ¸Å_³¯Â¥ | ÆÇ¸Å_°³¼ö
-------------------+----------------+----------------+------------+-----------
ÆÇ¸Å_001_S_Branch | ³²±¸-002-³²-27 | co-001-e-01 | 2001-03-27 | 2
(1 row)
´ÙÀ½Àº À§ ¿¹Á¦ÀÇ Full SQL sourceÀÌ´Ù.
-------------------------------Cut here!!
drop index °í°´_pkey;
drop index »óǰ_pkey;
drop table °í°´;
drop table »óǰ;
drop table ÆÇ¸Å;
create table °í°´ (
°í°´_¹øÈ£ text ,
°í°´_À̸§ text,
°í°´_¼ºº° bool,
°í°´_ÀüÈ text,
°í°´_ÁÖ¼Ò text,
primary key(°í°´_¹øÈ£)
);
create table »óǰ (
»óǰ_¹øÈ£ text,
»óǰ_À̸§ text,
»óǰ_ȸ»ç text,
»óǰ_°¡°Ý int4,
primary key(»óǰ_¹øÈ£)
);
create table ÆÇ¸Å (
ÆÇ¸Å_¹øÈ£ text,
ÆÇ¸Å_°í°´_¹øÈ£ text,
ÆÇ¸Å_»óǰ_¹øÈ£ text,
ÆÇ¸Å_³¯Â¥ date,
ÆÇ¸Å_°³¼ö int4,
constraint °í°´_con
foreign key(ÆÇ¸Å_°í°´_¹øÈ£) references °í°´(°í°´_¹øÈ£) ,
constraint »óǰ_con
foreign key(ÆÇ¸Å_»óǰ_¹øÈ£) references »óǰ(»óǰ_¹øÈ£)
);
insert into °í°´ values (
'ÇØ¿î´ë±¸-001-³²-30', 'nogadax', 't',
'051-729-7777', 'ºÎ»ê½Ã ÇØ¿î´ë±¸ ÇØ¿î´ë µ¿¹é¼¶ 1/1'
);
insert into °í°´ values (
'³²±¸-002-³²-27', 'ogler', 't',
'051-629-7887', 'ºÎ»ê½Ã ³²±¸ ¿ëÈ£µ¿ 2/1'
);
insert into °í°´ values (
'³²±¸-003-³²-32', 'winob', 't',
'051-629-2111', 'ºÎ»ê½Ã ³²±¸ ´ë¿¬µ¿ 8/8'
);
insert into »óǰ values
('co-001-e-01' , 'TV' , 'NGD co.' , 90000);
insert into »óǰ values
('co-008-e-02' , 'RADIO' , 'NGD co.' , 20000);
insert into »óǰ values
('co-011-e-01' , 'AUDIO' , 'NGD co.' , 70000);
select * from °í°´;
select * from »óǰ;
--integrity(¹«°á¼º)¿¡ ¹®Á¦°¡ ¾øÀ¸¹Ç·Î.. ÀÔ·ÂÀÌ ÀÌ·ç¾îÁø´Ù.
insert into ÆÇ¸Å values (
'ÆÇ¸Å_001_S_Branch' , '³²±¸-002-³²-27',
'co-001-e-01' ,'2001-03-27',2
);
--integrity(¹«°á¼º) error ..ÀÔ·ÂÀÌ µÇÁö ¾Ê´Â´Ù.
--"³²±¸-003-³²-27"À̶õ °ªÀº "°í°´" Å×À̺íÀÇ "°í°´_¹øÈ£"¿¡ ¾øÀ½.
--"co-001-e-02" À̶õ °ªÀº "»óǰ" Å×À̺íÀÇ "»óǰ_¹øÈ£"¿¡ ¾øÀ½
insert into ÆÇ¸Å values ('ÆÇ¸Å_001_S_Branch' , '³²±¸-003-³²-27',
'co-011-e-01' ,'2001-03-28',1
);
insert into ÆÇ¸Å values ('ÆÇ¸Å_001_S_Branch' , '³²±¸-003-³²-32',
'co-001-e-02' ,'2001-03-29',3
);
select * from ÆÇ¸Å;
-----------------------------End ..
´ÙÀ½Àº serial ¿¡Á¦ÀÌ´Ù.
--SERIAL (Auto-Sequence type)
drop sequence table_name1_colm_id_seq;
drop index table_name1_colm_id_key;
drop table table_name1;
DROP
DROP
DROP
create table table_name1(
colm_id serial ,
colm_name text
);
CREATE
insert into table_name1(colm_name) values('xxx');
insert into table_name1(colm_name) values('yyy');
insert into table_name1(colm_name) values('zzz');
INSERT 22729 1
INSERT 22730 1
INSERT 22731 1
select * from table_name1;
colm_id | colm_name
---------+-----------
1 | xxx
2 | yyy
3 | zzz
(3 rows)
´ÙÀ½Àº sequence ¿¹Á¦ÀÌ´Ù.
drop sequence table_name2_colm_id_seq;
drop index table_name2_colm_id_key;
drop table table_name2;
DROP
DROP
DROP
create sequence table_name2_colm_id_seq;
create table table_name2(
colm_id int4 default nextval('table_name2_colm_id_seq'),
colm_name text
);
create unique index table_name2_colm_id_key on table_name2(colm_id);
CREATE
CREATE
CREATE
insert into table_name2(colm_name) values('aaa');
insert into table_name2(colm_name) values('bbb');
insert into table_name2(colm_name) values('ccc');
INSERT 22763 1
INSERT 22764 1
INSERT 22765 1
select * from table_name2;
colm_id | colm_name
---------+-----------
1 | aaa
2 | bbb
3 | ccc
(3 rows)
CREATE TABLE FUNCTION_NAME([PARAM1,PARAM2,..]) RETURNS [SETOF] DATA_TYPE
AS '
USER_DEFINITION
' LANGUAGE 'lang';
À§ÀÇ []´Â »ý·« °¡´ÉÇÔÀ» ÀǹÌÇÑ´Ù. lang¿¡´Â sql,plpgsql,c µîÀÌ ¿Ã¼ö ÀÖ´Ù.
´ÙÀ½Àº ¾ÕºÎºÐ(±âÃÊÆí1)¿¡¼ ¾ð±ÞµÈ function ¿¹ÀÌ´Ù. ½ÇÇà °á°ú´Â ¾ÕºÎºÐÀ» ÂüÁ¶Ç϶ó.
CREATE FUNCTION SQL_FUNC_1(int4) RETURNS text AS '
SELECT
CASE
WHEN NOGADA_TAB.id_ngd = $1
THEN ''ÀÖ±º¿ä..''::text
ELSE ''¾ø±º¿ä..''::text
END
' LANGUAGE 'sql';
SELECT SQL_FUNC_1(1) ;
´ÙÀ½Àº Æ÷½ºÆ®±×·¹½ºÀÇ functionÀ¸·Î °£´ÜÇÑ ¿¹¿Í ±× °á°úÀÌ´Ù.
create function func1() returns text
as ' select \'nogadax\'::text \; '
language 'sql';
select func1() as name;
name
-------
nogadax
(1 row)
returns ¿¡ ¿¹¾à¾î setof ¸¦ »ç¿ëÇϸé Çѹø¿¡ ¿©·¯ µ¥ÀÌŸ¸¦ ¹ÞÀ» ¼ö ÀÖ´Ù. ¸®ÅÏÇü¿¡´Â ÀÏ¹Ý ÀÚ·áÇü»Ó¸¸¾Æ´Ï¶ó Å×À̺íÀ̳ª ºäµµ Æ÷ÇԵȴÙ.
create table tablex (id_t int4, name text);
insert into tablex values ( 1, 'abc');
insert into tablex values ( 2, 'bcd');
insert into tablex values ( 3, 'cde');
insert into tablex values ( 4, 'def');
create function func2(int4) returns setof tablex
as ' select * from tablex where id_t > $1 '
language 'sql';
select id_t(func2(1)) as id ;
id
---
2
3
4
(3 rows)
select id_t(func2(2)) as id , name(func2(2)) as name;
id | name
-----+--------
3 | cde
4 | def
(2 rows)
PL/pgSQLÀº PGLIBÀÇ plpgsql.so¸¦ ÇÊ¿ä·Î Çϸç ÀÌ ÆÄÀÏÀ» Çڵ鷯 ȤÀº 󸮱â¶ó ÇÑ´Ù. PL/pgSQLÀ» »ç¿ëÇϱâ À§Çؼ´Â Çڵ鷯¸¦ µ¥ÀÌŸº£À̽º¿¡ µî·ÏÇÏ¿©¾ß ÇÑ´Ù. Âü°í·Î Æ®¸®°Å¿¡¼ PL/pgSQL ÀÌ »ç¿ëµÉ¶§´Â Æ®¸®°Å ÇÁ·Î½ÃÁ®¶ó ÇÑ´Ù. ´ÙÀ½Àº µî·Ï ¿¹ÀÌ´Ù.
$ su - postgres
$ createlang plpgsql template1
$
´ÙÀ½Àº PL/pgSQLÀÇ ¿¹ÀÌ´Ù.
create function test(int4)returns int4
as '
begin
return $1;
end;
' language 'plpgsql';
select test(2) ;
test
----
2
(1 rows)
Æ®¸®°Å ÇÁ·Î½ÃÁ®¶õ Æ®¸®°Å¿¡¼ »ç¿ëµÇ´Â FUNCTION À» ÀǹÌÇϸç PL/pgSQLÀÌ Æ®¸®°Å¿¡¼ »ç¿ëµÉ °æ¿ìµµ ¸¶Âù°¡Áö·Î Æ®¸®°Å ÇÁ·Î½ÃÁ®¶ó ÇÑ´Ù.
PL/pgSQL ÀÌ Æ®¸®°Å ÇÁ·Î½ÃÁ®·Î ½Ã¿ëµÉ ¶§ Ưº°È÷ »ç¿ëµÇ´Â º¯¼öµéÀÌ ÀÖ´Ù. ´ÙÀ½Àº Æ®¸®°Å ÇÁ·Î½ÃÁ® º¯¼öµéÀÇ ¿¹ÀÌ´Ù.
±âŸ ÀÚ¼¼ÇÑ °ÍÀº °ü·Ã ¹®¼¸¦ ã¾Æº¸±â ¹Ù¶õ´Ù.
Æ®¸®°Å´Â ÇϳªÀÇ ROW¿¡ ´ëÇØ µ¿ÀÛÇÑ´Ù(FOR EACH ROW). Áï, µ¿½Ã¿¡ ¿©·¯ ROW¿¡ ´ëÇØ 󸮰¡ ÀÌ·ç¾îÁöÁö ¾Ê´Â´Ù. ÀÌ´Â RULE°úÀÇ Â÷ÀÌÁ¡ÀÌ´Ù. ´ÙÀ½Àº Æ®¸®°Å ¿¹Á¦ÀÌ´Ù.
CREATE TABLE test_table1 (test_id int, test_name text);
CREATE TABLE test_table2 (test_id int, test_name text);
insert into test_table1 values(1,'jini1');
insert into test_table2 values(1,'jini1');
insert into test_table1 values(2,'jini2');
insert into test_table2 values(2,'jini2');
insert into test_table1 values(10,'jini10');
insert into test_table1 values(15,'jini15');
insert into test_table1 values(19,'jini19');
insert into test_table1 values(20,'jini20');
select * from test_table1;
test_id | test_name
---------+-----------
1 | jini1
2 | jini2
10 | jini10
15 | jini15
19 | jini19
20 | jini20
(6 rows)
select * from test_table2;
test_id | test_name
---------+-----------
1 | jini1
2 | jini2
(2 rows)
--RAISE ´Â ¿¹¿Ü ó¸®ÀÚÀ̸ç NOTICE, EXCEPTION µîÀÌ ¿Ã ¼ö ÀÖ´Ù.
--RAISE µÚÀÇ EXCEPTION Àº ¿¹¿Ü ¹ß»ý½Ã ÇØ´ç Æ®·£Àè¼ÇÀ» ÁßÁöÇÑ´Ù.
CREATE FUNCTION test_func1() RETURNS OPAQUE AS '
BEGIN
IF NEW.test_id < 20 THEN
RAISE NOTICE ''³Ê¹« À۾ƿä. % %'', TG_RELNAME ,TG_OP;
END IF;
RETURN OLD;
END;
' language 'plpgsql';
CREATE TRIGGER test_trg1 AFTER INSERT ON test_table1
FOR EACH ROW EXECUTE PROCEDURE test_func1();
insert into test_table1 values(10,'jini10');
NOTICE: ³Ê¹« À۾ƿä. test_table1 INSERT
psql:test_trg:76 NOTICE: ³Ê¹« À۾ƿä. test_table2 INSERT
INSERT 21228 1
insert into test_table1 values(15,'jini15');
NOTICE: ³Ê¹« À۾ƿä. test_table1 INSERT
psql:test_trg:77 NOTICE: ³Ê¹« À۾ƿä. test_table2 INSERT
INSERT 21229 1
select * from test_table1;
test_id | test_name
---------+-----------
1 | jini1
2 | jini2
10 | jini10
15 | jini15
19 | jini19
20 | jini20
10 | jini10
15 | jini15
(8 rows)
instead ÀÖ´Â ¾×¼ÇÀº user command ½ÇÇà¾ÈÇÔ. ¿©±â¼ÀÇ user command ´Â rule1 À» ±âµ¿ÇÏ´Â test1 ¿¡ ´ëÇÑ insert .. SQL ¹®ÀÌ´Ù. Áï, rule1 ÀÇ test1Å×ÀÌºí¿¡ ´ëÇÑ insert ¸í·ÉÀº ½ÇÇàµÇÁö ¾Ê°í do instead µÚÀÇ update¹®¸¸ ½ÇÇàµÊ. instead °¡ ¾ø´Ù¸é do µÚÀÇ actionÀ» ÃëÇϰí user command °¡ ½ÇÇàµÊ
create table test1(tid int4,tname text);
create table test2(tid int4,tname text);
insert into test1 values(1,'test1');
insert into test2 values(2,'test2');
create rule rule1 as on insert to test1
do instead update test1 set tname='t1';
create rule rule2 as on insert to test2
do update test2 set tname='t2';
insert into test1 values(3,'test1');
insert into test2 values(4,'test2');
select * from test1;
tid | tname
-----+-------
1 | t1
(1 row)
select * from test2;
tid | tname
-----+-------
2 | t2
4 | test2
(2 rows)
create view °¡ ¾Æ´Ñ create rule¸¦ »ç¿ëÇÏ¿© view ¸¦ »ý¼ºÇÒ °æ¿ì ÇØ´ç Å×ÀÌºí¿¡ ´ëÇÑ »õ·Î¿î ºó Å×À̺íÀ» »ý¼ºÇÏ°í ±× Å×À̺íÀ» view·Î »ç¿ëÇÑ´Ù.
¾Æ·¡ÀÇ ¿¹¿¡¼ "_RETtest3"Àº Ưº°ÇÑ rule À̸§À¸·Î¼ rule ·Î view ¸¦ »ý¼ºÇÒ °æ¿ìÀÇ ¿¹¾à¾î ±¸½ÇÀ» ÇÑ´Ù. Áï, test3 ¿¡ ´ëÇÑ view ¸¦ ¸¸µé·Á´Â ruleÀÇ °æ¿ì ÇØ´ç view¸íÀº "_RETtest3" À¸·Î Á¤ÇØ¾ß ÇÑ´Ù.
--view rule for test3
create table test3(tid int4,tname text);
create rule "_RETtest3" as on select to test3
do instead select * from test1;
select * from test3;
tid | tname
-----+-------
1 | t1
(1 row)
ruleÀÌ Á¦´ë·Î µî·ÏµÇ¾ú´ÂÁö È®ÀÎÄÚÀÚ ½Ã½ºÅÛ Ä«Å»·Î±×ÀÎ pg_rewrite¸¦ °Ë»öÇÑ´Ù.
select rulename from pg_rewrite;
rulename
----------------
_RETpg_user
_RETpg_rules
_RETpg_views
_RETpg_tables
_RETpg_indexes
rule1
rule2
rule3
_RETtest3
(9 rows)
´ÙÀ½Àº ½Ã½ºÅÛ Ä«Å»·Î±×ÀÇ È°¿ë ¿¹ÀÌ´Ù.
--Select database_name
SELECT pg_database.datname , pg_user.usename
FROM pg_database, pg_user
WHERE pg_database.datdba = pg_user.usesysid ;
datname | usename
-----------+----------
postgres | postgres
betty | postgres
nogada | postgres
jini | postgres
winob | postgres
template1 | postgres
registdb | webdb
test2 | speedall
test1 | lockmind
(9 rows)
--select system_relation
SELECT c.relname as Name, 'table'::text as Type, u.usename as Owner
FROM pg_class c, pg_user u
WHERE c.relowner = u.usesysid AND c.relkind = 'r'
AND not exists (select 1 from pg_views where viewname = c.relname)
AND c.relname ~ '^pg_';
name | type | owner
----------------+-------+----------
pg_type | table | postgres
pg_attribute | table | postgres
pg_proc | table | postgres
pg_class | table | postgres
pg_group | table | postgres
pg_database | table | postgres
pg_attrdef | table | postgres
pg_relcheck | table | postgres
pg_trigger | table | postgres
pg_inherits | table | postgres
pg_index | table | postgres
pg_statistic | table | postgres
pg_operator | table | postgres
pg_opclass | table | postgres
pg_am | table | postgres
pg_amop | table | postgres
pg_amproc | table | postgres
pg_language | table | postgres
pg_aggregate | table | postgres
pg_ipl | table | postgres
pg_inheritproc | table | postgres
pg_rewrite | table | postgres
pg_listener | table | postgres
pg_description | table | postgres
pg_shadow | table | postgres
(25 rows)
--select normal_relation
SELECT c.relname as Name, 'table'::text as Type, u.usename as Owner
FROM pg_class c, pg_user u
WHERE c.relowner = u.usesysid AND c.relkind = 'r'
AND not exists (select 1 from pg_views where viewname = c.relname)
AND c.relname !~ '^pg_';
name | type | owner
------------+-------+-------
regist_tab | table | webdb
(1 row)
-- * Get general table info
SELECT relhasindex, relkind, relchecks, reltriggers, relhasrules
FROM pg_class WHERE relname='regist_tab';
relhasindex | relkind | relchecks | reltriggers | relhasrules
-------------+---------+-----------+-------------+-------------
f | r | 0 | 0 | f
(1 row)
-- * Get column info
SELECT a.attname, t.typname,a.atttypmod-4 as Type_Length,t.typalign,
t.typlen ,a.attstorage,a.attnotnull, a.atthasdef, a.attnum
FROM pg_class c, pg_attribute a, pg_type t
WHERE c.relname = 'regist_tab'
AND a.attnum > 0 AND a.attrelid = c.oid AND a.atttypid = t.oid
ORDER BY a.attnum;
attname | typname | type_length |..| atthasdef | attnum
---------+---------+-------------+..+-----------+--------
a | varchar | 2 |..| f | 1
b | varchar | 4 |..| f | 2
c | varchar | 6 |..| f | 3
(3 rows)
--±âŸ ½Ã½ºÅÛ Ä«Å»·Î±× SQL ¹®
select tablename from pg_tables;
select relname,relhaspkey from pg_class;
select datname from pg_database;ö
´ÙÀ½Àº Æ÷½ºÆ®±×·¹½º¸¦ ¼³Ä¡ ÈÄ Æ÷½ºÆ®±×·¹½ºÀÇ ½´ÆÛÀ¯Àú postgres À¯Àú¿¡°Ô ÆÐ½º¿öµå¸¦ ÇÒ´çÇÏ´Â ¿¹ÀÌ¸ç ÆÐ½º¿öµå¸¦ ÇÒ´ç ÈÄ À¯Àú Á¤º¸¸¦ »ìÇÇ´Â ¿¹ÀÌ´Ù. "alter user .."´Â ±âÁ¸ÀÇ »ç¿ëÀÚ Á¤º¸¸¦ ¼öÁ¤ÇÑ´Ù. °¢°¢ÀÇ ¸í·ÉÀº ½´ÆÛÀ¯Àú "postgres"·Î ½ÇÇàÇÏ¿´´Ù.
template1=# alter user postgres with password 'abxy912q';
ALTER USER
template1=# select * from pg_user;
usename | usesysid | usecreatedb |..| usecatupd | passwd | valuntil
----------+----------+-------------+..+-----------+----------+----------
postgres | 501 | t |..| t | ******** |
(1 row)
template1=# select * from pg_shadow;
usename | usesysid | usecreatedb |..| usecatupd | passwd | valuntil
----------+----------+-------------+..+-----------+----------+----------
postgres | 501 | t |..| t | abxy912q |
(1 row)
template1=#