Re: puzzling perl DBI vs psql problem - Mailing list pgsql-general

From Susan Cassidy
Subject Re: puzzling perl DBI vs psql problem
Date
Msg-id CAE3Q8onyc-yKUBphoKYLxb6uxJGpvP_dNx+qMDBiWD=sXw6W5w@mail.gmail.com
Whole thread Raw
In response to Re: puzzling perl DBI vs psql problem  (Steve Atkins <steve@blighty.com>)
Responses Re: puzzling perl DBI vs psql problem  (Steve Atkins <steve@blighty.com>)
Re: puzzling perl DBI vs psql problem  (Rodrigo Gonzalez <rjgonzale.lists@gmail.com>)
List pgsql-general
Yes, I am running with use strict.  The statement I pasted in is after perl quoting, being written out by the same perl program.  I just take that statement and paste it into the psql window.

DBI->trace showed nothing out of the ordinary.  It just shows the lines being fetched that I am seeing in the web program, not the lines I get from psql.

Another odd thing is that it is apparently not logging statements from Perl, only from psql.  I don't know why.  I thought I had it set up right to log to syslog.  I've had good luck before with that on other installations.

Here are the log settings in postgresql.conf:

log_destination = 'syslog'              # Valid values are combinations of
                                        # stderr, csvlog, syslog, and eventlog,
                                        # depending on platform.  csvlog
                                        # requires logging_collector to be on.
# This is used when logging to stderr:
logging_collector = on                  # Enable capturing of stderr and csvlog
#logging_collector = off                        # Enable capturing of stderr and csvlog
                                        # into log files. Required to be on for
                                        # csvlogs.
# These are only used if logging_collector is on:
log_directory = 'pg_log'                # directory where log files are written,
log_filename = 'postgresql-%a.log'      # log file name pattern,
#log_file_mode = 0600                   # creation mode for log files,
log_truncate_on_rotation = on           # If on, an existing log file with the
                                        # same name as the new log file will be
log_rotation_age = 1d                   # Automatic rotation of logfiles will
log_rotation_size = 0                   # Automatic rotation of logfiles will
                                        # happen after that much log output.
# These are relevant when logging to syslog:
syslog_facility = 'LOCAL0'
syslog_ident = 'postgres'
# This is only relevant when logging to eventlog (win32):
client_min_messages = log               # values in order of decreasing detail:
                                        #   log
log_min_messages = info         # values in order of decreasing detail:
#log_min_messages = warning             # values in order of decreasing detail:
                                        #   log
#log_min_error_statement = error        # values in order of decreasing detail:
                                        #   log
#log_min_duration_statement = -1        # -1 is disabled, 0 logs all statements
                                        # and their durations, > 0 logs only
#log_checkpoints = off
#log_connections = off
#log_disconnections = off
#log_duration = off
#log_error_verbosity = default          # terse, default, or verbose messages
#log_hostname = off
log_line_prefix = '%d %u %p %t '                        # special values:

Could it have something to do with permissions on /var/log/postgresql?  It is writeable by root only.  The perl program runs under apache.

Susan


On Thu, Mar 13, 2014 at 12:46 PM, Steve Atkins <steve@blighty.com> wrote:

On Mar 13, 2014, at 12:18 PM, Susan Cassidy <susan.cassidy@decisionsciencescorp.com> wrote:

> I have a weird issue that I can't figure out.
>
> If I run the exact same query through psql as through perl DBI, I get different results.  I get far fewer results with DBI than through the psql command line.
>
> Any ideas why that would be?
>
> The query is:
>     SELECT st.description, st.scene_thing_instance_id,
>       st.scene_id, sc.description, st.scene_thing_id, s.description,
>       st.position_x, st.position_y, st.position_z,
>            CASE
>             when (st.description = 'absolute root'::text) then 1
>             when (st.description ilike 'root%') then  2
>             else 3
>            END as s1, s.shape_name_id, sn.shape_name
>      from scene_thing_instances st
>         left join scene_things s on st.scene_thing_id = s.scene_thing_id
>         left join scenes sc on st.scene_id = sc.scene_id
>         left outer join shape_names sn on s.shape_name_id = sn.shape_name_id
>
>       order by  s1, st.description
>
> I get 14 rows back via psql, but I only get 5 rows back via DBI.  It's very puzzling.
>
> I copied and pasted the query from the program's log file, so I know I'm doing the exact same query.  If it matters, I'm only seeing the rows with 'root' in them via DBI, which the CASE statement refers to.

How are you quoting the string in perl, and are you running with use strict?

My first thought would be that you’re not running the query you think you are - logging it at the postgresql side will let you check that (or if that’s not possible, DBI’s trace methods can help).

Cheers,
  Steve



--
Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general

pgsql-general by date:

Previous
From: Steve Atkins
Date:
Subject: Re: puzzling perl DBI vs psql problem
Next
From: Susan Cassidy
Date:
Subject: Re: puzzling perl DBI vs psql problem