postgres sql assistance

Started by arun chirappurathabout 2 years ago7 messagesgeneral
Jump to latest
#1arun chirappurath
arunsnmimt@gmail.com

Dear all,

I am an accidental postgres DBA and learning things every day. Apologies
for my questions if not properly drafted.

I am trying to load data from the temp table to the main table and catch
the exceptions inside another table.

temp table is cast with the main table data type and trying to load the
data.

temp table is below.

category_name | description
| is_active
-------------------------------------------+---------------------------------------------+-----------
*Tech123212312312323233213123123123123 *| Furniture and home decor
| true
*Tech123212312312323233213123123123123 *| Electronic devices and
accessories | true
Elec | Books of various genres
| *15*
TV | Books
| *12*
cla | Apparel and fashion accessories
| true

category name is varchar(25) and is_active is boolean in main table. So i
should get exceptions for 1st,2nd for category_name rows and 4 and 5th rows
for boolean. In exception table results,its only showing

Exception table is below. Here instead of showing exception for value 12 in
the is_active table its showing old exception for 15 itself.. Script is
attached,,...SQLERRM value is not getting updated for row 12..WHat could be
the reason for this?

value too long for type character varying(25) category_name 1 2024-01-16
16:17:01.279 +0530 value too long for type character varying(25)
description 2 2024-01-16 16:17:01.279 +0530 invalid input syntax for type
boolean: "15" is_active 3 2024-01-16 16:17:01.279 +0530 *invalid input
syntax for type boolean: "15" * 4 2024-01-16 16:17:01.279 +0530 *invalid
input syntax for type boolean: "15"* 5 2024-01-16 16:17:01.279 +0530

Attachments:

