Halaman

Rabu, 30 Juni 2010

Waiting for PostgreSQL 9 stable version

I just read PostgreSQL 9.0 Beta 2 and it's feature on this. Many new feature there, and drive me to use it in future. Things that I am interested in:

Backend section:
1. Column level permissions: allows specification of granular column-level permissions in addition to table level grants
2. GRANT/REVOKE ON ALL TABLES/SEQUENCES/FUNCTIONS: simplifies permission management by allowing mass changes of GRANTS

Functions and triggers section:
1. Column level triggers: adds support for SQL standard column level trigger support, by allowing triggers to only fire if specific columns are mentioned in the UPDATEs SET list
2. WHEN clause for CREATE TRIGGER: adds support for a boolean expression to be checked if a trigger should be fired or not
3. RETURNS TABLE: SQL standard RETURNS TABLE clause for CREATE FUNCTION.

Cryptographic on FreeBSD

I have two Postgresql installed one on Windows (at home) and FreeBSD (at some place out there). I use pgcrypto for encrypting sensitive data. On Windows I have installed the library by executing C:\sistemku\PostgreSQL\9.0\share\contrib\pgcrypto.sql file.

Now it's time for me to send my work to remote server.
I am making a backup secret.db by using pg_dump, then transfer the backup file onto remote server using FTP command. With PuTTY via modem connection, I restored the database. Make some test of web site contents, they looks okay except for crytographic functions. Yeah...the FreeBSD server has no pgcrypto installed.

#find / -name pgcrypto.sql (the file does not exist).


1st attempt: Execute pgcrypto.sql, as you might suspect.., it failed. I have FTPed the file before.
2nd attempt: Type this command using psql:

CREATE OR REPLACE FUNCTION digest(text, text)
RETURNS bytea AS '$libdir/pgcrypto', 'pg_digest'
LANGUAGE C IMMUTABLE STRICT;


Again an error message raised "libdir not found".

3rd attempt: Use port to install pgcrypto with the following steps:
1. Install pgcrypto module
#cd /usr/ports/database/postgresql-contrib
#make config
#make install clean


I could found /usr/local/lib/postgresql/pgcrypto.so and /usr/local/share/postgresql/contrib/pgcrypto.sql.


2. To access library functions, I load stored procedures onto my secret database.
# psql -U binsar -d secredb -f /usr/local/share/postgresql/contrib/pgcrypto.sql


3. Check if cyptographic function loaded.

secretdb=# \df digest
List of functions
Schema Name Type Argument
-------+-------+-------+------------
public digest bytea bytea, text
public digest bytea text, text



4. It works, and get my coffee.

Jumat, 28 Mei 2010

Indikator

Indikator adalah acuan untuk mengetahui kenormalan dalam suatu sistem. Dengan indikator kita dapat mengetahui dimana kita berada, kemana kita bergerak, seberapa jauh pencapaian/kinerja atau seberapa jauh kita dari posisi acuan. Indikator merupakan ukuran, referensi atau indeks yang menjadi detektor dalam mengenali suatu hasil proses, yang pada gilirannya dapat memberikan petunjuk mengenai apa yang harus dibenahi.

Contoh indikator dapat ditemui dalam hasil pemeriksaan darah yang berisi angka penunjuk tentang jumlah trombosit, hematoktrit, dsb. Disertai dengan informasi dari pasien atau jika perlu dengan tambahan indikator lain, para Diagnoser dapat menegakkan diagnosa. Saat berjalan di kawasan pabrik, dan melihat kepulan asap yang hitam pekat, para engineer bisa menduga what happen there, atau saat mengendarai mobil, kita dapat mengetahui apakah kecepatan saat ini sesuai dengan Max. Speed, jika tidak maka prrriiiit...kena tilang.

Perjalanan Menuju Kota Tujuan
Pada tahun 1988, saya naik bis dari Jember ke Jakarta. Berangkat jam 4 sore dan tiba di Pulogadung pukul 10 pagi keesokan harinya. Perlu waktu 22 jam dengan biaya sekitar 100 ribu. Saat naik pesawat, dari Jakarta ke Medan diperlukan waktu sekitar 2 jam. Tarifnya pun tergantung pada airlines yang digunakan, jika diratakan sekitar 1,5 juta. Naik Ferry ke Tomok, Samosir perlu waktu 1 jam, dan dari sini ke kampung saya di Sideak merupakan perjalanan yang indah dengan viewnya Tao Toba na uli.

