Re: create batch script to import into postgres tables

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
27 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

Adrian Klaver-4
On 6/16/20 7:20 AM, Pepe TD Vo wrote:
> good morning experts,
>
> I nêd to set up a batch script to import multi csv files to import them
> to Postgres tables.  Each csv files will be named table1_todaydate.csv,
> table2_todaydate.csv, etc... tablen_todaydate.csv.  Each csv file will
> import to its table and how do I execute the script to called psql from
> AWS?  Do I need to create each batch file for import each table?

You have psql installed on your local(Windows?) machine?

Or are you using psql in your AWS instance?

>
> all export file is store in c:\export\files\
>
> thank you.
>
> Bach-Nga
>
>
>
>
>
>
> **
> *Bach-Nga
>
> *No one in this world is pure and perfect.  If you avoid people for
> their mistakes you will be alone. So judge less, love, and forgive
> more.EmojiEmojiEmoji
> To call him a dog hardly seems to do him justice though in as much as he
> had four legs, a tail, and barked, I admit he was, to all outward
> appearances. But to those who knew him well, he was a perfect gentleman
> (Hermione Gingold)
>
> **Live simply **Love generously **Care deeply **Speak kindly.
> *** Genuinely rich *** Faithful talent *** Sharing success
>
>


--
Adrian Klaver
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

Adrian Klaver-4
On 6/16/20 7:59 AM, Pepe TD Vo wrote:

Just noticed you cross posted to pgsql-admin listed. FYI, That is not a
good practice.

> I can run \copy in Linux with individual csv file into the table fine
> and run import using pgadmin into AWS instance. I am trying to run \copy
> all csv files import into its own table in Linux and in AWS instance. If
> all csv files into one table is fine but each csv for each table. Should
> I create one batch job for each imported table?  If each batch file
> import csv to its table would be fine via \copy table_name(col1, col2,
> ... coln) from '/path/tablename.csv' delimiter ',' csv header; right?

Yes, you will need to copy each file into its own table.

>
> Also, the problem is I can't pull/execute psql from window client to
> pull the psql in aws instance and don't know how to create the batch
> script for this run.  I tried simple \copy pull from c:\tes.csv and psql
> is unknown.

There is no good/easy way I know of to install just psql on Windows. You
are better off copying the CSV files to the AWS instance.

Do you have PuTTY installed?:

https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html

If not I would take a look at above link. PuTTY brings SSH to Windows.
The relevant part to this issue is:

https://the.earth.li/~sgtatham/putty/0.73/htmldoc/Chapter5.html#pscp

"PSCP, the PuTTY Secure Copy client, is a tool for transferring files
securely between computers using an SSH connection. "