script.txttext/plain; charset=US-ASCII; name=script.txtDownload
#2Raul Giucich
raul.giucich@gmail.com
In reply to: arun chirappurath (#1)
Re: postgres sql assistance

Hi Arun, can you share the sql used for this insert. Visually it seems some
character are affecting the data.
Best regards,
Raul

El mar, 16 ene 2024 a la(s) 9:35 a.m., arun chirappurath (
arunsnmimt@gmail.com) escribió:

Show quoted text

Dear all,

I am an accidental postgres DBA and learning things every day. Apologies
for my questions if not properly drafted.

I am trying to load data from the temp table to the main table and catch
the exceptions inside another table.

temp table is cast with the main table data type and trying to load the
data.

temp table is below.

category_name | description
| is_active

-------------------------------------------+---------------------------------------------+-----------
*Tech123212312312323233213123123123123 *| Furniture and home decor
| true
*Tech123212312312323233213123123123123 *| Electronic devices and
accessories | true
Elec | Books of various genres
| *15*
TV | Books
| *12*
cla | Apparel and fashion accessories
| true

category name is varchar(25) and is_active is boolean in main table. So i
should get exceptions for 1st,2nd for category_name rows and 4 and 5th rows
for boolean. In exception table results,its only showing

Exception table is below. Here instead of showing exception for value 12
in the is_active table its showing old exception for 15 itself.. Script is
attached,,...SQLERRM value is not getting updated for row 12..WHat could be
the reason for this?

value too long for type character varying(25) category_name 1 2024-01-16
16:17:01.279 +0530 value too long for type character varying(25)
description 2 2024-01-16 16:17:01.279 +0530 invalid input syntax for type
boolean: "15" is_active 3 2024-01-16 16:17:01.279 +0530 *invalid input
syntax for type boolean: "15" * 4 2024-01-16 16:17:01.279 +0530 *invalid
input syntax for type boolean: "15"* 5 2024-01-16 16:17:01.279 +0530

#3Rob Sargent
robjsargent@gmail.com
In reply to: Raul Giucich (#2)
Re: postgres sql assistance

On 1/16/24 06:00, Raul Giucich wrote:

Hi Arun, can you share the sql used for this insert. Visually it seems
some character are affecting the data.
Best regards,
Raul

Raul, the OP attached the sq.

#4Ron
ronljohnsonjr@gmail.com
In reply to: arun chirappurath (#1)
Re: postgres sql assistance

"*invalid input syntax for type boolean: "15"*"

That is the problem. You can't insert 15 into a column of type "boolean".

On Tue, Jan 16, 2024 at 7:35 AM arun chirappurath <arunsnmimt@gmail.com>
wrote:

Show quoted text

Dear all,

I am an accidental postgres DBA and learning things every day. Apologies
for my questions if not properly drafted.

I am trying to load data from the temp table to the main table and catch
the exceptions inside another table.

temp table is cast with the main table data type and trying to load the
data.

temp table is below.

category_name | description
| is_active

-------------------------------------------+---------------------------------------------+-----------
*Tech123212312312323233213123123123123 *| Furniture and home decor
| true
*Tech123212312312323233213123123123123 *| Electronic devices and
accessories | true
Elec | Books of various genres
| *15*
TV | Books
| *12*
cla | Apparel and fashion accessories
| true

category name is varchar(25) and is_active is boolean in main table. So i
should get exceptions for 1st,2nd for category_name rows and 4 and 5th rows
for boolean. In exception table results,its only showing

Exception table is below. Here instead of showing exception for value 12
in the is_active table its showing old exception for 15 itself.. Script is
attached,,...SQLERRM value is not getting updated for row 12..WHat could be
the reason for this?

value too long for type character varying(25) category_name 1 2024-01-16
16:17:01.279 +0530 value too long for type character varying(25)
description 2 2024-01-16 16:17:01.279 +0530 invalid input syntax for type
boolean: "15" is_active 3 2024-01-16 16:17:01.279 +0530 *invalid input
syntax for type boolean: "15" * 4 2024-01-16 16:17:01.279 +0530 *invalid
input syntax for type boolean: "15"* 5 2024-01-16 16:17:01.279 +0530

#5Jim Nasby
Jim.Nasby@BlueTreble.com
In reply to: arun chirappurath (#1)
Re: postgres sql assistance

On 1/16/24 6:34 AM, arun chirappurath wrote:

I am trying to load data from the temp table to the main table and catch
the exceptions inside another table.

I don't have a specific answer, but do have a few comments:

- There are much easier ways to do this kind of data load. Search for
"postgres data loader" on google.

- When you're building your dynamic SQL you almost certainly should have
some kind of ORDER BY on the queries pulling data from
information_schema. SQL never mandates data ordering except when you
specifically use ORDER BY, so the fact that your fields are lining up
right now is pure luck.

- EXCEPTION WHEN others is kinda dangerous, because it traps *all*
errors. It's much safer to find the exact error code. An easy way to do
that in psql is \errverbose [1]. In this particular case that might not
work well since there's a bunch of different errors you could get that
are directly related to a bad row of data. BUT, there's also a bunch of
errors you could get that have nothing whatsoever to do with the data
you're trying to load (like if there's a bug in your code that's
building the INSERT statement).

- You should look at the other details you can get via GET STACKED
DIAGNOSTICS [2]. As far as I can tell, your script as-written will
always return the first column in the target table. Instead you should
use COLUMN_NAME. Note that not every error will set that though.

1:
https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-ERRVERBOSE
2:
https://www.postgresql.org/docs/current/plpgsql-control-structures.html#PLPGSQL-EXCEPTION-DIAGNOSTICS
--
Jim Nasby, Data Architect, Austin TX

#6arun chirappurath
arunsnmimt@gmail.com
In reply to: Jim Nasby (#5)
Re: postgres sql assistance

Hi Jim,

Thank you so much for the kind review.

Architect is pressing for a native procedure to data load.

I shall Google ans try to find more suitable one than writing one by myself.

Thanks again,
Arun

On Wed, 17 Jan, 2024, 01:58 Jim Nasby, <jim.nasby@gmail.com> wrote:

Show quoted text

On 1/16/24 6:34 AM, arun chirappurath wrote:

I am trying to load data from the temp table to the main table and catch
the exceptions inside another table.

I don't have a specific answer, but do have a few comments:

- There are much easier ways to do this kind of data load. Search for
"postgres data loader" on google.

- When you're building your dynamic SQL you almost certainly should have
some kind of ORDER BY on the queries pulling data from
information_schema. SQL never mandates data ordering except when you
specifically use ORDER BY, so the fact that your fields are lining up
right now is pure luck.

- EXCEPTION WHEN others is kinda dangerous, because it traps *all*
errors. It's much safer to find the exact error code. An easy way to do
that in psql is \errverbose [1]. In this particular case that might not
work well since there's a bunch of different errors you could get that
are directly related to a bad row of data. BUT, there's also a bunch of
errors you could get that have nothing whatsoever to do with the data
you're trying to load (like if there's a bug in your code that's
building the INSERT statement).

- You should look at the other details you can get via GET STACKED
DIAGNOSTICS [2]. As far as I can tell, your script as-written will
always return the first column in the target table. Instead you should
use COLUMN_NAME. Note that not every error will set that though.

1:

https://www.postgresql.org/docs/current/app-psql.html#APP-PSQL-META-COMMAND-ERRVERBOSE
2:

https://www.postgresql.org/docs/current/plpgsql-control-structures.html#PLPGSQL-EXCEPTION-DIAGNOSTICS
--
Jim Nasby, Data Architect, Austin TX

#7Jim Nasby
Jim.Nasby@BlueTreble.com
In reply to: arun chirappurath (#6)
Re: postgres sql assistance

On 1/16/24 10:04 PM, arun chirappurath wrote:

Architect is pressing for a native procedure to data load.

It's possible to write a loader in pl/pgsql but it would be easily twice
as complex as where you got on your first attempt. It would also never
perform anywhere near as well as a dedicated loader, because there's no
way to avoid the temp table (which a native loader doesn't need to use).
--
Jim Nasby, Data Architect, Austin TX