Dalam "perjalanan" ini sang Sopir mengantar penumpangnya sampai di tempat tujuan.
Apa yang ada dalam benak keluarga jika dalam 25 jam, belum tiba di Jakarta? Berbagai kontak telepon dilakukan untuk mengetahui kabar.

Apa yang ada dalam benak penumpang pesawat, saat melihat jam tangan dan ternyata sudah 2 jam 30 menit dan Anda belum landing? Dari balik mikropon sang Stewardess/Pilot menyampaikan bahwa ban pesawat tidak terbuka dan berupaya menenangkan penumpang. Penumpang tegang panik, serta merta berbagai doa dipanjatkan kepadaNya.

Indikator sederhana untuk sampai di tempat tujuan adalah Keselamatan. Disisi lain faktor Waktu dan Biaya menjadi interest factors saat pembicaraan memasuki area efektifitas dan efisiensi.

Perjalanan Menuju Penyelesaian Studi
Saat belajar ukuran keberhasilan siswa tercermin dalam Rapor atau KHS. IP yang diperoleh merupakan indikator kepuasan atas hasil studi mahasiswa. Mungkin saja seseorang dengan IP rendah -dapat berhasil dalam kehidupannya- jika dibandingkan IP yang diraihnya, namun IP 3 adalah tiket bagi para pencari kerja untuk lolos persyaratan administrasi pada semua jenis lowongan pekerjaan. Bagaimana dengan lama Studi? Ya beberapa organisasi memiliki kriteria seleksi yang lebih ketat.

Dalam "perjalanan" ini, sang Mahasiswa menjadi Manager bagi dirinya sendiri. Dengan resources yang ada padanya Ia mengorganisir dan mengarahkannya untuk mencapai tujuan yang didambakan saat di kelas 3 SMA. Bagaimana jika setelah 5 tahun, sang Mahasiswa belum selesai studi? Para stakeholders akan bertanya-tanya.

Ayah: Mas, kapan lulus?
Mhs: Sebentar lagi Ayah, saya susah ketemu dosen pembimbing Skripsi. Kuliah sekarang susah, banyak yg harus dipelajari. Doakan Ayah supaya saya cepat lulus.
(Ferry: kalo alasan kayak gini...hehehe pembaca pasti dapat membuat interpretasi logis sendiri.)

Ayah: Mas, kapan lulus?
Mhs: Semester kemarin saya ngulang untuk mata kuliah Ekonometrika, ingin buat IP 3, dan semester depan saya ambil Skripsi. Lulusnya 9 bulan lagi setelah skripsi selesai. Doakan Ayah supaya saya cepat lulus.
(Ferry: yaa...cukup logis, rupanya sang Siswa ingin IP 3).

Indikator sederhana untuk lulus S1, yaitu Lama Studi dan IP. Biaya studi mungkin menjadi interest factors dalam studi penelitian kelulusan.

Perjalanan Menuju Kemenangan Pertandingan
Sekitar 2 minggu lalu saya menonton pertandingan Pro Liga Volly antara Samator dan BNI. Pertandingan yang seru dan menarik ditunjukkan oleh kedua tim. Saya turut tegang, mungkin juga para pihak yang secara emosional terikat dalam keluarga besar maupun fans, apalagi Organ Tim yang selama ini bekerja keras untuk masuk final.

Dengan skor sebagai indikatornya, Pelatih dan Manajer Tim mengubah strategi dan taktik bertanding, dan dengan catatan pada recording log pemain, mereka mengganti dan mengistirahatkan pemain, memberi semangat, mengarahkan semua sumber daya untuk mencapai tujuan "to be a winner". BNI akhirnya tak terbendung oleh Samator sang juara bertahan.