>
>
> **
> *Bach-Nga
>
> *No one in this world is pure and perfect.  If you avoid people for
> their mistakes you will be alone. So judge less, love, and forgive
> more.EmojiEmojiEmoji
> To call him a dog hardly seems to do him justice though in as much as he
> had four legs, a tail, and barked, I admit he was, to all outward
> appearances. But to those who knew him well, he was a perfect gentleman
> (Hermione Gingold)
>
> **Live simply **Love generously **Care deeply **Speak kindly.
> *** Genuinely rich *** Faithful talent *** Sharing success
>
>
>
>
> On Tuesday, June 16, 2020, 10:39:45 AM EDT, Adrian Klaver
> <[hidden email]> wrote:
>
>
> On 6/16/20 7:30 AM, Pepe TD Vo wrote:
> Please post to list also.
> Ccing list.
>
>  > using psql in AWS instance
>  > also psql in Linux.  I can run psql in linux if create a batch file, but
>  > don't know how to pull psql in aws instance if the batch script run in
>  > Window client.  Also, I need help to pull each csv import to its own
>  > table.  Should I create each batch script for each import table?
>
> So the AWS instance and Linux instance are different?
>
> To me the simplest solution would be to push the CSV files to the AWS
> instance and work from there. The files will need to be run through a
> Postgres command to be imported into a table.
>
> Are you familiar with
> COPY(https://www.postgresql.org/docs/12/sql-copy.html) or
> \copy(https://www.postgresql.org/docs/12/app-psql.html)?
>
>
>  >
>  > **
>  > *Bach-Nga
>  >
>  > *No one in this world is pure and perfect.  If you avoid people for
>  > their mistakes you will be alone. So judge less, love, and forgive
>  > more.EmojiEmojiEmoji
>  > To call him a dog hardly seems to do him justice though in as much as he
>  > had four legs, a tail, and barked, I admit he was, to all outward
>  > appearances. But to those who knew him well, he was a perfect gentleman
>  > (Hermione Gingold)
>  >
>  > **Live simply **Love generously **Care deeply **Speak kindly.
>  > *** Genuinely rich *** Faithful talent *** Sharing success
>  >
>  >
>  >
>  >
>  > On Tuesday, June 16, 2020, 10:25:03 AM EDT, Adrian Klaver
>  > <[hidden email] <mailto:[hidden email]>> wrote:
>  >
>  >
>  > On 6/16/20 7:20 AM, Pepe TD Vo wrote:
>  >  > good morning experts,
>  >  >
>  >  > I nêd to set up a batch script to import multi csv files to import
> them
>  >  > to Postgres tables.  Each csv files will be named
> table1_todaydate.csv,
>  >  > table2_todaydate.csv, etc... tablen_todaydate.csv.  Each csv file will
>  >  > import to its table and how do I execute the script to called psql
> from
>  >  > AWS?  Do I need to create each batch file for import each table?
>  >
>  > You have psql installed on your local(Windows?) machine?
>  >
>  > Or are you using psql in your AWS instance?
>  >
>  >  >
>  >  > all export file is store in c:\export\files\
>  >  >
>  >  > thank you.
>  >  >
>  >  > Bach-Nga
>  >  >
>  >  >
>  >  >
>  >  >
>  >  >
>  >  >
>  >  > **
>  >  > *Bach-Nga
>  >  >
>  >  > *No one in this world is pure and perfect.  If you avoid people for
>  >  > their mistakes you will be alone. So judge less, love, and forgive
>  >  > more.EmojiEmojiEmoji
>  >
>  >  > To call him a dog hardly seems to do him justice though in as much
> as he
>  >  > had four legs, a tail, and barked, I admit he was, to all outward
>  >  > appearances. But to those who knew him well, he was a perfect
> gentleman
>  >  > (Hermione Gingold)
>  >  >
>  >  > **Live simply **Love generously **Care deeply **Speak kindly.
>  >  > *** Genuinely rich *** Faithful talent *** Sharing success
>  >
>  >  >
>  >  >
>  >
>  >
>  > --
>  > Adrian Klaver
>  > [hidden email] <mailto:[hidden email]>
> <mailto:[hidden email] <mailto:[hidden email]>>
>
>  >
>
>
> --
> Adrian Klaver
> [hidden email] <mailto:[hidden email]>


--
Adrian Klaver
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

Christopher Browne-3
In reply to this post by Adrian Klaver-4

On Tue, 16 Jun 2020 at 10:59, Pepe TD Vo <[hidden email]> wrote:
I can run \copy in Linux with individual csv file into the table fine and run import using pgadmin into AWS instance.  I am trying to run \copy all csv files import into its own table in Linux and in AWS instance. If all csv files into one table is fine but each csv for each table.  Should I create one batch job for each imported table?  If each batch file import csv to its table would be fine via \copy table_name(col1, col2, ... coln) from '/path/tablename.csv' delimiter ',' csv header;  right?

There is no single straightforward answer to that.

Supposing I want a batch to either all be processed, or to all not process, then I might write a sql file like:

begin;
\copy table_1 (c1, c2, c3) from '/path/tabledata1.csv' csv header;
\copy table_2 (c1, c2, c3) from '/path/tabledata2.csv' csv header;
\copy table_3 (c1, c2, c3) from '/path/tabledata3.csv' csv header;
commit;

But you may be fine with having a separate SQL script for each table.

There will be conditions where one or the other is more appropriate, and that will be based on the requirements of the process.


Also, the problem is I can't pull/execute psql from window client to pull the psql in aws instance and don't know how to create the batch script for this run.  I tried simple \copy pull from c:\tes.csv and psql is unknown.

You cannot run psql without having it installed; there is a Windows installer for PostgreSQL, so you could use that to get it installed.

Hopefully there is an installer that will just install PostgreSQL client software (like psql, pg_dump, and notably *not* the database server software); I don't use WIndows, so I am not too familiar with that.
 
--
When confronted by a difficult problem, solve it by reducing it to the
question, "How would the Lone Ranger handle this?"
bvo
Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

bvo
Yes, I do have putty installed but can't connect to the aws postgres instance.  Only work for oracle instance.  Only connect postgres instance using pgadmin.

follow the url and the login prompt for username and hung there.

thank you.

Bach-Nga

No one in this world is pure and perfect.  If you avoid people for their mistakes you will be alone. So judge less, love, and forgive more.EmojiEmojiEmoji
To call him a dog hardly seems to do him justice though in as much as he had four legs, a tail, and barked, I admit he was, to all outward appearances. But to those who knew him well, he was a perfect gentleman (Hermione Gingold)

**Live simply **Love generously **Care deeply **Speak kindly.
*** Genuinely rich *** Faithful talent *** Sharing success




On Tuesday, June 16, 2020, 11:17:21 AM EDT, Christopher Browne <[hidden email]> wrote:



On Tue, 16 Jun 2020 at 10:59, Pepe TD Vo <[hidden email]> wrote:
I can run \copy in Linux with individual csv file into the table fine and run import using pgadmin into AWS instance.  I am trying to run \copy all csv files import into its own table in Linux and in AWS instance. If all csv files into one table is fine but each csv for each table.  Should I create one batch job for each imported table?  If each batch file import csv to its table would be fine via \copy table_name(col1, col2, ... coln) from '/path/tablename.csv' delimiter ',' csv header;  right?

There is no single straightforward answer to that.

Supposing I want a batch to either all be processed, or to all not process, then I might write a sql file like:

begin;
\copy table_1 (c1, c2, c3) from '/path/tabledata1.csv' csv header;
\copy table_2 (c1, c2, c3) from '/path/tabledata2.csv' csv header;
\copy table_3 (c1, c2, c3) from '/path/tabledata3.csv' csv header;
commit;

But you may be fine with having a separate SQL script for each table.

There will be conditions where one or the other is more appropriate, and that will be based on the requirements of the process.


Also, the problem is I can't pull/execute psql from window client to pull the psql in aws instance and don't know how to create the batch script for this run.  I tried simple \copy pull from c:\tes.csv and psql is unknown.


You cannot run psql without having it installed; there is a Windows installer for PostgreSQL, so you could use that to get it installed.

Hopefully there is an installer that will just install PostgreSQL client software (like psql, pg_dump, and notably *not* the database server software); I don't use WIndows, so I am not too familiar with that.
 
--
When confronted by a difficult problem, solve it by reducing it to the
question, "How would the Lone Ranger handle this?"

bvo
Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

bvo
I have a Postgresql client installed and connected.  how can i create a batch script running from the client window?

Bach-Nga

No one in this world is pure and perfect.  If you avoid people for their mistakes you will be alone. So judge less, love, and forgive more.EmojiEmojiEmoji
To call him a dog hardly seems to do him justice though in as much as he had four legs, a tail, and barked, I admit he was, to all outward appearances. But to those who knew him well, he was a perfect gentleman (Hermione Gingold)

**Live simply **Love generously **Care deeply **Speak kindly.
*** Genuinely rich *** Faithful talent *** Sharing success




On Tuesday, June 16, 2020, 11:42:40 AM EDT, Pepe TD Vo <[hidden email]> wrote:


Yes, I do have putty installed but can't connect to the aws postgres instance.  Only work for oracle instance.  Only connect postgres instance using pgadmin.

follow the url and the login prompt for username and hung there.

thank you.

Bach-Nga

No one in this world is pure and perfect.  If you avoid people for their mistakes you will be alone. So judge less, love, and forgive more.EmojiEmojiEmoji
To call him a dog hardly seems to do him justice though in as much as he had four legs, a tail, and barked, I admit he was, to all outward appearances. But to those who knew him well, he was a perfect gentleman (Hermione Gingold)

**Live simply **Love generously **Care deeply **Speak kindly.
*** Genuinely rich *** Faithful talent *** Sharing success




On Tuesday, June 16, 2020, 11:17:21 AM EDT, Christopher Browne <[hidden email]> wrote:



On Tue, 16 Jun 2020 at 10:59, Pepe TD Vo <[hidden email]> wrote:
I can run \copy in Linux with individual csv file into the table fine and run import using pgadmin into AWS instance.  I am trying to run \copy all csv files import into its own table in Linux and in AWS instance. If all csv files into one table is fine but each csv for each table.  Should I create one batch job for each imported table?  If each batch file import csv to its table would be fine via \copy table_name(col1, col2, ... coln) from '/path/tablename.csv' delimiter ',' csv header;  right?

There is no single straightforward answer to that.

Supposing I want a batch to either all be processed, or to all not process, then I might write a sql file like:

begin;
\copy table_1 (c1, c2, c3) from '/path/tabledata1.csv' csv header;
\copy table_2 (c1, c2, c3) from '/path/tabledata2.csv' csv header;
\copy table_3 (c1, c2, c3) from '/path/tabledata3.csv' csv header;
commit;

But you may be fine with having a separate SQL script for each table.

There will be conditions where one or the other is more appropriate, and that will be based on the requirements of the process.


Also, the problem is I can't pull/execute psql from window client to pull the psql in aws instance and don't know how to create the batch script for this run.  I tried simple \copy pull from c:\tes.csv and psql is unknown.


You cannot run psql without having it installed; there is a Windows installer for PostgreSQL, so you could use that to get it installed.

Hopefully there is an installer that will just install PostgreSQL client software (like psql, pg_dump, and notably *not* the database server software); I don't use WIndows, so I am not too familiar with that.
 
--
When confronted by a difficult problem, solve it by reducing it to the
question, "How would the Lone Ranger handle this?"

Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

Adrian Klaver-4
On 6/18/20 8:20 AM, Pepe TD Vo wrote:

Please don't top post. The preferred style on this list is inline or
bottom posting(https://en.wikipedia.org/wiki/Posting_style).

> I have a Postgresql client installed and connected.  how can i create a
> batch script running from the client window?

Create a file with commands in it like the example from Christopher
Browne that was posted earlier:

"There is no single straightforward answer to that.


Supposing I want a batch to either all be processed, or to all not process,
then I might write a sql file like:


begin;
\copy table_1 (c1, c2, c3) from '/path/tabledata1.csv' csv header;
\copy table_2 (c1, c2, c3) from '/path/tabledata2.csv' csv header;
\copy table_3 (c1, c2, c3) from '/path/tabledata3.csv' csv header;
commit;


But you may be fine with having a separate SQL script for each table.


There will be conditions where one or the other is more appropriate, and
that will be based on the requirements of the process."

Then point psql at it:

psql -d some_db -h some_host -U some_user -f the_file

Be aware that \copy is all or nothing. If there is a single failure in
the copying the whole copy will rollback. Given that the one file per
table might be preferable.

>
> **
> *Bach-Nga
>



--
Adrian Klaver
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

Adrian Klaver-4
On 6/18/20 9:40 AM, Pepe TD Vo wrote:

> I get this part that separates SQL script for import each table,
>
> (import.sql)
> begin;
> \copy table_1 (c1, c2, c3) from '/path/tabledata1.csv' csv header;
> commit;
>
> but when open the psql sql shell script it prompts line by line for
> localhost, port, db, user, and password.  If I set up a script and let
> it run it won't connect to the postgresql instance.  I want to know how
> to execute a batch script connect to the database/instance.
> In oracle I created a shell script with all oracle_sid, oracle_home, and
> read the function/procedure... for psql, especially from window client,
> I did put psql_home and connect to the instance, it failed
>
> c:\Progra~1\PostgreSQL\11\bin\psql -d PSCIDR -h localhost -p 5432 -U
> postgres -i import.sql

The above should be -f import.sql. AFAIK there is no -i for psql, so
that should be failing.

>
> even I do a simple count
>
> c:\Progra~1\PostgreSQL\11\bin\psql -d PSCIDR -h localhost -p 5432 -U
> postgres -c "select count(*) from tableA";

psql -d production  -U postgres -c 'select count(*) from cell_per';
Null display is "NULL".
  count
-------
     68
(1 row)

psql -d production  -U postgres -c 'select count(*) from cell_per'
Null display is "NULL".
  count
-------
     68

psql -d production  -U postgres -c 'select count(*) from cell_per;'
Null display is "NULL".
  count
-------
     68


>
> none of them is work. Try to learn how to execute its script.

What error messages do you get?

>
> **
> *Bach-Nga
>
> *No one in this world is pure and perfect.  If you avoid people for
> their mistakes you will be alone. So judge less, love, and forgive
> more.EmojiEmojiEmoji
> To call him a dog hardly seems to do him justice though in as much as he
> had four legs, a tail, and barked, I admit he was, to all outward
> appearances. But to those who knew him well, he was a perfect gentleman
> (Hermione Gingold)
>
> **Live simply **Love generously **Care deeply **Speak kindly.
> *** Genuinely rich *** Faithful talent *** Sharing success
>
>
>
>
> On Thursday, June 18, 2020, 12:08:44 PM EDT, Adrian Klaver
> <[hidden email]> wrote:
>
>
> On 6/18/20 8:20 AM, Pepe TD Vo wrote:
>
> Please don't top post. The preferred style on this list is inline or
> bottom posting(https://en.wikipedia.org/wiki/Posting_style).
>
>  > I have a Postgresql client installed and connected.  how can i create a
>  > batch script running from the client window?
>
> Create a file with commands in it like the example from Christopher
> Browne that was posted earlier:
>
> "There is no single straightforward answer to that.
>
>
> Supposing I want a batch to either all be processed, or to all not process,
> then I might write a sql file like:
>
>
> begin;
> \copy table_1 (c1, c2, c3) from '/path/tabledata1.csv' csv header;
> \copy table_2 (c1, c2, c3) from '/path/tabledata2.csv' csv header;
> \copy table_3 (c1, c2, c3) from '/path/tabledata3.csv' csv header;
> commit;
>
>
> But you may be fine with having a separate SQL script for each table.
>
>
> There will be conditions where one or the other is more appropriate, and
> that will be based on the requirements of the process."
>
> Then point psql at it:
>
> psql -d some_db -h some_host -U some_user -f the_file
>
> Be aware that \copy is all or nothing. If there is a single failure in
> the copying the whole copy will rollback. Given that the one file per
> table might be preferable.
>
>
>  >
>  > **
>  > *Bach-Nga
>
>  >
>
>
>
> --
> Adrian Klaver
> [hidden email] <mailto:[hidden email]>
>
>
>


--
Adrian Klaver
[hidden email]


bvo
Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

bvo
>>psql -d production  -U postgres -c 'select count(*) from cell_per';
Null display is "NULL".
  count
-------
    68
(1 row)

you can do this once you are in psql. But if you are running from shell script, it will be an error

>>What error messages do you get?

my shell script is:
@echo off 
C:\Program Files\PostgreSQL\11\bin\psql -U PSmasteruser  -d PSCIDR -h hostname.amazonaws.com -p 5432 -c "select count(*) from tableA;"
pause

the error I have is 'C:\Program' is not recognized as an internal or external command, operable program or batch file.

I even surround the path in quotes because of space.
@echo off 
cmd /c ""C:\Program Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d PSCIDR -h hostname.amazonaws.com -p 5432 -c "select count(*) from tableA;"
pause

error is: 'C:\Program Files\PostgreSQL\11\bin\psql: illegal option -- u

when I put -P Password123 (or fully qualified password=Password123)

it gives me another error "pset: unknow option: Password123
psql: could not set printing parameter "Password123"

I can connect from psql shell fine when it prompt hostname, username (but connect to postgres not to PSmasteruser, PSmasteruser username set up for aws maintenance postgres database, someone did, not me and the password is same on both).  Once I'm in psql and I can change to PSCIDR instance fine and run select count(*) from tableA;



Bach-Nga

No one in this world is pure and perfect.  If you avoid people for their mistakes you will be alone. So judge less, love, and forgive more.EmojiEmojiEmoji
To call him a dog hardly seems to do him justice though in as much as he had four legs, a tail, and barked, I admit he was, to all outward appearances. But to those who knew him well, he was a perfect gentleman (Hermione Gingold)

**Live simply **Love generously **Care deeply **Speak kindly.
*** Genuinely rich *** Faithful talent *** Sharing success




On Thursday, June 18, 2020, 03:06:39 PM EDT, Adrian Klaver <[hidden email]> wrote:


On 6/18/20 9:40 AM, Pepe TD Vo wrote:

> I get this part that separates SQL script for import each table,
>
> (import.sql)
> begin;
> \copy table_1 (c1, c2, c3) from '/path/tabledata1.csv' csv header;
> commit;
>
> but when open the psql sql shell script it prompts line by line for
> localhost, port, db, user, and password.  If I set up a script and let
> it run it won't connect to the postgresql instance.  I want to know how
> to execute a batch script connect to the database/instance.
> In oracle I created a shell script with all oracle_sid, oracle_home, and
> read the function/procedure... for psql, especially from window client,
> I did put psql_home and connect to the instance, it failed
>
> c:\Progra~1\PostgreSQL\11\bin\psql -d PSCIDR -h localhost -p 5432 -U
> postgres -i import.sql

The above should be -f import.sql. AFAIK there is no -i for psql, so
that should be failing.

>
> even I do a simple count
>
> c:\Progra~1\PostgreSQL\11\bin\psql -d PSCIDR -h localhost -p 5432 -U
> postgres -c "select count(*) from tableA";

psql -d production  -U postgres -c 'select count(*) from cell_per';
Null display is "NULL".
  count
-------
    68
(1 row)

psql -d production  -U postgres -c 'select count(*) from cell_per'
Null display is "NULL".
  count
-------
    68

psql -d production  -U postgres -c 'select count(*) from cell_per;'
Null display is "NULL".
  count
-------
    68


>
> none of them is work. Try to learn how to execute its script.

What error messages do you get?

>
> **
> *Bach-Nga
>
> *No one in this world is pure and perfect.  If you avoid people for
> their mistakes you will be alone. So judge less, love, and forgive
> more.EmojiEmojiEmoji
> To call him a dog hardly seems to do him justice though in as much as he
> had four legs, a tail, and barked, I admit he was, to all outward
> appearances. But to those who knew him well, he was a perfect gentleman
> (Hermione Gingold)
>
> **Live simply **Love generously **Care deeply **Speak kindly.
> *** Genuinely rich *** Faithful talent *** Sharing success
>
>
>
>
> On Thursday, June 18, 2020, 12:08:44 PM EDT, Adrian Klaver
> <[hidden email]> wrote:
>
>
> On 6/18/20 8:20 AM, Pepe TD Vo wrote:
>
> Please don't top post. The preferred style on this list is inline or
> bottom posting(https://en.wikipedia.org/wiki/Posting_style).
>
>  > I have a Postgresql client installed and connected.  how can i create a
>  > batch script running from the client window?
>
> Create a file with commands in it like the example from Christopher
> Browne that was posted earlier:
>
> "There is no single straightforward answer to that.
>
>
> Supposing I want a batch to either all be processed, or to all not process,
> then I might write a sql file like:
>
>
> begin;
> \copy table_1 (c1, c2, c3) from '/path/tabledata1.csv' csv header;
> \copy table_2 (c1, c2, c3) from '/path/tabledata2.csv' csv header;
> \copy table_3 (c1, c2, c3) from '/path/tabledata3.csv' csv header;
> commit;
>
>
> But you may be fine with having a separate SQL script for each table.
>
>
> There will be conditions where one or the other is more appropriate, and
> that will be based on the requirements of the process."
>
> Then point psql at it:
>
> psql -d some_db -h some_host -U some_user -f the_file
>
> Be aware that \copy is all or nothing. If there is a single failure in
> the copying the whole copy will rollback. Given that the one file per
> table might be preferable.
>
>
>  >
>  > **
>  > *Bach-Nga
>
>  >
>
>
>
> --
> Adrian Klaver
> [hidden email] <mailto:[hidden email]>

>
>
>


--
Adrian Klaver
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

Adrian Klaver-4
On 6/18/20 12:54 PM, Pepe TD Vo wrote:

>>>psql -d production  -U postgres -c 'select count(*) from cell_per';
> Null display is "NULL".
>    count
> -------
>      68
> (1 row)
>
> you can do this once you are in psql. But if you are running from shell
> script, it will be an error
>
>  >>What error messages do you get?
>
> my shell script is:
> @echo off
> C:\Program Files\PostgreSQL\11\bin\psql -U PSmasteruser  -d PSCIDR -h
> hostname.amazonaws.com -p 5432 -c "select count(*) from tableA;"
> pause
>
> the error I have is 'C:\Program' is not recognized as an internal or
> external command, operable program or batch file.
>
> I even surround the path in quotes because of space.
> @echo off
> cmd /c ""C:\Program Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d
> PSCIDR -h hostname.amazonaws.com -p 5432 -c "select count(*) from tableA;"
> pause

Not sure how quoting works in Windows shell scripts, but pretty sure the
above has unbalanced quotes.


>
> error is: 'C:\Program Files\PostgreSQL\11\bin\psql: illegal option -- u
>
> when I put -P Password123 (or fully qualified password=Password123)

I would recommend spending some time here:

https://www.postgresql.org/docs/12/app-psql.html

to see what the options are. Hint: -P is not the option for password.

>
> it gives me another error "pset: unknow option: Password123
> psql: could not set printing parameter "Password123"

It is the option for pset as the error message says.

>
> I can connect from psql shell fine when it prompt hostname, username
> (but connect to postgres not to PSmasteruser, PSmasteruser username set
> up for aws maintenance postgres database, someone did, not me and the
> password is same on both).  Once I'm in psql and I can change to PSCIDR
> instance fine and run select count(*) from tableA;
>
>
>
> **
> *Bach-Nga
>


--
Adrian Klaver
[hidden email]


bvo
Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

bvo
thank you for the link.  I did try it and it's still error
echo 'SELECT count(*) FROM tableA;' | 
C:\Program Files\PostgreSQL\11\bin\psql -U PSmasteruser -d PSCIDR -h hostname.amazonaws.com -p 5432

I can run 'psql -u postgres -d PSCIDR -p 5432' (on Linux server, still learning how to run it from psql shell in Window) fine from psql prompt.  Just still wonder how to connect directly to the instance PSCIDR from scripting in both aws and linux.  Otherwise manually run using pgAdmin.

v/r,

Bach-Nga

No one in this world is pure and perfect.  If you avoid people for their mistakes you will be alone. So judge less, love, and forgive more.EmojiEmojiEmoji
To call him a dog hardly seems to do him justice though in as much as he had four legs, a tail, and barked, I admit he was, to all outward appearances. But to those who knew him well, he was a perfect gentleman (Hermione Gingold)

**Live simply **Love generously **Care deeply **Speak kindly.
*** Genuinely rich *** Faithful talent *** Sharing success




On Thursday, June 18, 2020, 07:00:37 PM EDT, Adrian Klaver <[hidden email]> wrote:


On 6/18/20 12:54 PM, Pepe TD Vo wrote:

>>>psql -d production  -U postgres -c 'select count(*) from cell_per';
> Null display is "NULL".
>    count
> -------
>      68
> (1 row)
>
> you can do this once you are in psql. But if you are running from shell
> script, it will be an error
>
>  >>What error messages do you get?
>
> my shell script is:
> @echo off
> C:\Program Files\PostgreSQL\11\bin\psql -U PSmasteruser  -d PSCIDR -h
> hostname.amazonaws.com -p 5432 -c "select count(*) from tableA;"
> pause
>
> the error I have is 'C:\Program' is not recognized as an internal or
> external command, operable program or batch file.
>
> I even surround the path in quotes because of space.
> @echo off
> cmd /c ""C:\Program Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d
> PSCIDR -h hostname.amazonaws.com -p 5432 -c "select count(*) from tableA;"
> pause

Not sure how quoting works in Windows shell scripts, but pretty sure the
above has unbalanced quotes.


>
> error is: 'C:\Program Files\PostgreSQL\11\bin\psql: illegal option -- u
>
> when I put -P Password123 (or fully qualified password=Password123)

I would recommend spending some time here:

https://www.postgresql.org/docs/12/app-psql.html

to see what the options are. Hint: -P is not the option for password.

>
> it gives me another error "pset: unknow option: Password123
> psql: could not set printing parameter "Password123"

It is the option for pset as the error message says.


>
> I can connect from psql shell fine when it prompt hostname, username
> (but connect to postgres not to PSmasteruser, PSmasteruser username set
> up for aws maintenance postgres database, someone did, not me and the
> password is same on both).  Once I'm in psql and I can change to PSCIDR
> instance fine and run select count(*) from tableA;
>
>
>
> **
> *Bach-Nga
>


--
Adrian Klaver
[hidden email]
Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

Adrian Klaver-4
On 6/18/20 4:37 PM, Pepe TD Vo wrote:
> thank you for the link.  I did try it and it's still error
>
> echo 'SELECT count(*) FROM tableA;' |
> C:\Program Files\PostgreSQL\11\bin\psql -U PSmasteruser -d PSCIDR -h
> hostname.amazonaws.com -p 5432


This is getting old. The error is?

>
> I can run 'psql -u postgres -d PSCIDR -p 5432' (on Linux server, still
> learning how to run it from psql shell in Window) fine from psql
> prompt.  Just still wonder how to connect directly to the instance
> PSCIDR from scripting in both aws and linux.  Otherwise manually run
> using pgAdmin.
>
> v/r,
>
> **
> *Bach-Nga
>


--
Adrian Klaver
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

cgerard999

Remove the quotes around echo

echo select count(*) from web_20200619; | "C:\Program Files\postgresql\11\bin\psql" -d *** -h *** -U ***

or, store your query into a text file and use 

psql -f query.sql



Sent from my mobile phone

Le 19 juin 2020 à 02:00, Adrian Klaver <[hidden email]> a écrit :

On 6/18/20 4:37 PM, Pepe TD Vo wrote:
thank you for the link.  I did try it and it's still error
echo 'SELECT count(*) FROM tableA;' |
C:\Program Files\PostgreSQL\11\bin\psql -U PSmasteruser -d PSCIDR -h hostname.amazonaws.com -p 5432


This is getting old. The error is?
I can run 'psql -u postgres -d PSCIDR -p 5432' (on Linux server, still learning how to run it from psql shell in Window) fine from psql prompt.  Just still wonder how to connect directly to the instance PSCIDR from scripting in both aws and linux.  Otherwise manually run using pgAdmin.
v/r,
**
*Bach-Nga


--
Adrian Klaver
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

Adrian Klaver-4
On 6/19/20 4:12 AM, Pepe TD Vo wrote:
> thank you,   I tried that too, remove the quote around the echo and it
> prompt for password, as I mentioned no matter I put -P mypassword no
> matter what I spell out password=mypassword still argument error

Once again -P has nothing to do with password. Also --password does not
take an argument, it is meant to be used as is. The purpose is to force
a password prompt. This is all spelled out here:

https://www.postgresql.org/docs/12/app-psql.html

Also spelled out in above is:

" It is also convenient to have a ~/.pgpass file to avoid regularly
having to type in passwords. See Section 33.15 for more information."

And Section 33.15:

https://www.postgresql.org/docs/12/libpq-pgpass.html

"The file .pgpass in a user's home directory can contain passwords to be
used if the connection requires a password (and no password has been
specified otherwise).  ..."

Read more at link for how to do that.

>
>  >>echo select count(*) from tableA; | "C:\Program
> Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d PSCIDR -h
> hostname.amazonaws.com -p 5432
>
>  >> echo select count(*) from tableA; | "C:\Program
> Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d PSCIDR -h
> hostname.amazonaws.com -p 5432 password=mypassword
>
> all usernames are same password.
>
> thank you so much for all input.
>
> v/r,
>
> **
> *Bach-Nga

--
Adrian Klaver
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

Adrian Klaver-4
On 6/19/20 6:53 AM, Pepe TD Vo wrote:
> Thank you sir and I am sorry for the typo not having "--" on password.  
> I did spelling out with --password=mypassword

Please go back and read my post again.

>
>>> echo select count(*) from tableA; | "C:\Program
> Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d PSCIDR -h
> hostname.amazonaws.com -p 5432 --password=mypassword
>
> even -W for password
>>> echo select count(*) from tableA; | "C:\Program
> Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d PSCIDR -h
> hostname.amazonaws.com -p 5432 -W=mypassword
>
> none of them work, still prompt me for password to type in.  I will look
> into the pgpassfile which I know it will fail again.
>
>
> very respectfully,
>
> **
> *Bach-Nga
>
> *No one in this world is pure and perfect.  If you avoid people for
> their mistakes you will be alone. So judge less, love, and forgive
> more.EmojiEmojiEmoji
> To call him a dog hardly seems to do him justice though in as much as he
> had four legs, a tail, and barked, I admit he was, to all outward
> appearances. But to those who knew him well, he was a perfect gentleman
> (Hermione Gingold)
>
> **Live simply **Love generously **Care deeply **Speak kindly.
> *** Genuinely rich *** Faithful talent *** Sharing success
>
>
>
>
> On Friday, June 19, 2020, 09:19:35 AM EDT, Adrian Klaver
> <[hidden email]> wrote:
>
>
> On 6/19/20 4:12 AM, Pepe TD Vo wrote:
>  > thank you,   I tried that too, remove the quote around the echo and it
>  > prompt for password, as I mentioned no matter I put -P mypassword no
>  > matter what I spell out password=mypassword still argument error
>
> Once again -P has nothing to do with password. Also --password does not
> take an argument, it is meant to be used as is. The purpose is to force
> a password prompt. This is all spelled out here:
>
> https://www.postgresql.org/docs/12/app-psql.html
>
> Also spelled out in above is:
>
> " It is also convenient to have a ~/.pgpass file to avoid regularly
> having to type in passwords. See Section 33.15 for more information."
>
> And Section 33.15:
>
> https://www.postgresql.org/docs/12/libpq-pgpass.html
>
> "The file .pgpass in a user's home directory can contain passwords to be
> used if the connection requires a password (and no password has been
> specified otherwise).  ..."
>
> Read more at link for how to do that.
>
>
>  >
>  >  >>echo select count(*) from tableA; | "C:\Program
>  > Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d PSCIDR -h
>  > hostname.amazonaws.com -p 5432
>  >
>  >  >> echo select count(*) from tableA; | "C:\Program
>  > Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d PSCIDR -h
>  > hostname.amazonaws.com -p 5432 password=mypassword
>  >
>  > all usernames are same password.
>  >
>  > thank you so much for all input.
>  >
>  > v/r,
>  >
>  > **
>  > *Bach-Nga
>
> --
> Adrian Klaver
> [hidden email] <mailto:[hidden email]>
>
>


--
Adrian Klaver
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

Adrian Klaver-4
In reply to this post by Adrian Klaver-4
On 6/19/20 7:17 AM, pepevo wrote:
> I understand your post about "password does not take an argument, it is
> meant to be used as is. The purpose is to force a password prompt." When
> I used -W and --password=.  That's what I said I will try pgpassfile.  
> Thought it like mysq/oracle can indicate out without creating password
> file.

If you want to expose your password in the script file then:

https://www.postgresql.org/docs/12/app-psql.html

Usage
Connecting to a Database

"An alternative way to specify connection parameters is in a conninfo
string or a URI, which is used instead of a database name. This
mechanism give you very wide control over the connection. For example:

$ psql "service=myservice sslmode=require"
$ psql postgresql://dbmaster:5433/mydb?sslmode=require

This way you can also use LDAP for connection parameter lookup as
described in Section 33.17. See Section 33.1.2 for more information on
all the available connection options."

So:

psql
postgresql://PSmasteruser:[hidden email]:5432/PSCIDR

or

psql 'dbname=PSCIDR user=PSmasteruser host=hostname.amazonaws.com port=
5432 password=mypassword '

>
> Thank you again.
>
> Bach-Nga
>
> Sent from my Metro By T-Mobile 4G LTE Android Device
>
>
> -------- Original message --------
> From: Adrian Klaver <[hidden email]>
> Date: 6/19/20 09:58 (GMT-05:00)
> To: Pepe TD Vo <[hidden email]>, [hidden email]
> Cc: Christopher Browne <[hidden email]>, Pgsql-admin
> <[hidden email]>, Pgsql-general <[hidden email]>
> Subject: Re: create batch script to import into postgres tables
>
> On 6/19/20 6:53 AM, Pepe TD Vo wrote:
>  > Thank you sir and I am sorry for the typo not having "--" on password.
>  > I did spelling out with --password=mypassword
>
> Please go back and read my post again.
>
>  >
>  >>> echo select count(*) from tableA; | "C:\Program
>  > Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d PSCIDR -h
>  > hostname.amazonaws.com -p 5432 --password=mypassword
>  >
>  > even -W for password
>  >>> echo select count(*) from tableA; | "C:\Program
>  > Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d PSCIDR -h
>  > hostname.amazonaws.com -p 5432 -W=mypassword
>  >
>  > none of them work, still prompt me for password to type in.  I will look
>  > into the pgpassfile which I know it will fail again.
>  >
>  >
>  > very respectfully,
>  >
>  > **
>  > *Bach-Nga
>  >
>  > *No one in this world is pure and perfect.  If you avoid people for
>  > their mistakes you will be alone. So judge less, love, and forgive
>  > more.EmojiEmojiEmoji
>  > To call him a dog hardly seems to do him justice though in as much as he
>  > had four legs, a tail, and barked, I admit he was, to all outward
>  > appearances. But to those who knew him well, he was a perfect gentleman
>  > (Hermione Gingold)
>  >
>  > **Live simply **Love generously **Care deeply **Speak kindly.
>  > *** Genuinely rich *** Faithful talent *** Sharing success
>  >
>  >
>  >
>  >
>  > On Friday, June 19, 2020, 09:19:35 AM EDT, Adrian Klaver
>  > <[hidden email]> wrote:
>  >
>  >
>  > On 6/19/20 4:12 AM, Pepe TD Vo wrote:
>  >  > thank you,   I tried that too, remove the quote around the echo and it
>  >  > prompt for password, as I mentioned no matter I put -P mypassword no
>  >  > matter what I spell out password=mypassword still argument error
>  >
>  > Once again -P has nothing to do with password. Also --password does not
>  > take an argument, it is meant to be used as is. The purpose is to force
>  > a password prompt. This is all spelled out here:
>  >
>  > https://www.postgresql.org/docs/12/app-psql.html
>  >
>  > Also spelled out in above is:
>  >
>  > " It is also convenient to have a ~/.pgpass file to avoid regularly
>  > having to type in passwords. See Section 33.15 for more information."
>  >
>  > And Section 33.15:
>  >
>  > https://www.postgresql.org/docs/12/libpq-pgpass.html
>  >
>  > "The file .pgpass in a user's home directory can contain passwords to be
>  > used if the connection requires a password (and no password has been
>  > specified otherwise).  ..."
>  >
>  > Read more at link for how to do that.
>  >
>  >
>  >  >
>  >  >  >>echo select count(*) from tableA; | "C:\Program
>  >  > Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d PSCIDR -h
>  >  > hostname.amazonaws.com -p 5432
>  >  >
>  >  >  >> echo select count(*) from tableA; | "C:\Program
>  >  > Files\PostgreSQL\11\bin\psql" -U PSmasteruser -d PSCIDR -h
>  >  > hostname.amazonaws.com -p 5432 password=mypassword
>  >  >
>  >  > all usernames are same password.
>  >  >
>  >  > thank you so much for all input.
>  >  >
>  >  > v/r,
>  >  >
>  >  > **
>  >  > *Bach-Nga
>  >
>  > --
>  > Adrian Klaver
>  > [hidden email] <mailto:[hidden email]>
>  >
>  >
>
>
> --
> Adrian Klaver
> [hidden email]
>
>


--
Adrian Klaver
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

David G Johnston
In reply to this post by Adrian Klaver-4
On Fri, Jun 19, 2020 at 6:58 AM Adrian Klaver <[hidden email]> wrote:
On 6/19/20 6:53 AM, Pepe TD Vo wrote:
> Thank you sir and I am sorry for the typo not having "--" on password. 
> I did spelling out with --password=mypassword

Please go back and read my post again.

To be clear, there is no way to supply a password as a command line argument.  It is fundamentally a bad idea and we don't even make it an option.

You need to decide on one of the actual ways of supplying a password, or choose an alternative authentication method like peer.

David J.

Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

David G Johnston
In reply to this post by Adrian Klaver-4
On Fri, Jun 19, 2020 at 7:33 AM Adrian Klaver <[hidden email]> wrote:
On 6/19/20 7:17 AM, pepevo wrote:
> I understand your post about "password does not take an argument, it is
> meant to be used as is. The purpose is to force a password prompt." When
> I used -W and --password=.  That's what I said I will try pgpassfile. 
> Thought it like mysq/oracle can indicate out without creating password
> file.

If you want to expose your password in the script file then:

https://www.postgresql.org/docs/12/app-psql.html

Usage
Connecting to a Database

"An alternative way to specify connection parameters is in a conninfo
string or a URI, which is used instead of a database name. This
mechanism give you very wide control over the connection. For example:

$ psql "service=myservice sslmode=require"
$ psql postgresql://dbmaster:5433/mydb?sslmode=require

This way you can also use LDAP for connection parameter lookup as
described in Section 33.17. See Section 33.1.2 for more information on
all the available connection options."

So:

psql
postgresql://PSmasteruser:mypassword@...:5432/PSCIDR

or

psql 'dbname=PSCIDR user=PSmasteruser host=hostname.amazonaws.com port=
5432 password=mypassword '


Ok, so not "no way", but it's still a bad idea given the availability of other better options.  Namely PGPASSWORD, .pgpass, or, less desirably.pg_service.conf

The URI format that includes a password should be reserved for client libraries and avoided when using psql (just the password part really though I much prefer the service file option myself).

David J.

Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

Adrian Klaver-4
In reply to this post by David G Johnston
On 6/19/20 7:52 AM, David G. Johnston wrote:

> On Fri, Jun 19, 2020 at 6:58 AM Adrian Klaver <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>     On 6/19/20 6:53 AM, Pepe TD Vo wrote:
>      > Thank you sir and I am sorry for the typo not having "--" on
>     password.
>      > I did spelling out with --password=mypassword
>
>     Please go back and read my post again.
>
>
> To be clear, there is no way to supply a password as a command line
> argument.  It is fundamentally a bad idea and we don't even make it an
> option.

Actually that is not entirely true, see my follow up post.

>
> You need to decide on one of the actual ways of supplying a password, or
> choose an alternative authentication method like peer.
>
> David J.
>


--
Adrian Klaver
[hidden email]


bvo
Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

bvo
appreciate for clarification, all inputs and teaching me more in PostgreSQL

have a good weekend and happy father's day to all who is Father.

v/r, 

Bach-Nga

No one in this world is pure and perfect.  If you avoid people for their mistakes you will be alone. So judge less, love, and forgive more.EmojiEmojiEmoji
To call him a dog hardly seems to do him justice though in as much as he had four legs, a tail, and barked, I admit he was, to all outward appearances. But to those who knew him well, he was a perfect gentleman (Hermione Gingold)

**Live simply **Love generously **Care deeply **Speak kindly.
*** Genuinely rich *** Faithful talent *** Sharing success




On Friday, June 19, 2020, 10:57:59 AM EDT, Adrian Klaver <[hidden email]> wrote:


On 6/19/20 7:52 AM, David G. Johnston wrote:

> On Fri, Jun 19, 2020 at 6:58 AM Adrian Klaver <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>    On 6/19/20 6:53 AM, Pepe TD Vo wrote:
>      > Thank you sir and I am sorry for the typo not having "--" on
>    password.
>      > I did spelling out with --password=mypassword
>
>    Please go back and read my post again.
>
>
> To be clear, there is no way to supply a password as a command line
> argument.  It is fundamentally a bad idea and we don't even make it an
> option.

Actually that is not entirely true, see my follow up post.

>
> You need to decide on one of the actual ways of supplying a password, or
> choose an alternative authentication method like peer.
>
> David J.

>


--
Adrian Klaver
[hidden email]


Reply | Threaded
Open this post in threaded view
|

Re: create batch script to import into postgres tables

cgerard999
There is an alternate solution, which is to launch pgadmin GUI, connect to the database, tick « save password »  
Then psql won’t prompt fir password any more. 
Pay however attention to the security concern. 

Sent from my mobile phone

Le 19 juin 2020 à 17:07, Pepe TD Vo <[hidden email]> a écrit :


appreciate for clarification, all inputs and teaching me more in PostgreSQL

have a good weekend and happy father's day to all who is Father.

v/r, 

Bach-Nga

No one in this world is pure and perfect.  If you avoid people for their mistakes you will be alone. So judge less, love, and forgive more.EmojiEmojiEmoji
To call him a dog hardly seems to do him justice though in as much as he had four legs, a tail, and barked, I admit he was, to all outward appearances. But to those who knew him well, he was a perfect gentleman (Hermione Gingold)

**Live simply **Love generously **Care deeply **Speak kindly.
*** Genuinely rich *** Faithful talent *** Sharing success




On Friday, June 19, 2020, 10:57:59 AM EDT, Adrian Klaver <[hidden email]> wrote:


On 6/19/20 7:52 AM, David G. Johnston wrote:

> On Fri, Jun 19, 2020 at 6:58 AM Adrian Klaver <[hidden email]
> <mailto:[hidden email]>> wrote:
>
>    On 6/19/20 6:53 AM, Pepe TD Vo wrote:
>      > Thank you sir and I am sorry for the typo not having "--" on
>    password.
>      > I did spelling out with --password=mypassword
>
>    Please go back and read my post again.
>
>
> To be clear, there is no way to supply a password as a command line
> argument.  It is fundamentally a bad idea and we don't even make it an
> option.

Actually that is not entirely true, see my follow up post.

>
> You need to decide on one of the actual ways of supplying a password, or
> choose an alternative authentication method like peer.
>
> David J.

>


--
Adrian Klaver
[hidden email]


12