pgcli
pgcli copied to clipboard
Newlines not printed out as newlines
Description
If I try to perform a query that includes a newline in the output, pgcli shows \n instead of having a line break. I have tried the same thing with psql and it works as expected.
Try the following query:
select E'a\nb';
In psql, it will show this:
?column?
----------
a +
b
(1 row)
In pgcli, it is showing a\nb as the column value. As in a literal \n. Ideally, it would either match psql or just have a newline without the + character (or with a different character).
Your environment
- [x] Please provide your OS and version information. - macOS 10.15.7
- [x] Please provide your CLI version. 3.2.0
- [x] What is the output of
pip freezecommand.
3to2==1.1.1
agate==1.6.3
agate-dbf==0.2.2
agate-excel==0.2.5
agate-sql==0.5.8
appdirs==1.4.4
applib==1.2
arrow==1.2.1
b2==3.2.0
b2sdk==1.14.0
Babel==2.9.1
certifi==2021.10.8
chardet==4.0.0
charset-normalizer==2.0.9
class-registry==2.1.2
cli-helpers==2.2.0
click==8.0.3
cmdln==2.0.0
CodeIntel==2.0.0
configobj==5.0.6
csvkit==1.0.6
dbfread==2.0.7
docutils==0.16
esprima==4.0.1
et-xmlfile==1.1.0
funcsigs==1.0.2
future==0.18.2
greenlet==1.1.2
humanize==3.13.1
idna==3.3
importlib-metadata==4.8.3
Inflector==3.0.1
isodate==0.6.1
jdcal==1.4.1
leather==0.3.4
libclang-py3==3.9.0
logfury==1.0.1
olefile==0.46
openpyxl==3.0.9
parsedatetime==2.6
pendulum==2.1.2
pgcli==3.2.0
pgspecial==1.13.0
phx-class-registry==3.0.5
prompt-toolkit==3.0.24
psycopg2==2.9.3
Pygments==2.11.1
PyICU==2.8
pyobjc-core==8.1
pyobjc-framework-Cocoa==8.1
pyobjc-framework-Quartz==8.1
python-dateutil==2.8.2
python-slugify==5.0.2
pytimeparse==1.1.8
pytz==2021.3
pytzdata==2020.1
requests==2.26.0
rst2ansi==0.1.5
setproctitle==1.2.2
simplejson==3.17.6
six==1.16.0
SQLAlchemy==1.4.29
sqlparse==0.4.2
tabulate==0.8.9
terminaltables==3.1.10
text-unidecode==1.3
tqdm==4.62.3
typing_extensions==4.0.1
Unidecode==1.3.2
urllib3==1.26.7
wcwidth==0.2.5
xlrd==2.0.1
zipp==3.6.0
zope.cachedescriptors==4.3.1
Possibly same issue as https://github.com/dbcli/mycli/issues/1024.
Ah, sorry about that. I searched a bunch, but searching "\n" had way too many results so I struggled to sort through them, and I didn't find that one with a search for the term newline.
The same issue is in mycli repo, you were searching in pgcli, it's all good!
@henderea What table_format is specified in your pgcli config? It may not be the same issue. Pgcli uses psql format by default, not ascii like mycli does.
I'm away from my computer at the moment, but if double (as in double-thickness bordered table) is the sort of thing you're looking for, then that's the setting.
The issue also happens if I switch the pager to pspg (normally I have it set to less)
Yeah, this is what I have set:
table_format = double
Also, for my pager, both of these have the issue (but work fine otherwise):
pager = less -SRXF
pager = /usr/local/bin/pspg --csv --rr=2 --quit-if-one-screen --ignore-case --csv-header on -s 17
As a note, I can confirm that the issue is not pspg because this works as expected:
psql -c "select E'a\nb';" -P format=csv postgres | pspg --csv --rr=2 --quit-if-one-screen --ignore-case --csv-header on -s 17
And shows:
┌──────────┐
│ ?column? │
├──────────┤
│ a ↵│
│ b │
└──────────┘
(2 rows)
So the issue seems to be specifically in pgcli. I originally discovered the issue with a query that had wider results than what could fit on my screen, so it was definitely using the pager there. I don't seem to be able to force the pager for my example query in pgcli because the results are so small, but the pager clearly isn't the issue anyway.
Oh, hey. I just tried table_format = psql, and it worked fine with that:
+----------+
| ?column? |
|----------|
| a |
| b |
+----------+
SELECT 1
Time: 0.036s
So the issue seems to be the "double" format, and maybe certain others. Probably not limited to pgcli, then.
Also, when I use table_format = csv with the pspg pager I pasted in my previous comment, it also works fine, showing a result matching what I got with the psql command. So it's definitely limited to specific table formats.