Setelah kedua Tim kembali ke markas mereka, apa yang dilakukan? Yes, mengapresiasi perjuangan berat dan tentu Evaluasi untuk perbaikan berikutnya. Indikator keberhasilan adalah Win atau Loss. Bagi para Tim interest factors mungkin berupa Skor, kesalahan/ keberhasilan individu pemain, kekuatan lawan.

Perjalanan Pencapaian Visi
Dalam operasional sektor private maupun sektor publik terdapat indikator pencapaian/kinerja. Dari sisi manajemen Keuangan, Operasional, Pemasaran, SDM, dan Strategi (waah saya baru sadar nih sama dengan jumlahnya Pilihan Konsentrasi/Penjurusan saat kuliah) akan diukur dan kemudian dievaluasi. Caranya pun beragam dengan melibatkan Sejawat Satu Level, oleh atasan Satu Level di atas, oleh bawahan Satu Level di bawah, bahkan dengan Customer maupun Ownernya.

Indikatornya tertuang misalnya dalam KPI, KGI, Strategic Objectives, Standar Pelayanan Minimal. Misalnya dalam bidang kesehatan kita, mengetahui visi tentang "Indonesia Sehat 2010". Disana tertuang detail kriterianya. Dalam bidang ekonomi makro ada studi indikatornya dan bidang perbankan.

Ukuran keberhasilan Sopir adalah No Accident dan penumpang tiba di Terminal tujuan, bagi Pelatih adalah kemenangan, dan bagi Siswa adalah kelulusan. Indikator ini begitu jelas dan mudah diinderai.

Bagaimana dengan ukuran di sektor private dan publik? Beberapa diantaranya Growth, Profit,
Sustainability...silahkan baca Laporan dan Juknisnya.

Inti Indikator adalah measurable dan observable.

Selasa, 18 Mei 2010

Export PostgreSQL table into CSV file

1. Change directory to PostgreSQL binary folder or just type this command if the search path is already listed in your environment paths.

C:\pgsql83\bin>psql -dmydb -Uferry

mydb# COPY customer TO 'C:/myfolder/allcust.csv' DELIMITER ';';
COPY 5076

mydb# COPY (SELECT * FROM customer WHERE city ='PNK') TO E'C:\\myfolder\cityPNK.csv' DELIMITER ';' CSV;
COPY 502

mydb# \q

See: Import from CSV files into PostgreSQL Table

Importing a CSV file into PostgreSQL table

1. Export your data into CSV format. Remember the field delimiter you specify here (I prefer the semicolon) and you must pay attention or change it later if the import process fails. Also uncheck the option for first line as a header so that the CSV file contains only data.

2. If not exists, create a table in PostgreSQL with the data type that can accommodate the data to be imported.

3. Change directory to PostgreSQL binary folder or just type this command if the search path is already listed in your environment paths.

C:\pgsql83\bin>psql -dmydb -Uferry
mydb# COPY dest_table FROM 'C:/myfolder/myfile.csv' USING DELIMITERS ';';
COPY 10537

mydb# COPY another_dest_table FROM 'C:/myfolder/myfile22.csv' USING DELIMITERS ';';
COPY 300024

mydb# \q

See: Export from PostgreSQL to CSV files

Sabtu, 15 Mei 2010

My list show only one record after doing edit-close form repeatedly

I was coding a form with a datagridview for single table. All Insert, Update, and Delete operations work well and satisfy me. But I saw a strange behaviour, when I did these:

1. Open the form, Edit some data, then click Save button..(data updated successfully!)
2. Close the form.
3. Do step 1-2 repeatedly.

After n times opening-editing-closing the form, the datagridview only show one record???
My list show only one record after doing edit-close form repeatedly.

public partial class frmCoa : mybasefrm.frmMainGrdView
{
private MySqlDataAdapter gda;
private DataTable gdt;
private DBOPS.SqlHelper;

private void frmCoa_Load(object sender, EventArgs e)
{
gHelper = new DBOPS.SqlHelper();
gda = gHelper.getDataAdapter("SELECT * FROM akun");
MySqlCommandBuilder gcmdBldr = new MySqlCommandBuilder(gda);
gdt = new DataTable();
gda.Fill(gdt);
bindSrc0.DataSource = gdt;
bindNav0.BindingSource = bindSrc0;
dgv.DataSource = bindSrc0;
...do binding
}

private void btnSave_Click(object sender, EventArgs e)
{
try
{
Validate();
bindSrc0.EndEdit();
gda.Update(gdt);
startingEdit(false);
base.buttonNormal();
}
catch (System.Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
return;
}
dgv.Enabled = true;
}
}


