psql非选择:如何删除格式并仅显示某些列?

时间:2017-07-27 13:34:00

标签: postgresql psql pgpool

我希望从以下网址中删除所有的线条绘制字符:

PGPASSWORD="..." psql -d postgres -h "1.2.3.4" -p 9432 -c 'show pool_nodes' -U owner
 node_id |   hostname    | port | status | lb_weight |  role   
---------+---------------+------+--------+-----------+---------
 0       | 10.20.30.40   | 5432 | 2      | 0.500000  | primary
 1       | 10.20.30.41   | 5432 | 2      | 0.500000  | standby
(2 rows)

添加-t选项会删除页眉和页脚,但竖线仍然存在:

PGPASSWORD="..." psql -t -d postgres -h "1.2.3.4" -p 9432 -c 'show pool_nodes' -U owner
 0       | 10.20.30.40   | 5432 | 2      | 0.500000  | primary
 1       | 10.20.30.41   | 5432 | 2      | 0.500000  | standby

请注意,此问题特定于show pool_nodes和其他类似的非select SQL语句。

我目前的解决方法是涉及Linux cut命令:

<previous command> | cut -d '|' -f 4

问题分为两部分:

  1. 如何仅使用psql删除上面的竖条?
  2. 如何仅使用psql只显示特定列(例如status)或列?例如,结果可能只有两行,每行显示数字2
  3. 我在CentOS 7服务器上使用psql版本psql (PostgreSQL) 9.2.18

1 个答案:

答案 0 :(得分:0)

对于脚本def get(self, request, *args, **kwargs): # Process latitude and longitude coordinates from URL coordinates = kwargs.pop('location', None).split(",") latitude = coordinates[0] longitude = coordinates[1] # Retrieve the Location by latitude and longitude location, created = Location.objects.get_or_create(latitude=latitude, longitude=longitude, defaults={'other': 'fields', 'to': 'add', 'on': 'create') # Retrieve weather data. forecast = get_weather(latitude, longitude) currently = forecast['currently'] # Assign location.pk to currently data currently['location'] = location.pk # Serialize and confirm validity of data. location_serializer = LocationSerializer(data=forecast) if not location_serializer.is_valid(): return Response(location_serializer.errors, status=status.HTTP_400_BAD_REQUEST) currently_serializer = CurrentlySerializer(data=currently) if not currently_serializer.is_valid(): return Response(currently_serializer.errors, status=status.HTTP_400_BAD_REQUEST) response = location_serializer.data + currently_serializer.data return Response(response, status=status.HTTP_200_OK) ,请使用psql

  • psql -qAtX uiet
  • q uples仅
  • un t已签名输出
  • 请勿阅读A.psqlrc

要过滤列,您必须在X列表中对其进行命名。 SELECT始终输出从服务器获取的完整结果集。例如。 psql

或者您可以SELECT status FROM pool_nodes提取有序列号,例如

cut

(我不知道psql -qAtX -c 'whatever' | cut -d '|' -f 1,2-4 如何生成您在此处显示的输出,因为show pool_nodes会返回单个标量值...)

要将分隔符从管道SHOW更改为其他内容,请使用|,例如-F。但是要注意,分隔符在输出中出现时不会被转义,这不是CSV。您可能希望将选项卡视为有用选项;您必须输入带引号的文字标签才能执行此操作。 (如果在交互式shell中执行此操作,请搜索&#34;如何在bash中输入文字选项卡&#34;当您遇到困难时)。

给出虚拟数据显示以上所有内容的示例:

-F ','

查询,使用单个空格作为列分隔符(因此您最好不要在数据中包含空格!):

CREATE TABLE dummy_table (
   a integer,
   b integer,
   c text,
   d text
);

INSERT INTO dummy_table
VALUES
(1,1,'chicken','turkey'),
(2,2,'goat','cow'),
(3,3,'mantis','cricket');

如果由于某种原因您无法为SELECT生成列列表,则可以使用psql -qAtX -F ' ' -c 'SELECT a, b, d FROM dummy_table' 按列顺序进行过滤:

cut