한호스트에다른데이터베이스의테이블을 접근..
다른 디비에서는 아래처럼.
한호스트의 다른 데이터 베이스의 테이블을 불러들이는 것이 가능한데,
포스트그레이스큐엘에서는 어떻게 하는지요?
SELECT * FROM [데이터베이스명].[테이블명]
[데이터베이스명]의namespace가존재하지않는다고 에러가 나옵니다.
다른 디비는 mysql 말씀이신가 보죠?
mysql만 되고, 다른 dbms 중에서 저렇게 되는 걸 전 못봤네요. ^^
검색해보시면, dblink 였던가 add-on이 필요하다고 본 거 같습니다.
저도 써본 적은 없엇... ;;;
ms-sql 도 되고
dblink는 원격지의 데이터베이스를
이용하고 싶을 때 사용하는거구요..
저는 저렇게 쓰는 SELECT 문장이
ANSI SQL인줄 알았어요.
처음 postgresql을 쓰면서 좀 당황했던 부분인데 아직까지 변경할 생각이 없는 것 같습니다. 저도 이제는 익숙해져서 특별히 불변한 것 모르겠구요. 아마도 지금까지 사용해오던 DBMS에서 익힌 습관 때문에 격는 일종의 '문화 충격' 아닐까 생각합니다.
DB마다 database마다 특색이 있으니 그것에 맞추는 것이 좋을 것 같습니다. 사실 특별한 이유가 없는한 말씀하신 것 같은 구조로 설계를 해야만 할 이유는 없던 것 같습니다.
오히려 MS SQL을 사용하는 사람들을 보면 별 생각도 없이 database를 이것 저것 만들어서 table들을 흩어 놓는데 별로 좋아보이지 않았습니다.
제가 Java를 처음에 공부하면서 느낀 것이 java로 프로그래밍을 하면 좋은 코드를 짤 수 밖에 없겠구나.. 하는 것이였는데 나중에 다른 사람들이 만든 코드를 보면서 생각이 바귀었습니다. Java를 C 프로그램 짜듯이 짜는 사람들이 한두명이 아니였습니다. java로 C style의 프로그램을 짜려면 엄청 신경쓰이고 힘들텐데 어떻게 그렇게들 짜는지... 그후 몇년 있다가 Think in Java라는 책이 나오더군요. -.-;;;
C 프로그래머가 Java로 옮기면서 단순히 syntax만 익히면 되는 것이 아니라 사고방식을 바꿔야 하는 것 정도는 아니더라도 Postgresql로 넘어오면서 지금까지 당연하다고 생각했던 부분까지도 다시 확인해야 하겠죠.
참고로 Oracle의 경우도 데이터베이스명.테이블명의 구문은 없습니다. 대신 사용자를 지정할 수는 있구요.
한 데이터베이스으로 다른데이터베이스에게 select 할수업습니다.
할수있은것은 SELECT * FROM [namespace].[테이블명]
initdb -->cluster1
-database1
-- namespace1
---table1
---table2
--namespace2
-database2
--namespace1
....... 등등
manual 에 해당하는 것입니다 : http://www.postgresql.org/docs/current/static/ddl-schemas.html
" To create or access objects in a schema, write a qualified name consisting of the schema name and table name separated by a dot:
schema.table
Actually, the even more general syntax
database.schema.table
can be used too, but at present this is just for pro-forma compliance with the SQL standard; if you write a database name it must be the same as the database you are connected to.
"
create view inst as select * from dblink('host=pollux port=5432 dbname=cob_int user=his_int password=#integration#'
http://developer.postgresql.org/cvsweb.cgi/pgsql-server/contrib/dblink/dblink.c?only_with_tag=HEAD