D/L PostgreSQL and MySQL
กระทู้เก่าบอร์ด อ.สุภาพ ไชยา

 6,342   9
URL.หัวข้อ / URL
D/L PostgreSQL and MySQL

ผมอยากจะศึกษา Opensource บ้าง เพราะคงต้องมีการบังคับใช้ในส่วนราชการแน่ๆ แต่พอเข้าไปใน web ที่อาจารย์แนะนำผมไม่รู้จะD/L PostgreSQL and MySQL ตัวไหนดี ช่วยแนะนำด้วยครับ

9 Reply in this Topic. Dispaly 1 pages and you are on page number 1

1 @R04010
ถ้าใช้ Linux ทั้ง Red Hat (9.0) และ TLE 5 จะใส่ PostgreSQL และ MySQL มาพร้อมแล้ว
เพียงแต่เลือกให้มีการติดตั้งทั้ง 2 ตัวด้วย

ไม่ทราบว่าได้ลง Linux ตัวไหนแล้วหรือยังครับ

หรือจะนำมาใช้กับ Windows ครับ

PostgreSQL ยังไม่มีเวอร์ชันสำหรับ Windows แบบเต็มตัวครับ
ตามแผนของการพัฒนาของเขา จะมีเวอร์ชันสำหรับ Windows โดยตรงในรุ่นต่อไปนี้ครับ กะจะออกมากลางปีนี้ คงอีกไม่นานคงได้เห็นครับ

แต่มีกลุ่มหนึ่งที่ลองทำให้เล่น PostgreSQL บน Windows ได้ครับ
ลองดูที่ http://techdocs.postgresql.org/guides/InstallingOnWindows โดยให้ d/l โปรแกรมตามลิงค์ที่เขาให้มา แล้วทำการติดตั้งตามคำแนะเขาทั้งหมด

การทดลองใช้
1. ให้เข้าไปที่ command prompt
2. สร้างตารางขึ้นมาใหม่โดยพิมพ์คำว่า createdb ชื่อฐานข้อมูล
จากตัวอย่างข้างล่าง ผมสร้างฐานข้อมูลชื่อ mydb จะได้

F:\>createdb mydb
CREATE DATABASE

F:\>psql mydb
Welcome to psql, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit

mydb=#

3. ลองคำสั่งของ psql ต่างๆ ดังนี้

mydb=# select version();
version
----------------------------------------------------------------
PostgreSQL 7.2.1 on i686-pc-winnt-msdev, compiled by msdev 6.0
(1 row)

เพื่อหาว่า PostgreSQL เวอร์ชันไหน

แล้วลอง

mydb=# select now();

จะได้เวลาของเครื่องฯ ขณะนั้นออกมาก

4. ลองสร้างตารางด้วยคำสั่งดังนี้

