PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak działa pg_typeof() w PostgreSQL

W PostgreSQL pg_typeof() funkcja pozwala uzyskać typ danych o dowolnej wartości.

Dokładniej, zwraca OID typu danych wartości, która jest do niego przekazywana. Zwraca regtype , który jest typem aliasu OID. Dlatego jest to to samo, co OID do celów porównawczych, ale wyświetla się jako nazwa typu.

Składnia

Funkcja ma następującą składnię:

pg_typeof(any)

Gdzie any ma jakąkolwiek wartość.

Przykład

Oto podstawowy przykład do zademonstrowania.

SELECT pg_typeof(100);

Wynik:

integer

Dowolne ciągi

W Postgresie istnieje więcej niż jeden typ ciągu (np. char , varchar , text ). Dlatego nie możesz po prostu otoczyć argumentu pojedynczymi cudzysłowami i oczekiwać, że będzie wiedział, jaki jest jego typ danych.

SELECT pg_typeof('Elephant'); 

Wynik:

unknown

Dlatego musisz określić jego rzeczywisty typ danych.

SELECT pg_typeof('Elephant'::varchar); 

Wynik:

character varying

W Postgresie character varying to nazwa dla varchar (właściwie varchar jest aliasem character varying ).

Ten ostatni przykład był trochę zbędny, ponieważ wyraźnie określiłem typ zmiennej, co oznaczało, że już wiedziałem, jaki będzie wynik.

W prawdziwym świecie jest bardziej prawdopodobne, że będziesz próbował uzyskać typ danych zmiennej.

Typ zwrotu zmiennej

W tym przykładzie wstawiam poprzedni ciąg do zmiennej, a następnie pobieram jej typ danych.

DO $$
DECLARE myString varchar(10) := 'Elephant';
BEGIN
 raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$

Wynik:

NOTICE: Value: Elephant
Type: character varying

Oto znowu, z wyjątkiem tego, że zmieniam typ danych na inny typ ciągu (char(8) ).

DO $$
DECLARE myString char(8) := 'Elephant';
BEGIN
 raise notice 'Value: % % Type: %', myString, E'\n', pg_typeof(myString);
END $$

Wynik:

NOTICE: Value: Elephant
Type: character

Wartości logiczne

Oto przykład wyraźnego podania wartości logicznej.

SELECT 
  pg_typeof(true),
  pg_typeof(false); 

Wynik:

 pg_typeof | pg_typeof
-----------+-----------
   boolean | boolean

Powrót typu funkcji

Ponownie, jest mało prawdopodobne, abyś jawnie podał true lub false do tej funkcji. Bardziej prawdopodobne jest, że będzie pochodzić ze zmiennej.

Ale możesz także użyć pg_typeof() aby znaleźć typ zwracanej funkcji.

Oto przykład.

SELECT pg_typeof(isfinite(date '2020-07-18'));

Wynik:

boolean

W tym przypadku przekazałem isfinite() funkcji do pg_typeof() funkcja jako jej argument.

A oto kolejny przykład. W tym otrzymuję typ danych wartości zwracanej przez make_date() funkcja.

SELECT pg_typeof(make_date('1999', '09', '19')); 

Wynik:

date

Typ danych kolumny

Oto przykład zwracania typu danych kolumny bazy danych.

SELECT pg_typeof(last_update)
FROM actor
LIMIT 1;

Wynik:

timestamp without time zone

W tym przypadku sprawdziłem typ danych actor.last_update kolumna w pagila przykładowa baza danych.

Sprawdźmy inną kolumnę:

SELECT pg_typeof(name)
FROM language
LIMIT 1;

Wynik:

character

Ta kolumna jest wyświetlana jako bpchar w moim interfejsie, który najwyraźniej jest wewnętrzną nazwą typu dla CHAR(n) .

Przy okazji, możesz zapytać information_schema.columns dla typu danych kolumny.

Dlatego zamiast tego moglibyśmy użyć następującego zapytania:

SELECT 
  column_name, 
  data_type 
FROM information_schema.columns
WHERE table_name = 'language';

Wynik:

 column_name |          data_type          
-------------+-----------------------------
 language_id | integer
 name        | character
 last_update | timestamp without time zone

W tym przypadku zwróciłem typ danych dla wszystkich kolumn w tabeli.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak porównywać tablice w PostgreSQL

  2. Policz liczbę dni między 2 datami w JPA

  3. Połącz dwie kolumny i dodaj do jednej nowej kolumny

  4. Czy można zdefiniować zmienne globalne w postgresql

  5. Wartość referencyjna kolumny serii w innej kolumnie podczas tej samej INSERT