.

The form has a Query button, then without closing the application, I did some query to display all or some data, all query work as expected.

Don't know why this happened, and my guess is related to connection and data adapter (Fill method). I disable pooling connection in my connection string, and this seems quite resolve my problem. Any idea?

Selasa, 11 Mei 2010

Backup and restore all database between MySQL instances

I have two instances of MySQL, one using 5.0.27 and the other 5.5.3. My requirement is to transfer all database to a new one. I try to backup all database and restore using My SQL Administration Tools. All database successfully restored (imported) to the new instance, but got problem with privilege that reports Column count of mysql.proc is wrong. Expected 20, found 16. The table is probably corrupted.

Then I look at the backup script but could not found command to create/insert user privilege on mysql database. Probably I missed something, and glad to hear from you. I switch the way, and try following steps:

1. Do backup:
shell5027>mysqldump -uroot -ppass --all-database > C:\temp\sqldataku.sql

Then opened the backup script and found commands to create-insert users privileges on mysql database, something like these:

CREATE DATABASE /*!32312 IF NOT EXISTS*/ `mysql` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `mysql`;
DROP TABLE IF EXISTS `db`;
CREATE TABLE `db` ( .... )...;
INSERT INTO `db` VALUES ('%','cms','fercms','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'),....);

INSERT INTO `user` VALUES ('localhost','root','*7775476747C6AD73358FA54DAED7828A72014B4E','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0),('%','fercms','*778F407DE7C65307389FA34AAED7828A72014B4E','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','','','','',0,0,0,0), ...);

mysql.user table contains user list (with passwords) and their global privileges, mysql.db handles users' database-level privileges.

2. Do restore:
shell553>mysql -uroot -ppass < C:\temp\sqldataku.sql

3. Do flush privilege:
shell553>mysql -uroot -ppass
mysql> flush privileges;
mysql>\q

Test the database using myprogram or tools but come with error message: Column count of mysql.proc is wrong. Expected 20, found 16. The table is probably corrupted;

4. Do upgrade, by run this command:
shell553>mysql_upgrade -uroot -ppass --tmpdir=C:\temp\

Looking for 'mysql.exe' as: shell553\mysql.exe
Looking for 'mysqlcheck.exe' as: shell553\mysqlcheck.exe
Running 'mysqlcheck' with connection arguments: "--port=3306"
drupal64.access OK
drupal64.actions OK
fkm.phpbb_acl_groups OK
fkm.phpbb_acl_options OK
Running 'mysql_fix_privilege_tables'...
ERROR 1547 (HY000) at line 167: Column count of mysql.proc is wrong. Expected 20, found 16. The table is probably corrupted
ERROR 1547 (HY000) at line 168: Column count of mysql.proc is wrong. Expected 20, found 16. The table is probably corrupted
ERROR 1547 (HY000) at line 181: Column count of mysql.proc is wrong. Expected 20, found 16. The table is probably corrupted
WARNING: NULL values of the 'character_set_client' column ('mysql.proc' table) have been updated with a default value (cp850). Please verify if necessary.
WARNING: NULL values of the 'collation_connection' column ('mysql.proc' table) have been updated with a default value (cp850_general_ci). Please verify if necessary.
WARNING: NULL values of the 'db_collation' column ('mysql.proc' table) have been updated with default values. Please verify if necessary.
FATAL ERROR: Upgrade failed

Once again I run the command:
shell553>mysql_upgrade -uroot -ppass --tmpdir=C:\temp\
...
...
Running 'mysql_fix_privilege_tables'...
OK

I did the command again, and reported that "This installation of MySQL is already upgraded to 5.5.3-m3, use --force if you still need to run mysql_upgrade".

If these solve my requirement above (I have to see in future), than I suspect that first try using MySQL Administration Tools should work as well.