PostgreSQL On Gentoo
ÀÌ ¹®¼´Â Gentoo¿¡¼ PostgreSQLÀ» ¼³Ä¡Çϱâ À§ÇÑ ¹®¼ÀÔ´Ï´Ù. http://www.gentoo.org/doc/en/postgres-howto.xml À» ¿øº»À¸·Î ÇÏ¿© ¹ø¿ªÇÑ °ÍÀÔ´Ï´Ù.
1.1. PostgreSQL ¼Ò°³ ¶´ëºÎºÐÀÇ °³¹ßÀÚ¿Í ´Ù¸¥ µ¥ÀÌÅͺ£À̽º ¼Ö·ç¼Çµé¿¡ ´ëÇÏ¿© ´ëȸ¦ ³ª´©¾î º¸¸é, µÎ °¡Áö Á¾·ùÀÇ µ¥ÀÌÅͺ£À̽º°¡ ÁÖ·Î ´ë´äÀ¸·Î ³ª¿É´Ï´Ù. Çϳª´Â MySQLÀÌ°í ´Ù¸¥ Çϳª´Â ÀÌ ¹®¼¿¡¼ ´Ù·ç°íÀÚ ÇÏ´Â PostgreSQLÀÔ´Ï´Ù. ¼·Î°£ÀÇ Àå´ÜÁ¡¿¡ ´ëÇؼ ¿À·£ ½Ã°£µ¿¾È ³íÀïÀÌ ÀÖ¾î ¿ÔÁö¸¸, PostgreSQLÀÌ MySQLº¸´Ù ÁøÁ¤ÇÑ °ü°èÇü µ¥ÀÌÅͺ£À̽º ±¸Á¶¿¡´Â ´õ È®°íÇÏ´Ù´Â ¸»ÀÌ ÀÖ½À´Ï´Ù. FOREIGN KEY¿Í °°Àº ´ëºÎºÐÀÇ ±âº»ÀûÀΠƯ¡µéÀÌ MySQL 5¿¡¼ Ãß°¡µÇ¾ú½À´Ï´Ù. ±×·¯³ª ¾î¶² »óȲÀÌ µÇµç, ÀÌ ¹®¼´Â ¿©·¯ºÐÀÌ PostgreSQLÀ» »ç¿ëÇÒ µ¥ÀÌÅͺ£À̽º·Î ¼±ÅÃÇß´Ù°í °¡Á¤ÇÕ´Ï´Ù. óÀ½ ÇØ¾ß ÇÒ ÀÏÀº emerge °úÁ¤À» ½ÃÀÛÇÏ´Â °ÍÀÔ´Ï´Ù. ´ÙÀ½ ¼½¼Ç¿¡¼´Â ±âº» ¼³Á¤ »Ó¸¸ ¾Æ´Ï¶ó emerge¸¦ ÅëÇÑ ¼³Ä¡ °úÁ¤À» ¼³¸íÇÒ °ÍÀÔ´Ï´Ù.
1.2. PostgreSQL ¼³Ä¡Çϱ⠶½ÃÀÛÇÏ·Á¸é ¸ÕÀú PostgreSQL ÆÐÅ°Áö¸¦ emerge ÇØ¾ß ÇÕ´Ï´Ù. ÀÌ·¸°Ô ÇÏ·Á¸é ´ÙÀ½°ú °°Àº ÄÚµå·Î ¿É¼ÇÀÌ Á¦´ë·Î ¼³Á¤µÇ¾î ÀÖ´ÂÁö¸¦ ¸ÕÀú È®ÀÎÇØ¾ß ÇÕ´Ï´Ù.
# emerge -pv postgresql These are the packages that I would merge, in order: Calculating dependencies ...done! [ebuild N ] dev-db/postgresql-8.0.4 -doc -kerberos +libg++ +nls +pam +perl -pg-hier -pg-intdatetime +python +readline (-selinux) +ssl -tcltk +xml2 +zlib 0 kB ¿©±â ¼·Î ´Ù¸¥ ºôµå ¿É¼ÇÀÌ ³ªÅ¸³»´Â °ÍÀÇ ¸ñ·ÏÀÌ ÀÖ½À´Ï´Ù.
PostgreSQLÀ» ¿©·¯ºÐÀÇ ÇÊ¿ä¿¡ µû¶ó¼ Ä¿½ºÅ͸¶ÀÌ¡ ÇÏ¿´´Ù¸é °è¼Ó ÁøÇàÇÏ¿© emerge¸¦ ½ÃÀÛÇϽʽÿÀ.
# emerge postgresql (Output shortened) >>> /usr/lib/libecpg.so.5 -> libecpg.so.5.0 >>> /usr/bin/postmaster -> postgres * Make sure the postgres user in /etc/passwd has an account setup with /bin/bash as the shell * * Execute the following command * emerge --config =postgresql-8.0.4 * to setup the initial database environment. * >>> Regenerating /etc/ld.so.cache... >>> dev-db/postgresql-8.0.4 merged. einfo Ãâ·Â¿¡¼ ³ªÅ¸³µµíÀÌ, ¼³Ä¡ ÈÄ¿¡ ÇØ¾ß ÇÒ ÀÛ¾÷µéÀÌ ÀÖ½À´Ï´Ù. ´ÙÀ½ Àå¿¡¼ PostgreSQLÀÇ ½ÇÁ¦ ¼³Á¤¿¡ ´ëÇؼ »ìÆ캼 °ÍÀÔ´Ï´Ù.
2.1. Ãʱ⠵¥ÀÌÅͺ£À̽º ȯ°æ ¼³Á¤Çϱ⠶ÀÌÀüÀÇ emerge Ãâ·Â¿¡¼ ¾Ë·ÁÁØ ´ë·Î, Ãʱ⠵¥ÀÌÅͺ£À̽º ȯ°æÀ» ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù. ±×·¯³ª ÀÌ°ÍÀ» Çϱâ Àü¿¡ ÇÑ °¡Áö °í·ÁÇØ¾ß ÇÒ Á¡ÀÌ ÀÖ½À´Ï´Ù. MySQL °°Àº °Í°ú´Â ´Ù¸£°Ô, PostgreSQLÀÇ "root" Æнº¿öµå´Â ½ÇÁ¦ »ç¿ëÀÚÀÇ Æнº¿öµå¶ó´Â °ÍÀÔ´Ï´Ù. ±×·¯³ª ebuild°¡ »ý¼ºÇÑ »ç¿ëÀÚ´Â Æнº¿öµå°¡ ¼³Á¤µÇ¾î ÀÖÁö ¾Ê½À´Ï´Ù. µû¶ó¼ ½ÃÀÛÇϱâ Àü¿¡ postgres »ç¿ëÀÚÀÇ Æнº¿öµå¸¦ ¼³Á¤ÇØ¾ß ÇÕ´Ï´Ù.
# passwd postgres New UNIX password: Retype new UNIX password: passwd: password updated successfully ÀÌÁ¦ ¼³Á¤ÀÌ µÇ¾ú°í, Ãʱ⠵¥ÀÌÅͺ£À̽º¸¦ »ý¼ºÇÒ ¼ö ÀÖ½À´Ï´Ù.
# emerge --config =postgresql-8.0.4 Configuring pkg... * Creating the data directory ... * Initializing the database ... The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale C. fixing permissions on existing directory /var/lib/postgresql/data ... ok creating directory /var/lib/postgresql/data/global ... ok creating directory /var/lib/postgresql/data/pg_xlog ... ok creating directory /var/lib/postgresql/data/pg_xlog/archive_status ... ok creating directory /var/lib/postgresql/data/pg_clog ... ok creating directory /var/lib/postgresql/data/pg_subtrans ... ok creating directory /var/lib/postgresql/data/base ... ok creating directory /var/lib/postgresql/data/base/1 ... ok creating directory /var/lib/postgresql/data/pg_tblspc ... ok selecting default max_connections ... 100 selecting default shared_buffers ... 1000 creating configuration files ... ok creating template1 database in /var/lib/postgresql/data/base/1 ... ok initializing pg_shadow ... ok enabling unlimited row size for system tables ... ok initializing pg_depend ... ok creating system views ... ok loading pg_description ... ok creating conversions ... ok setting privileges on built-in objects ... ok creating information schema ... ok vacuuming database template1 ... ok copying template1 to template0 ... ok WARNING: enabling "trust" authentication for local connections You can change this by editing pg_hba.conf or using the -A option the next time you run initdb. Success. You can now start the database server using: /usr/bin/postmaster -D /var/lib/postgresql/data or /usr/bin/pg_ctl -D /var/lib/postgresql/data -l logfile start * * You can use /etc/init.d/postgresql script to run PostgreSQL instead of pg_ctl. * ÀÌÁ¦ Ãʱ⠵¥ÀÌÅͺ£À̽º°¡ ¼³Á¤µÇ¾ú½À´Ï´Ù. ´ÙÀ½ ¼½¼Ç¿¡¼´Â ¼³Ä¡¸¦ °ËÁõÇÏ°í µ¥ÀÌÅͺ£À̽º¿¡ Á¢±ÙÇÒ »ç¿ëÀÚ¸¦ ¼³Á¤ÇÏ´Â °ÍÀ» ÇÏ°Ú½À´Ï´Ù.
2.2. PostgreSQL µ¥ÀÌÅͺ£À̽º ¼³Á¤ ¶ÀÌÁ¦ PostgreSQLÀÌ ¼³Á¤µÇ¾ú½À´Ï´Ù. ÀÌÁ¦ ¼³Ä¡¸¦ °ËÁõÇØ º¸´Â °ÍÀÌ ÁÁÀ» °ÍÀÔ´Ï´Ù. ¸ÕÀú, ¼ºñ½º°¡ Á¦´ë·Î ½ÃÀ۵ǴÂÁö È®ÀÎÇØ º¾½Ã´Ù.
# /etc/init.d/postgresql start * Starting PostgreSQL ... [ ok ] ÀÌ°ÍÀÌ Á¦´ë·Î µ¿ÀÛÇÏ´ÂÁö È®ÀÎÀÌ µÇ¸é, ºÎÆÃµÉ ¶§¸¶´Ù ½ÃÀÛÇÒ ¼ö ÀÖµµ·Ï ±âº» runlevel¿¡ Ãß°¡ÇØ ÁÖ´Â °ÍÀÌ ÁÁÀ» °ÍÀÔ´Ï´Ù.
# rc-update add postgresql default * postgresql added to runlevel default ÀÌÁ¦ ¼ºñ½º°¡ ½ÃÀ۵Ǿú°í µ¥ÀÌÅͺ£À̽º¸¦ °Ë»çÇØ º¼ ½Ã°£ÀÔ´Ï´Ù. ½ÃÀÛÇÏ·Á¸é createdb ¸í·ÉÀ» ½á¼ test µ¥ÀÌÅͺ£À̽º¸¦ ¸¸µé¾î º¾½Ã´Ù. -U ¿É¼ÇÀ» ³Ñ°Ü¼ »ç¿ëÀÚ À̸§(³Ñ±âÁö ¾ÊÀ¸¸é ±âº»°ªÀ¸·Î ÇöÀç »ç¿ëÀÚ À̸§ÀÌ µË´Ï´Ù)¸¦ Á¤ÇÏ°í, -W ¿É¼ÇÀ¸·Î ÀÌÀü¿¡ ¸¸µé¾ú´ø ¾ÏÈ£¸¦ ¿äûÇÕ´Ï´Ù. °á±¹ ¸¸µé°íÀÚ ÇÏ´Â µ¥ÀÌÅͺ£À̽º¿¡ À̸§À» Á¤ÇØ ÁÖ¾ú½À´Ï´Ù.
$ createdb -U postgres -W test Password: CREATE DATABASE µ¥ÀÌÅͺ£À̽º°¡ ¼º°øÀûÀ¸·Î ¸¸µé¾îÁ³À¸¸ç, µ¥ÀÌÅͺ£À̽º°¡ ±âº»ÀûÀÎ ÀÛ¾÷À» ¼öÇàÇÒ ¼ö ÀÖ´ÂÁö È®ÀÎÇØ º¼ ¼ö ÀÖ½À´Ï´Ù. °è¼ÓÇؼ dropdb ¸í·ÉÀ¸·Î µ¥ÀÌÅͺ£À̽º¸¦ ¶³¾î¶ß¸®°í(Áö¿ö¹ö¸®°í) ´ÙÀ½¿¡ ´Ù½Ã ¾µ µ¥ÀÌÅͺ£À̽º¸¦ »ý¼ºÇÒ °ÍÀÔ´Ï´Ù.
$ dropdb -U postgres -W test Password: DROP DATABASE ÀÌÁ¦, postgres »ç¿ëÀÚ¸¸ ¸í·ÉÀ» ¼öÇàÇÒ ¼ö ÀÖ½À´Ï´Ù. ºÐ¸íÈ÷ ´ÙÁß »ç¿ë ȯ°æÀº ¼³Á¤ÀÇ ÀÏÁ¾Àº ¾Æ´Õ´Ï´Ù. ´ÙÀ½ ¼½¼Ç¿¡¼ »ç¿ëÀÚ °èÁ¤¿¡ ´ëÇÑ °ÍÀ» »ìÆ캼 °ÍÀÔ´Ï´Ù.
2.3. µ¥ÀÌÅͺ£À̽º »ç¿ëÀÚ °èÁ¤ ¼³Á¤Çϱ⠶ÀÌ¹Ì ¾ð±ÞÇßµíÀÌ, postgres »ç¿ëÀÚ·Î ·Î±×ÀÎ ÇØ¾ß ÇÑ´Ù´Â °ÍÀº ´ÙÁß »ç¿ëÀÚ È¯°æ¿¡¼´Â ÀûÇÕÇÏÁö ¾Ê½À´Ï´Ù. ´ëºÎºÐÀÇ °æ¿ì¿¡ ´Ù¾çÇÑ »ç¿ëÀÚ¿Í ¼ºñ½º°¡ ¼¹ö¿¡ Á¢±ÙÇÒ °ÍÀÌ°í °¢°¢Àº ¼·Î ´Ù¸¥ Æ۹̼ÇÀÌ ÇÊ¿äÇÒ °ÍÀÔ´Ï´Ù. µû¶ó¼ ÀÌ°ÍÀ» ´Ù·ç·Á¸é createuser ¸í·ÉÀ» »ç¿ëÇÕ´Ï´Ù. ÀÌ ¸í·ÉÀº ¸î¸î SQL ÁúÀǹ®À» ¼öÇàÇÏ´Â ´ë½Å¿¡ ¾µ ¼ö ÀÖ°í, adminÀÇ °üÁ¡¿¡¼ ÈξÀ ´õ À¯¿¬ÇÕ´Ï´Ù. °è¼ÓÇؼ µÎ ¸íÀÇ »ç¿ëÀÚ, Áï ´Ù¸¥ »ç¿ëÀÚ¿Í °ü¸®ÀÚ¸¦ Ãß°¡ÇÒ ¼ö ÀÖ´Â 'superuser'¿Í ÀÏ¹Ý »ç¿ëÀÚ¸¦ »ý¼ºÇÒ °ÍÀÔ´Ï´Ù.
(replace chris with the username you'd like to use) $ createuser -a -d -P -E -U postgres -W chris Enter password for new user: Enter it again: Password: CREATE USER ÀÌÁ¦ superuser¸¦ »ý¼ºÇÏ¿´½À´Ï´Ù. ¸í·ÉÁÙ ¿É¼Ç -a´Â ´Ù¸¥ »ç¿ëÀÚ¸¦ Ãß°¡ÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ¶ó´Â °ÍÀ» ³ªÅ¸³À´Ï´Ù. -d´Â µ¥ÀÌÅͺ£À̽º¸¦ ¸¸µé ¼ö ÀÖ´Â »ç¿ëÀÚ¶ó´Â °ÍÀ» ÀǹÌÇÕ´Ï´Ù. -P´Â ÀÌ »ç¿ëÀÚÀÇ ¾ÏÈ£¸¦ ÀÔ·ÂÇÒ ¼ö ÀÖ°Ô ÇØ ÁÖ°í, -E´Â º¸¾È ¸ñÀûÀ» À§ÇÏ¿© ±×°ÍÀ» ¾ÏÈ£ÈÇÕ´Ï´Ù. ÀÌÁ¦ ÀÏ¹Ý »ç¿ëÀÚ¸¦ ¼³Á¤ÇÏ¸é¼ ÀÌ »õ·Î¿î »ç¿ëÀÚÀÇ Æ۹̼ÇÀ» °Ë»çÇØ º¾½Ã´Ù.
(replace chris with the username you've just created) $ createuser -A -D -P -E -U chris -W testuser Enter password for new user: Enter it again: Password: CREATE USER ¼º°øÇß½À´Ï´Ù! »õ »ç¿ëÀÚ¸¦ ÀÌÀü¿¡ ¸¸µé¾ú´ø superuser¸¦ ÅëÇÏ¿© ¸¸µé¾ú½À´Ï´Ù. -A¿Í -D ¿É¼ÇÀº -a¿Í -dÀÇ ¹Ý´ë·Î½á, ´Ù¸¥ »ç¿ëÀÚ¿Í µ¥ÀÌÅͺ£À̽ºÀÇ »ç¿ëÀ» °ÅºÎÇÕ´Ï´Ù. ÀÌÁ¦ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ°¡ ¸¸µé¾îÁ³°í »õ·Î¿î µ¥ÀÌÅͺ£À̽º°¡ ¸¸µé¾îÁ³À¸¹Ç·Î ´ÙÀ½ Àå¿¡¼´Â »õ µ¥ÀÌÅͺ£À̽º¸¦ ¸¸µå´Â °ÍÀ» »ìÆ캸°Ú½À´Ï´Ù.
3.1. ÆÛ¹Ì¼Ç ¼³Á¤Çϱ⠶»õ µ¥ÀÌÅͺ£À̽º¿¡ µ¥ÀÌÅͺ£À̽º¸¦ »õ·Î ¸¸µé°í ´Ù¸¥ »ç¿ëÀÚ¸¦ Ãß°¡ÇÒ ¼ö ÀÖ´Â »ç¿ëÀÚ°¡ ÀÖ°í ¹«¾ùÀ̵ç ÇÒ ¼ö ÀÖ´Â ¸ÞÀÎ postgres »ç¿ëÀÚ°¡ ÀÖ½À´Ï´Ù. ÀÌÀü¿¡ ¸¸µé¾ú´ø »ç¿ëÀÚ´Â ÇöÀç ¼¹ö¿¡ ·Î±×ÀÎÇÒ ¼ö ÀÖ°í, ±×°Í¿¡ ´ëÇÑ °ÍÀÔ´Ï´Ù. ÀϹÝÀûÀ¸·Î »ç¿ëÀÚ´Â µ¥ÀÌÅ͸¦ »ðÀÔÇÏ°í ²¨³¾ ¼ö ÀÖ¾îÇá Çϸç, ¶§·Î´Â ´Ù¸¥ ¿©·¯ ÀÛ¾÷À» ÇÒ ¼ö ÀÖ¾î¾ß ÇÕ´Ï´Ù. µû¶ó¼ ÀÌ »õ »ç¿ëÀÚ°¡ ¾î¶² °ÍÀ̵ç ÇÒ ¼ö ÀÖ¾î¾ß ÇÏ°í, ÀûÇÕÇÑ Æ۹̼ÇÀ» ¼³Á¤ÇÏ¿©¾ß ÇÕ´Ï´Ù. ÀÌ°ÍÀº -O ¸Å°³º¯¼ö¸¦ createdb¿¡ ³Ñ°ÜÁÖ´Â °ÍÀ¸·Î ½±°Ô ÇÒ ¼ö ÀÖ½À´Ï´Ù. superuser·Î MyDB¶ó´Â »õ µ¥ÀÌÅͺ£À̽º¸¦ ¸¸µé°í ±×°ÍÀ» ÀÌÀüÀÇ testuserÀÇ ¼ÒÀ¯·Î ¸¸µå´Â °ÍºÎÅÍ ½ÃÀÛÇÒ °ÍÀÔ´Ï´Ù.
$ createdb -O testuser -U chris -W MyDB Password: CREATE DATABASE µÇ¾ú½À´Ï´Ù. ÀÌÁ¦´Â »õ MyDB µ¥ÀÌÅͺ£À̽º¸¦ ¸¸µé¾ú°í, testuser°¡ ±×°Í¿¡ Á¢±ÙÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀ» °Ë»çÇϱâ À§ÇÏ¿© testuser·Î ÀÌ »õ MyDB µ¥ÀÌÅͺ£À̽º¿¡ ·Î±×ÀÎÇÏ¿© º¼ °ÍÀÔ´Ï´Ù. psql ÇÁ·Î±×·¥À¸·Î ÀÌ°ÍÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ÇÁ·Î±×·¥Àº ¸í·ÉÁÙ¿¡¼ PostgreSQL µ¥ÀÌÅͺ£À̽º·Î ¿¬°áÇϴµ¥ »ç¿ëÇÏ´Â ÇÁ·Î±×·¥ÀÔ´Ï´Ù. µû¶ó¼ »õ µ¥ÀÌÅͺ£À̽º¿¡ ÀÌ·¸°Ô ¿¬°áÇÕ´Ï´Ù.
$ psql -U testuser -W MyDB Password: Welcome to psql 8.0.4, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help with psql commands \g or terminate with semicolon to execute query \q to quit MyDB=> ÀÌÁ¦ testuser·Î µ¥ÀÌÅͺ£À̽º¿¡ ·Î±×ÀÎÇÏ¿´À¸¸ç, ¸î °¡Áö ¸í·ÉÀ» ½ÃÀÛÇÒ ¼ö ÀÖ½À´Ï´Ù. PostgreSQLÀ» ÀÌ¿ëÇÏ´Â ´À³¦À» ¹ÞÀ¸·Á¸é ´ÙÀ½ ¼½¼Ç¿¡¼ psql Ŭ¶óÀ̾ðÆ®¸¦ µ¹¾Æ´Ù´Ï´Â ±âº» ¸í·É¿¡ ´ëÇÏ¿© »ìÆ캸½Ê½Ã¿À.
3.2. ±âº» PostgreSQL ¸í·É°ú Å×À̺í ÀÛ¼ºÇϱ⠶MySQLÀ» »ç¿ëÇØ º» ÀûÀÌ ÀÖÀ¸½Å ºÐµéÀ» À§ÇÏ¿© ²À Àоî¾ß ÇÒ °ÍÀÌ ÀÖ½À´Ï´Ù. ¿©±â¼ PostgreSQLÀÌ ¸í·ÉÀ» ¼öÇàÇÏ´Â °Í°ú °ü·ÃÇÏ¿© µ¶Æ¯ÇÑ ¹«¾ð°¡¸¦ ¾Ë ¼ö ÀÖÀ» °ÍÀÔ´Ï´Ù. ½ÃÀÛÇÏ·Á¸é ¿©±â¿¡¼ ³íÀÇÇÏ°íÀÚ ÇÏ´Â ¸í·ÉÀÇ ¸ñ·ÏÀ» º¸½Ê½Ã¿À.
\connect¸¦ Á¦¿ÜÇÏ°í ¸ðµç ¸í·ÉÀº ÀÌ ¼½¼ÇÀÇ µÚ¿¡¼ º¸¿©ÁÙ °ÍÀÔ´Ï´Ù. µû¶ó¼ Áö±ÝÀº µ¥ÀÌÅͺ£À̽º°¡ ºñ¾î ÀÖ½À´Ï´Ù. ±× ¸»Àº µ¥ÀÌÅ͸¦ »ðÀÔÇÒ ÇÊ¿ä°¡ ÀÖ´Ù´Â °ÍÀÔ´Ï´Ù. ±×·¯³ª µ¥ÀÌÅ͸¦ »ðÀÔÇϴ ù °ÉÀ½Àº Å×ÀÌºí¿¡ ³Ö´Â °ÍÀÔ´Ï´Ù. Áö±Ý ÇöÀç·Î¼´Â Å×À̺íÀÌ µ¥ÀÌÅͺ£À̽º¿¡ ¾øÀ¸¹Ç·Î, ÀÌ°ÍÀ» ¸ÕÀú ¸¸µé¾î¾ß ÇÕ´Ï´Ù. CREATE TABLE ¸í·ÉÀ¸·Î ÀÌ°ÍÀ» ÇÒ ¼ö ÀÖ½À´Ï´Ù. Ç׸ñÀÇ Å×À̺íÀ» ¸¸µé °ÍÀÔ´Ï´Ù. »óÇ° ID¿Í ¼³¸í, °¡°ÝÀÌ µé¾î°£ Å×À̺íÀ» ¸¸µé °ÍÀÔ´Ï´Ù.
MyDB=> CREATE TABLE products ( MyDB(> product_id SERIAL, MyDB(> description TEXT, MyDB(> price DECIMAL MyDB(> ); NOTICE: CREATE TABLE will create implicit sequence "products_product_id_seq" for serial column "products.product_id" CREATE TABLE NOTICE´Â ¹«½ÃÇÏ¿©µµ µÇ°í ¿ÏÀüÈ÷ ¹«ÇØÇÕ´Ï´Ù. ÇÔ¼öÀÇ ¸¶Áö¸· ÁÙÀÎ CREATE TABLEÀ» º¸¸é ¸í·ÉÀÌ ¼º°øÀûÀ¸·Î ÀÌ·ç¾îÁ³´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª °è¼ÓÇؼ Å×À̺íÀÌ Á¤¸» ¼º°øÀûÀ¸·Î ¸¸µé¾îÁ³´ÂÁö \d ¸í·ÉÀ» ÅëÇÏ¿© ¾Ë¾Æº¾½Ã´Ù.
MyDB=> \d products Table "public.products" Column | Type | Modifiers -------------+---------+------------------------------------------------------------------ product_id | integer | not null default nextval('public.products_product_id_seq'::text) description | text | price | numeric | Á¤¸»·Î Å×À̺íÀÌ ¸¸µé¾îÁ³½À´Ï´Ù. ÀÌÁ¦ Å×À̺íÀÌ ¸¸µé¾îÁ³À¸´Ï µ¥ÀÌÅ͸¦ Áý¾î³Ö¾î¾ß ÇÕ´Ï´Ù. ´ÙÀ½ ¼½¼Ç¿¡¼ µ¥ÀÌÅͺ£À̽º¿¡ µ¥ÀÌÅ͸¦ Áý¾î³Ö´Â °ÍÀ» »ìÆ캼 °ÍÀÔ´Ï´Ù.
3.3. µ¥ÀÌÅ͸¦ µ¥ÀÌÅͺ£À̽º¿¡ »ðÀÔÇϱ⠶ÀÌ ¼½¼ÇÀº »õ·Î ¸¸µé¾îÁø Å×ÀÌºí¿¡ µ¥ÀÌÅ͸¦ Áý¾î³Ö´Â µÎ °¡Áö ¹æ¹ýÀ» »ìÆ캼 °ÍÀÔ´Ï´Ù. ù ¹ø°·Î °¡Àå ±âº»ÀûÀÎ ¸í·ÉÀÎ INSERT¸¦ ¾Ë¾Æº¾½Ã´Ù.
INSERT INTO [tablename] (column1,column2,column3) VALUES(value1,value2,value3) Å×À̺í À̸§Àº µ¥ÀÌÅ͸¦ Áý¾î³ÖÀ» Å×À̺íÀÇ À̸§À» Æ÷ÇÔÇÕ´Ï´Ù. (column1,column2,column3)Àº ƯÁ¤ Ä÷³¿¡ °ªÀ» ³ÖÀ» ¼ö ÀÖ°Ô ÇØ ÁÝ´Ï´Ù. VALUES(value,value2,value3)Àº °ªÀÇ ³ª¿ÀÔ´Ï´Ù. ÀÌ °ªµéÀº Ä÷³°ú °°Àº ¼ø¼(column1ÀÌ value1À» °®°í, column2°¡ value2¸¦ °®°í, column3ÀÌ value3¸¦ °®´Â´Ù)°¡ µË´Ï´Ù. À̵éÀÇ ¼ö´Â ¼·Î °°¾Æ¾ß ÇÕ´Ï´Ù. °è¼ÓÇؼ Ç׸ñÀ» Å×ÀÌºí¿¡ ³Ö¾î º¾½Ã´Ù.
MyDB=> INSERT INTO products (description,price) VALUES('A test product', 12.00); INSERT 17273 1 ¸¶Áö¸· ÁÙÀº ¾à°£ ¼³¸íÀÌ ÇÊ¿äÇÕ´Ï´Ù. insert ¸í·ÉÀÇ ¹Ýȯ°ªÀº OID (°´Ã¼ ½Äº°ÀÚ)¿Í »ðÀÔµÈ ÁÙÀÇ ¼öÀÔ´Ï´Ù. OID´Â ÀÌ °¡À̵åÀÇ ¹üÀ§¸¦ Á¶±Ý ³Ñ¾î¼± °ÍÀÌ°í PostgreSQL ¸Å´º¾ó¿¡ ÁÁÀº Á¤º¸°¡ ÀÖÀ» °ÍÀÔ´Ï´Ù. ÀÌÁ¦ 20,000 »óÇ°À» °¡Áö°í ÀÖ´Â »óȲ¿¡¼ ÀÌ insert ¹®Àº Á¶±Ý ¹ø°Å·Î¿ï ¼ö ÀÖ½À´Ï´Ù. ±×·¯³ª ¸ðµç °ÍÀ» ÀÒ´Â °ÍÀº ¾Æ´Õ´Ï´Ù. COPY ¸í·ÉÀÌ ÆÄÀÏÀ̳ª stdin¿¡¼ Å×À̺íÀ» »ðÀÔÇÒ ¼ö ÀÖ½À´Ï´Ù. ÀÌ ¿¹Á¦¿¡¼´Â csv(Äĸ¶·Î ±¸ºÐµÈ °ª) ÆÄÀÏÀÌ ÀÖ´Ù°í ÇÏ°í, ÀÌ°Í¿¡ »óÇ° id, ¼³¸í, °¡°ÝÀÌ ÀÖ´Ù°í ÇսôÙ. ÆÄÀÏÀº ´ÙÀ½°ú °°À» °ÍÀÔ´Ï´Ù.
2,meat,6.79 3,soup,0.69 4,soda,1.79 ÀÌÁ¦ COPY ¸í·ÉÀ¸·Î µ¥ÀÌÅ͸¦ Áý¾î³Ö¾î º¾½Ã´Ù.
MyDB=> COPY products FROM STDIN WITH DELIMITER AS ','; Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself. >> 2,meat,6.79 >> 3,soup,0.69 >> 4,soda,1.79 >> \. ºÒÇàÈ÷µµ, ÀÌ ÁÙÀÌ INSERT INTO ¸í·É¾î¿Í °°Àº »óÅ Á¤º¸¸¦ º¸¿©ÁÖÁö´Â ¾Ê½À´Ï´Ù. µ¥ÀÌÅÍ°¡ µé¾î°¬´ÂÁö ¾î¶»°Ô ¾Ë ¼ö ÀÖÀ»±î¿ä? ´ÙÀ½ ¼½¼Ç¿¡¼ µ¥ÀÌÅ͸¦ È®ÀÎÇϱâ À§ÇÏ¿© ½ÇÇàÇÏ´Â ÁúÀǹ®À» »ìÆ캼 °ÍÀ̺ó´Ù.
3.4. PostgreSQL ÁúÀÇ »ç¿ëÇϱ⠶À̹ø ¼½¼Ç¿¡¼´Â Å×ÀÌºí ³»¿¡ ÀÖ´Â Á¤º¸¸¦ º¸´Â SELECT¹®¿¡ ´ëÇÏ¿© ¼³Æì º¼ °ÍÀÔ´Ï´Ù. ±âº»ÀûÀÎ SELECT Çü½ÄÀº ´ÙÀ½°ú °°½À´Ï´Ù.
SELECT (column1,column2|*) FROM (table) [WHERE (conditionals)] Ä÷³À» ¼±ÅÃÇÏ´Â ¹æ¹ýÀº µÎ °¡Áö°¡ ÀÖ½À´Ï´Ù. ù ¹ø° °ÍÀº *·Î ¸ðµç Ä÷³À» ¼±ÅÃÇÏ´Â ¹æ¹ýÀÌ°í µÎ ¹ø°´Â º¸°íÀÚ Çϴ ƯÁ¤ Ä÷³ÀÇ ¸ñ·ÏÀ» ¸í½ÃÇÏ´Â °ÍÀÔ´Ï´Ù. µÎ ¹ø°´Â Å« ¸ñ·ÏÀ» º¸±âº¸´Ù´Â ƯÁ¤ Ä÷³¸¸ º¸·Á°í ÇÏ´Â °æ¿ì¿¡ ²Ï³ª Æí¸®ÇÕ´Ï´Ù. SELECT¿¡ *·Î ¸ðµç Ä÷³À» ¸í½ÃÇÏ´Â °ÍºÎÅÍ ½ÃÀÛÇØ º¾½Ã´Ù.
MyDB=> SELECT * FROM products; product_id | description | price ------------+----------------+------- 1 | A test product | 12.00 2 | meat | 6.79 3 | soup | 0.69 4 | soda | 1.79 (4 rows) ¿©±â¼ ³ªÅ¸³ ´ë·Î, ¸ðµç µ¥ÀÌÅÍ°¡ Á¤¸»·Î Å×ÀÌºí¿¡ µé¾î°¬½À´Ï´Ù. ÀÌÁ¦ ¼³¸í°ú °¡°Ý¸¸ º¸°íÀÚ ÇÑ´Ù°í ÇÏ°í, »óÇ° id´Â º¸°í ½ÍÁö ¾Ê´Ù°í ÇսôÙ. ÀÌÁ¦ Ä÷³À» ¸í½ÃÇÑ SELECT ÇüŸ¦ »ç¿ëÇÒ °ÍÀÔ´Ï´Ù.
MyDB=> SELECT description,price FROM products; description | price ----------------+------- A test product | 12.00 meat | 6.79 soup | 0.69 soda | 1.79 (4 rows) ÀÌÁ¦ »óÇ°°ú °¡°Ý¸¸ º¸À̱⠶§¹®¿¡ Áß¿äÇÑ ÀÚ·á¿¡ ÁýÁßÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. ÀÌÁ¦ $2.00ÀÌ ³Ñ´Â Ç׸ñ¸¸À» º¸°íÀÚ ÇÑ´Ù°í ÇսôÙ. ¿©±â WHERE ÀýÀ» °£ÆíÇÏ°Ô ¾µ ¼ö ÀÖ½À´Ï´Ù.
MyDB=> SELECT description,price FROM products WHERE price > 2.00; description | price ----------------+------- A test product | 12.00 meat | 6.79 (2 rows) ÀÌÁ¦ $2.00ÀÌ ³Ñ´Â »óÇ°ÀÌ È¸é¿¡ ³ªÅ¸³ª¼ ´õ¿í ÁýÁßÇÒ ¼ö ÀÖ°Ô µÇ¾ú½À´Ï´Ù. Á¤º¸ ÁúÀÇÀÇ ÀÌ·± ÇüÅ´ ¾ÆÁÖ °·ÂÇÏ°í ±Øµµ·Î À¯¿ëÇÑ º¸°í¸¦ ¸¸µé ¼ö ÀÖ½À´Ï´Ù.
3.5. ¸ÎÀ½¸» ¶PostgreSQLÀÇ °¡À̵尡 ¿©±â¼ ³¡ÀÌ ³³´Ï´Ù. ÀúÀÇ Áú¹®¿¡ ´ë´äÀ» ÇØ ÁÖ½Ã¾î µµ¿ÍÁֽŠÁ¨Åõ PostgreSQL À¯Áö¸¦ ¸Ã°í ÀÖ´Â ¸¶»çµµ¸ð ³ª°¡³ë¾¾¿¡°Ô Å©°Ô °¨»çÇÕ´Ï´Ù. ÀÌ °¡À̵忡 ¾î¶² Á¦¾ÈÀÌ¶óµµ ÀÖÀ¸½Ã¸é chriswhite@gentoo.org ¿¡ º¸³» ÁֽʽÿÀ. ´õ È®ÀåÀûÀÎ ¹®¼¸¦ ¿øÇϽøé PostgreSQL À¥»çÀÌÆ®¸¦ º¸½Ê½Ã¿À.
|
A good memory does not equal pale ink. |