Re: Insert into partition table hangs

Поиск
Список
Период
Сортировка
От Nik
Тема Re: Insert into partition table hangs
Дата
Msg-id 1148330300.079783.265230@j55g2000cwa.googlegroups.com
обсуждение исходный текст
Ответ на Re: Insert into partition table hangs  ("Qingqing Zhou" <zhouqq@cs.toronto.edu>)
Ответы Re: Insert into partition table hangs  ("Jim C. Nasby" <jnasby@pervasive.com>)
Список pgsql-general
I do not run the INSERTs concurrently. They are being executed as the
data comes in sequentially. I attempted to create a stand-alone example
to reproduce the issue, but I was not successful. I will post the
example anyway. This example ran fine, and did not hang at any point,
but it might give a good idea of the actual application mechanics.

-- Database objects
------------------------------

CREATE TABLE schemaname.master_table
(
   id int4 NOT NULL,
   speed float4 NOT NULL,
   "start" timestamptz NOT NULL
) WITHOUT OIDS TABLESPACE tbsname;
ALTER TABLE schemaname.master_table OWNER TO <username>;

CREATE TABLE schemaname.partition_table
(
  CHECK("start" >= '05-01-2006 00:00:00' AND "start" <= '05-31-2006
23:59:59'),
  CONSTRAINT partition_pk PRIMARY KEY (id, speed, "start") USING INDEX
TABLESPACE tbsname
) INHERITS (schemaname.master_table)
WITHOUT OIDS TABLESPACE tbsname;
ALTER TABLE schemaname.partition_table OWNER TO <username>;

CREATE OR REPLACE RULE master_table_insert AS
ON INSERT TO schemaname.master_table WHERE ("start" >= '05-01-2006
00:00:00' AND "start" <= '05-31-2006 23:59:59')
DO INSTEAD
INSERT INTO schemaname.partition_table VALUES
(
    NEW.id,
    NEW.speed,
    NEW."start"
);

-- Java application that inserts data
---------------------------------------------------

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.TimeZone;
import java.sql.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class Main
{
    public static void main(String[] args)
    {
        System.out.println("Starting the application");

        Statement stmt=null;
        Connection conn=null;
        String query="";
        Long tstamp1=new Long("1148328357");

        try
        {
            Class.forName("org.postgresql.Driver");
            conn=DriverManager.getConnection("jdbc:postgresql://<ipaddress>/<dbname>",
"<username>","<password>");
            stmt=conn.createStatement();
            while(true)
            {
                tstamp1++;
                String tstamp2=convertTimestamp(tstamp1);

                query="INSERT INTO schemaname.master_table VALUES
(1,53.5,'"+tstamp2+"')";

                System.out.println("Inserting "+tstamp2+" ...");
                stmt.execute(query);
                System.out.println("DONE.");
            }
        }
        catch(SQLException e1)
        {
            System.out.println(e1.toString());
        }
        catch(ClassNotFoundException e2)
        {
            System.out.println(e2.toString());
        }
    }

    // Convert the time in seconds from epoch to the timestamptz format
    public static String convertTimestamp(Long timeIn)
    {
        if(timeIn!=null)
        {
            // Generate a date filetype by converting the seconds to
milliseconds from epoch
            Date d = new Date((timeIn.longValue()*1000));

            // Specify the date format
            SimpleDateFormat df = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");

            // Get the date into a string
            String partDate = df.format(d);

            // Get the current timezone
            TimeZone tz = TimeZone.getDefault();

            // Adjust the timezone offset
            int dstOffset =
((((tz.getRawOffset()+tz.getDSTSavings())/1000)/60)/60);

            // Add the seconds to the date
            String result = partDate+" "+dstOffset+":00";

            return result;
        }
        else
            return "";
    }
}


В списке pgsql-general по дате отправления:

Предыдущее
От: "venu Vempati"
Дата:
Сообщение: password reset
Следующее
От: "Petr Bouda"
Дата:
Сообщение: pgAdmin III very slow if working on localhost