28 Şubat 2023 Salı

psql - PostgreSQL Interactive Terminal Meta Commands

Giriş
Kabuk açıldıktan sonra komut çalıştırmak içindir.

Genel
\l (List) ile veri tabanları listelenir
\c  (Connect) dbname ile veri tabanına bağlanılır
\d (Describe) ile tablo yapısı incelenebilir
\dt (Describe Tables) ile tablolar listelenir
\di (Describe Index) ile indeksler listelenir

\q - quit
Kabuktan çıkmak içindir

\c [database] veya \connect [database] seçeneği - Connect to a different database
Bir veri tabanına bağlanır. Kısa hali \c şeklindedir.
Örnek
payment isimli bir veri tabanı olsun. Şöyle yaparız. Bu komuttan sonra prompt'un veri tabanı ismi olduğu görülebilir.
postgre#\c payment
You are not connected to database 'payment' as "...".
payment#
Örnek
Şöyle yaparız. Burada postgres veri tabanına bağlıydık. \c ile myjhipsterplanet veri tabanına bağlandık. Ayrıca hangi kullanıcı olarak bağlandığımızı da gösteriyor.
postgres=# \c myjhipsterplanet 
You are now connected to database "myjhipsterplanet" as user "mypostgresqldumpplanet".
Örnek
Şöyle yaparız.
\connect springbootjpa
Örnek
Şöyle yaparız
> \c pg_dev

> CREATE TABLE mini_ticker (...);
\copy
Örnek
Şöyle yaparız
psql -h "$host" -U postgres -d demo 
  -c "\copy (SELECT row_to_json(t) FROM ( $query ) t) To STDOUT" 
>> metrics/query-output.log
Örnek
Şöyle yaparız. admission tablosuna csv dosyasındaki satırları kopyalar
\copy admission FROM '/home/data/admit_1.csv' DELIMITER ',' CSV HEADER

\d [table] seçeneği -  Describe a table structure
Describe anlamına gelir. Tablonun sütunlarını gösterir. 
Örnek
Şöyle yaparız
> CREATE TABLE grades(id SERIAL NOT NULL, g INT NOT NULL);
> CREATE INDEX grades_index ON grades(g);

> \d grades;
                            Table "public.grades"
 Column |  Type   | Collation | Nullable |              Default               
--------+---------+-----------+----------+------------------------------------
 id     | integer |           | not null | nextval('grades_id_seq'::regclass)
 g      | integer |           | not null | 
Indexes:
    "grades_index" btree (g)
Örnek
Şöyle yaparız
demodb=# \dt
                 List of relations
 Schema |         Name          | Type  |  Owner   
--------+-----------------------+-------+----------
 public | flyway_schema_history | table | postgres
 public | tenant                | table | postgres
(2 rows)

demodb=# \d tenant
                      Table "public.tenant"
 Column |          Type          | Collation | Nullable | Default 
--------+------------------------+-----------+----------+---------
 id     | uuid                   |           | not null | 
 name   | character varying(100) |           | not null | 
Indexes:
    "tenant_pkey" PRIMARY KEY, btree (id)
\df - List functions
Örnek ver

\di seçeneği
Describe Index anlamına gelir. İndeksleri gösterir
Örnek
Şöyle yaparız
# \di+
                                        List of relations
 Schema | Name  | Type  |  Owner   | Table | Persistence | Access method |  Size   | Description
--------+-------+-------+----------+-------+-------------+---------------+---------+-------------
 public | a_idx | index | postgres | t1    | permanent   | btree         | 6712 kB |
(1 row)
Sonra şöyle yaparız. Böylece index dosyasının ismini öğreniriz.
# select pg_relation_filepath('a_idx');
 pg_relation_filepath
----------------------
 base/16699/16723
(1 row)
Sonra şöyle yaparız. Böylece verinin saklandığı dizinin yolunu öğreniriz.
# show data_directory;
          data_directory
-----------------------------------
 /home/postgres/pgdata/data
(1 row)
Yani index dosyası burada /home/postgres/pgdata/data/base/16699/16723
Teyit etmek için şöyle yaparız
# \! ls /home/postgres/pgdata/data/base/16699/16723
/home/postgres/pgdata/data/base/16699/16723
\dn - List schemas
Örnek ver

\dt seçeneği - List tables in the current database
Describe Tables anlamına gelir. Tabloları gösterir
Örnek
Şöyle yaparız
adv=> \dt
                    List of relations
 Schema |              Name              | Type  | Owner
--------+--------------------------------+-------+-------
 adv    | cfr_history_log                | table | adv
...
\du seçeneği - List users and their roles
Describe Users anlamına gelir. Kullanıcıları gösterir

\i seçeneği
Beliritlen dosyayı çalıştırır. Şöyle yaparız.
\i "C:\Users\myname\some path\query.sql"
\l seçeneği veya \list -  List all databases
Veri tabanlarını listeler

Örnek
Şöyle yaparız. Burada 5 tane veri tabanı var. 
postgres=# \l
                                                            List of databases
          Name          |         Owner          | Encoding |  Collate   |   Ctype    |                 Access privileges                 
------------------------+------------------------+----------+------------+------------+---------------------------------------------------
 myjhipsterplanet       | myjhipsterplanet       | UTF8     | en_US.utf8 | en_US.utf8 | 
 mypostgresqldumpplanet | mypostgresqldumpplanet | UTF8     | en_US.utf8 | en_US.utf8 | 
 postgres               | mypostgresqldumpplanet | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0              | mypostgresqldumpplanet | UTF8     | en_US.utf8 | en_US.utf8 | =c/mypostgresqldumpplanet                        +
                        |                        |          |            |            | mypostgresqldumpplanet=CTc/mypostgresqldumpplanet
 template1              | mypostgresqldumpplanet | UTF8     | en_US.utf8 | en_US.utf8 | =c/mypostgresqldumpplanet                        +
                        |                        |          |            |            | mypostgresqldumpplanet=CTc/mypostgresqldumpplanet

\x seçeneği
Select cümlesi ile gösterilen kayıtları expanded display olarak gösterir. Yani sütunları alt alta yazar

26 Şubat 2023 Pazar

CREATE PROCEDURE

Örnek
Şöyle yaparız
CREATE PROCEDURE insert_address_data(recs INTEGER)
LANGUAGE plpgsql AS
$$
DECLARE 
    address_id VARCHAR;
	address_city VARCHAR;
	address_state VARCHAR;

BEGIN
  for i in 1..recs LOOP
    SELECT CONCAT('id0000-1234545-98756453-00' ,i) INTO address_id;
    SELECT CONCAT('city_' ,i) INTO address_city;
    SELECT CONCAT('state_' ,i) INTO address_state;
    INSERT INTO address (id, city, state) VALUES (address_id, address_city, address_state);
    IF i % 10000 = 0 THEN
      COMMIT;
    END IF;
  END LOOP;
END
$$;
--
-- INSERT 100K records in each table. Record the time from pgAdmin
CALL insert_books_data(100000);
CALL insert_employees_data(100000);
CALL insert_employees_data(100000);

23 Şubat 2023 Perşembe

JDBC Sürücüleri

Örnek
Şöyle yaparız
<dependency>
<groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.5.4</version> </dependency>

13 Şubat 2023 Pazartesi