Select datatype of the field in postgres

后端 未结 7 2051

How do I get datatype of specific field from table in postgres ? For example I have the following table, student_details ( stu_id integer, stu_name varcha

相关标签:
7条回答
  • 2020-12-12 11:49

    run psql -E and then \d student_details

    0 讨论(0)
  • 2020-12-12 11:54

    You can get data types from the information_schema (8.4 docs referenced here, but this is not a new feature):

    =# select column_name, data_type from information_schema.columns
    -# where table_name = 'config';
        column_name     | data_type 
    --------------------+-----------
     id                 | integer
     default_printer_id | integer
     master_host_enable | boolean
    (3 rows)
    
    0 讨论(0)
  • 2020-12-12 11:54

    You can use the pg_typeof() function, which also works well for arbitrary values.

    SELECT pg_typeof("stu_id"), pg_typeof(100) from student_details limit 1;
    
    0 讨论(0)
  • 2020-12-12 12:00

    If you like 'Mike Sherrill' solution but don't want to use psql, I used this query to get the missing information:

    select column_name,
    case 
        when domain_name is not null then domain_name
        when data_type='character varying' THEN 'varchar('||character_maximum_length||')'
        when data_type='numeric' THEN 'numeric('||numeric_precision||','||numeric_scale||')'
        else data_type
    end as myType
    from information_schema.columns
    where table_name='test'
    

    with result:

    column_name |     myType
    -------------+-------------------
     test_id     | test_domain
     test_vc     | varchar(15)
     test_n      | numeric(15,3)
     big_n       | bigint
     ip_addr     | inet
    
    0 讨论(0)
  • 2020-12-12 12:03

    Try this request :

    SELECT column_name, data_type FROM information_schema.columns WHERE 
    table_name = 'YOUR_TABLE' AND column_name = 'YOUR_FIELD';
    
    0 讨论(0)
  • 2020-12-12 12:04

    Pulling data type from information_schema is possible, but not convenient (requires joining several columns with a case statement). Alternatively one can use format_type built-in function to do that, but it works on internal type identifiers that are visible in pg_attribute but not in information_schema. Example

    SELECT a.attname as column_name, format_type(a.atttypid, a.atttypmod) AS data_type
    FROM pg_attribute a JOIN pg_class b ON a.attrelid = b.relfilenode
    WHERE a.attnum > 0 -- hide internal columns
    AND NOT a.attisdropped -- hide deleted columns
    AND b.oid = 'my_table'::regclass::oid; -- example way to find pg_class entry for a table
    

    Based on https://gis.stackexchange.com/a/97834.

    0 讨论(0)
提交回复
热议问题