mydb=# CREATE TABLE cities (
mydb(# name varchar(80),
mydb(# location point
mydb(# );

ถ้าเป็นข้อความ CREATE ออกมา แสดงว่าได้มีการสร้างตาราง cities ให้แล้ว

5. ลองใส่ข้อมูลลงไป ดังนี้

mydb=# INSERT INTO cities values('San Francisco','(-194.0,53.0)');
INSERT 16982 1

การลองเรียกใช้คำสั่ง Select ดู
mydb=# select * from cities;
name | location
---------------+-----------
San Francisco | (-194,53)
(1 row)

ลองดูครับ รายละเอียดอื่นๆ ผมจะนำมาเล่าให้ฟังเรื่อยๆ ก็แล้วกัน

คำสั่ง syntax ใน psql ใน Linux จะใช้เหมือนกันเลยครับ

2 @R04011
ลองมาใช้ PHP ในการ Connect กับตารางชื่อ Citites ที่ได้สร้างไว้แล้ว
PHP จะสนับสนุนการติดต่อกับ MySQL และ PostgreSQL ได้เลย โดยไม่ต้องติดตั้ง ODBC เพิ่มเติมเลย ลองทำดังนี้นะครับ

1. สร้างไฟล์ php ตามโค้ดข้างล่าง
ให้ใช้ user เป็นชื่อเดียวกับชื่อ user คนที่ Log In เข้า Windows นะครับ ของผมคือ Administrator ไม่ใช่ postgres และต้องระวังการพิมพ์ชื่อ user ด้วยนะครับ เพราะมัน Case Sensitive

// database access parameters
// alter this as per your configuration
$host = "localhost";
$user = "Administrator"; // ตรง user ตรงนี้ ให้ใช้ชื่อคนที่ Log In เข้า Windows นะครับ ไม่ใช่ postgres อย่างใน Linux ครับ
$pass = "";
$db = "mydb";

// open a connection to the database server
$connection = pg_connect ("host=$host dbname=$db user=$user
password=$pass");

if (!$connection)
{
die("Could not open connection to database server");
}

// generate and execute a query
$query = "SELECT * FROM cities";
$result = pg_query($connection, $query) or die("Error in query: $query.
" . pg_last_error($connection));

// get the number of rows in the resultset
$rows = pg_num_rows($result);

echo "There are currently $rows records in the database.";

// close database connection
pg_close($connection);

?>

2. แก้ไขไฟล์ postgresql.conf ใน F:\pgsql\data (ผมติดตั้ง PostgreSQL ใน F:) ใช้ Notepad เปิด แล้วไปที่บันทัด

#port = 5432

โดยให้เอา # ออก แล้วบันทึกการแก้ไข

จากนั้นให้ สั่ง pg_ctl stop แล้วให้สั่งให้ start ใหม่ด้วยคำสั่ง pg_ctl start
เพื่อให้การเปลี่ยนแปลงข้างต้นได้ทำงานถูกต้อง

ถ้าเปิดไฟล์ php ที่สร้างขึ้นข้างต้น แล้วเจอ Error อย่างนี้

Warning: pg_connect(): Unable to connect to PostgreSQL server: could not
connect to server: No connection could be made because the target machine
actively refused it. (0x0000274D) Is the server running on host localhost and
accepting TCP/IP connections on port 5432? . in I:\php program\E-Comm\Chapter\test\postgres.php on line 15
Could not open connection to database server
แสดงว่ายังไม่มีการ Start ให้ทำการ Start ด้วยคำสั่งข้างต้น

ถ้าเห็นข้อความนี้

There are currently 1 records in the database.

แสดงว่าการ Connect ผ่านครับ


*** Edited by Supap Chaiya *** 16/7/2546 12:37:37
3 @R04014
การใช้ Access เป็น Front End ให้ PostgreSQL

1. ไปเอา ODBC Driver ของ PostgreSQL มาจาก
ftp://ftp15.us.postgresql.org/odbc/versions/msi/

ผมเอา psqlodbc-07_02_0001.zip มา ก็ใช้งานได้ดีครับ ให้ unzip แล้วคลิก 2 ทีที่ไฟล์ PsqlODBC.msi เพื่อติดตั้งได้เลยครับ

2. ไปที่ Start>Settings>Control Panel> Administrative Tools>Data Sources (ODBC)>ในช่อง User DSN ให้คลิกปุ่ม Add แล้วมองหา PostgreSQL แล้วใส่ค่าต่างๆ ตามรูป

3. คลิก OK เพื่อบันทึกการสร้าง ODBC สำหรับติดต่อ PostgreSQL ซึ่งเราจะได้ DSN ชื่อ PostgreSQL

4. เปิด Access ผมใช้ Access 97 ลองดู แล้วสร้างตารางขึ้นมาใหม่ ผมให้ชื่อ PostgreSQL

5. ทำการ Link ตาราง Cities เข้ามาใน Access โดยไปที่เมนู File>Get External Data>Link Tables

6. ตรงช่อง File of type ให้เลือก ODBC Databases>คลิกที่ Machine Data Source tab>เลือก PostgreSQL แล้วคลิก OK

7. จะเห็นมีชื่อตาราง Addresbook และ Cities ให้คลิกเลือกตารางที่ต้องการ แล้วเลือกฟีลด์ที่ต้องการจะแสดงใน Access

8. จากนั้นเราสามารถที่จะแก้ไข หรือ เพิ่มข้อมูล หรือนำไปสร้างเป็น Form หรือ Report ได้

9. ถ้าต้องการที่จะโอนข้อมูลที่มีอยู่แล้วใน Access ไปยัง PostgreSQL ก็ให้คลิกขวาที่ตารางเป้าหมาย แล้วเลือก Export>เลือก ODBC Databases ในช่อง File of type: แล้วเลือก PostgreSQL ในช่อง Machine Data Source tab ข้อมูลก็จะถูกส่งไปยัง PostgreSQL ให้เองครับ

4 @R04015
ลองอ่านวิธีการโอนย้ายข้อมูลจาก Access 97 ไป PostgreSQL ได้ที่
http://www.sevainc.com/Access ครับ
5 @R04017
การหาว่าผู้ใช้คนปัจจุบันชื่ออะไรให้ใช้

mydb=# select current_user;
current_user
--------------
Administrator
(1 row)

หรือจะลองใช้

mydb=# select session_user;
session_user
--------------
Administrator
(1 row)

mydb=# select user;
current_user
--------------
Administrator
(1 row)

ก็ได้


6 @R04018
ข้อสักเกตุในการโอนย้ายข้อมูลจาก Access ไป PostgreSQL

1. ตารางนั้นจะต้องมีฟีลด์ใดฟีลด์หนึ่งเป็น Index ด้วย เมื่อเราทำการ Link ตารางนั้นกลับคืนมายัง Access อีก มันจะให้เราเลือกฟีลด์ที่เป็น Index นั้นด้วย

ไม่เช่นนั้นเราจะไม่สามารถที่จะแก้ไข หรือเพิ่มเติมข้อมูลผ่านทาง Acess ได้

2. ตัวใหญ่ตัวเล็กในชื่อของตารางต่างๆ จะมีผลต่อการใช้ PGSQL ทาง Command prompt ได้ เช่นถ้าโอนตารางชื่อ Answer ไปยัง PostgreSQL
แล้วใช้คำสั่ง Select ดังนี้

mydb=# select * from answer;

จะได้ข้อความแจ้ง Error ดังนี้

ERROR: Relation "answer" does not exist

เราต้องใช้ "" บังคับชื่อของตารางที่ขึ้นต้นด้วยตัวใหญ่ ดังนี้

mydb=# select * from "Answer";

จึงจะได้ผลลัพธ์ออกมา

7 @R04021
ขอบคุณมากครับ ผมมีแผ่น TLE5 อยู่พอดีจะลองติดตั้งดูครับ
8 @R04023
ลืมใส่รูปประกอบครับ
9 @R04050
วันนี้ผมลองโอนข้อมูลออกจาก PostgreSQL ไปใส่ MySQL ดู ก็เลยอยากมาเล่าให้ฟัง เผื่อวันหลังใครจำเป็นต้องทำอย่างผมบ้าง
สมมติว่าผมลงทั้ง 2 โปรแกรมแล้ว ต้องการโอนข้อมูลจากตาราง 2 ตาราง คือ question และ answer จาก PostgreSQL (ผมทำใน Linux นะครับ)

ขั้นตอน

1. เข้า PQSL แล้วไปยังฐานข้อมูลเป้าหมาย ของผมคือฐานข้อมูลชื่อ mydb

[root@supap root]# su postgres
bash-2.05b$ psql mydb
Welcome to psql, the PostgreSQL interactive terminal.

Type: \copyright for distribution terms
\h for help with SQL commands
\? for help on internal slash commands
\g or terminate with semicolon to execute query
\q to quit

2. ดูโครงสร้างของทั้ง 2 ตาราง โดยใช้คำสั่ง \d ชื่อตารางเป้าหมาย
mydb=# \d question
Table "question"
Column | Type | Modifiers
------------+-----------------------------+-----------
qnumber | integer |
qtopic | character varying(254) |
qname | character varying(50) |
qdate | timestamp without time zone |
qnote | text |
nanswer | integer |
viewed | smallint |
dupdate | timestamp without time zone |
files | character varying(254) |
downloaded | integer |

3. คัดลอกโครงสร้างตารางนี้เพื่อนำไปสร้างตารางใหม่ใน MySQL
ผมนำไป Paste ลงในโปรแกรม Test Editor แล้วใช้คำสั่ง Replace เพื่อลบ | ออก แล้วใส่เครื่องหมาย , เพื่อแยกแต่ละฟีลด์

qnumber integer ,
qtopic character varying(254) ,
qname character varying(50) ,
qdate timestamp without time zone ,
qnote text ,
nanswer integer ,
viewed smallint ,
dupdate timestamp without time zone ,
files character varying(254) ,
downloaded integer ,

แล้วตัดเอาคำว่า without time zone ออกก่อน เพราะใน MySQL จะไม่รู้จักคำสั่งนี้

4. เข้าสู่ MySQL ใน Terminal ใหม่ แล้วเข้าไปในฐานข้อมูลชื่อ test
แล้วพิมพ์คำสั่งสำหรับสร้างตาราง question

mysql> create table question (

แล้วทำการ Paste โครงสร้างของตารางลงไป จะได้

mysql> create table question (qnumber integer ,
-> qtopic character varying(254) ,
-> qname character varying(50) ,
-> qdate timestamp,
-> qnote text ,
-> nanswer integer ,
-> viewed smallint ,
-> dupdate timestamp,
-> files character varying(254) ,
-> downloaded integer );

(ไม่ต้องกังวลเรื่องช่องว่างระหว่างชื่อฟีลด์และประเภทของฟีลด์ และเครื่องหมาย , ในการแยกฟีลด์ออกจากกันนะครับ)

5. สร้างตารางที่ 2 เหมือนข้อ 4
mysql> create table answer (qnumber integer ,
-> aname character varying(50) ,
-> adate timestamp ,
-> anote text ,
-> files character varying(254) ,
-> downloaded integer ,
-> ano integer );
Query OK, 0 rows affected (0.00 sec)

6. โอนข้อมูลออกจาก PostgreSQL โดยใช้คำสั่ง copy ชื่อตารางเป้าหมาย to ชื่อไฟล์และห้องที่ต้องการเก็บ

mydb=# copy question to '/tmp/question.txt';
COPY
mydb=# copy answer to '/tmp/answer.txt';
COPY

7. นำไฟล์ *.txt เข้า MySQL โดยใช้คำสั่ง load data local infile ชื่อไฟล์และห้องที่เก็บไฟล์ into table ชื่อตารางที่ต้องการโอนข้อมูลเข้า

mysql> load data local infile "/tmp/question.txt" into table question;
Query OK, 1648 rows affected (0.06 sec)
Records: 1648 Deleted: 0 Skipped: 0 Warnings: 0

mysql> load data local infile "/tmp/answer.txt" into table answer;
Query OK, 3737 rows affected (0.04 sec)
Records: 3737 Deleted: 0 Skipped: 0 Warnings: 0

8. ลองดูว่ามีข้อมูลครบหรือไม่ ดังนี้

mysql> select count(*) from answer;
+----------+
count(*)
+----------+
3737
+----------+
1 row in set (0.00 sec)


@ ประกาศใช้งานเว็บบอร์ดใหม่ => บอร์ดเรียนรู้ Access สำหรับคนไทย
แล้วจะใส่ลิ้งอ้างอิงมาที่โพสต์เก่านี้หรือไม่ก็ตามสะดวกครับ
Time: 0.0463s