Tag Archive for 'database'

Fungsi String: Split Berdasarkan Karakter

Basic , pada , untuk memisahkan string menjadi dua. Untuk memecah string menjadi dua baris data bisa menggunakan fungsi regexp_split_to_table.

Misal saya mau memisahkan “kaskus/detik” pada field KOLOM berdasarkan karakter “/”

regexp_split_to_table(KOLOM, E'\\/+')

Hasil (2 baris):

kaskus

detik

——————————————-

Menggunakan fungsi . Merupakan fungsi dari , create dulu di postgres.

Mengambil string di depan “/” :

SUBSTR(KOLOM, 1 ,INSTR(KOLOM, '/', 1, 1)-1)

Mengambil string di belakang “/”

SELECT SUBSTR(KOLOM,INSTR(KOLOM, '/', 1, 1)+1)

Porting Fungsi INSTR Oracle ke Postgres

This is just a note on the blog… numpang catatan :p

PORTING FUNGSI INSTR ORACLE KE POSTGRES
 
-------------------
This section contains the code for a set of Oracle-compatible instr functions that you can use to simplify your porting efforts.
 
--
-- instr functions that mimic Oracle's counterpart
-- Syntax: instr(string1, string2, [n], [m]) where [] denotes optional parameters.
--
-- Searches string1 beginning at the nth character for the mth occurrence
-- of string2.  If n is negative, search backwards.  If m is not passed,
-- assume 1 (search starts at first character).
--
 
CREATE FUNCTION instr(varchar, varchar) RETURNS integer AS $$
DECLARE
    pos integer;
BEGIN
    pos:= instr($1, $2, 1);
    RETURN pos;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
 
CREATE FUNCTION instr(string varchar, string_to_search varchar, beg_index integer)
RETURNS integer AS $$
DECLARE
    pos integer NOT NULL DEFAULT 0;
    temp_str varchar;
    beg integer;
    length integer;
    ss_length integer;
BEGIN
    IF beg_index > 0 THEN
        temp_str := substring(string FROM beg_index);
        pos := position(string_to_search IN temp_str);
 
        IF pos = 0 THEN
            RETURN 0;
        ELSE
            RETURN pos + beg_index - 1;
        END IF;
    ELSE
        ss_length := char_length(string_to_search);
        length := char_length(string);
        beg := length + beg_index - ss_length + 2;
 
        WHILE beg > 0 LOOP
            temp_str := substring(string FROM beg FOR ss_length);
            pos := position(string_to_search IN temp_str);
 
            IF pos > 0 THEN
                RETURN beg;
            END IF;
 
            beg := beg - 1;
        END LOOP;
 
        RETURN 0;
    END IF;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
 
CREATE FUNCTION instr(string varchar, string_to_search varchar,
                      beg_index integer, occur_index integer)
RETURNS integer AS $$
DECLARE
    pos integer NOT NULL DEFAULT 0;
    occur_number integer NOT NULL DEFAULT 0;
    temp_str varchar;
    beg integer;
    i integer;
    length integer;
    ss_length integer;
BEGIN
    IF beg_index > 0 THEN
        beg := beg_index;
        temp_str := substring(string FROM beg_index);
 
        FOR i IN 1..occur_index LOOP
            pos := position(string_to_search IN temp_str);
 
            IF i = 1 THEN
                beg := beg + pos - 1;
            ELSE
                beg := beg + pos;
            END IF;
 
            temp_str := substring(string FROM beg + 1);
        END LOOP;
 
        IF pos = 0 THEN
            RETURN 0;
        ELSE
            RETURN beg;
        END IF;
    ELSE
        ss_length := char_length(string_to_search);
        length := char_length(string);
        beg := length + beg_index - ss_length + 2;
 
        WHILE beg > 0 LOOP
            temp_str := substring(string FROM beg FOR ss_length);
            pos := position(string_to_search IN temp_str);
 
            IF pos > 0 THEN
                occur_number := occur_number + 1;
 
                IF occur_number = occur_index THEN
                    RETURN beg;
                END IF;
            END IF;
 
            beg := beg - 1;
        END LOOP;
 
        RETURN 0;
    END IF;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;

Error PHPMyAdmin: This is Not a Number

Error di waktu create table : This is Not a Number

Cek:

  • Tipe field : apakah ada yang varchar
  • Length/Values : apakah ada yang kosong
  • Isi nilai di kolom Length / values
  • done

error-this-is-no-a-number

create_table_phpmyadmin

Akhirnya si Postgres Normal Lagi :D

Postgres yang kemaren sempat problem akhirnya mulai semalem bisa kembali buat kerja lagi. Dan ternyata masalahnya sepele hehehe…

Ditemeni istri tercinta yang lg nonton tv disebelahku, mulai lagi si Postgres diutak-atik. Agak buru-buru juga, coz udah diajak nemenin si kecil ijaz bobo dikamar. Permasalahannya kemaren, jika service Postgres di start, dia akan langsung stop lagi. Pesan error yang muncul kira2 begitu: “…. Some services stop automatically if they have no work to do ….”

Semalam coba uninstall trus install ulang lagi. Tapi sebelumnya file configurasi .conf dihapus dulu semua. Sapa tau di akan generate ulang file configurasi tadi. Eh… ternyata nggak. Kalo ngeliat log di Event Viewer nya keluar kayak gini: 2008-03-27 22:44:40 LOG: logger shutting down.

Setelah eksplore folder Data PostgreSQL, aku baru inget belum ngecek log-nya Postgres ndiri :D Ternyata ada error kayak gini:

2008-03-27 22:44:39 PANIC:  could not open directory “pg_twophase”: No such file or directory
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application’s support team for more information.

Sumber permasalahannya kayaknya dah jelas nih. Ada satu direktori yang ‘hilang’. Aku coba create direktori pg_twophase di dalam direktori Data… And It Works! Hehehe… si Postgres langsung normal lagi.

Koq folder satu itu bisa ilang ya? Coba inget2 lagi… ternyata aku beberapa waktu sebelumnya sempet melakukan ‘pemutihan’ untuk folder2 yang dianggap gak perlu :p Semua folder kosong dihapus! hehehe… Dan ternyata Postgres menjadi salah satu korbannya. Tentang apa itu pg_twophase bisa dilihat di dokumentasinya.

Tinggal upgrade dech ke rilis terbaru :D

Tags: , , ,